diff --git a/go.mod b/go.mod index f2f28f2..2f64c8e 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/1lann/udp-forward v0.0.0-20191015034046-6b774a53ea39 github.com/CalebQ42/bbConvert v1.0.0 github.com/CalebQ42/cdr-backend v0.1.0 - github.com/CalebQ42/stupid-backend/v2 v2.0.2 + github.com/CalebQ42/stupid-backend/v2 v2.0.3 github.com/CalebQ42/swassistant-backend v0.2.0 go.mongodb.org/mongo-driver v1.13.1 ) diff --git a/go.sum b/go.sum index 5adf25b..258a70d 100644 --- a/go.sum +++ b/go.sum @@ -4,10 +4,8 @@ github.com/CalebQ42/bbConvert v1.0.0 h1:2WSAxVKhCCMReuU30r3ehLtL6m9aH8sY3wugp9yU github.com/CalebQ42/bbConvert v1.0.0/go.mod h1:QJevnlhzUdL3EJB5Lgqoi7rdgtzt/UEamn/QGNoVgkM= github.com/CalebQ42/cdr-backend v0.1.0 h1:9245aooAyLxAFO5gfXPgpqOHaYr6NAkMI75v2IlPOVA= github.com/CalebQ42/cdr-backend v0.1.0/go.mod h1:N7A+ia+4GDsDMZ3gb5IRZ6CY07gdFfJECtR9csKh5nI= -github.com/CalebQ42/stupid-backend/v2 v2.0.1 h1:BACdi/3BEDE/vZsKvhZl1OAA74QnP/Zd5Hb8uNQCjrg= -github.com/CalebQ42/stupid-backend/v2 v2.0.1/go.mod h1:skBYIF77NzxYcqZ34V1eSD2/MIZCAGyyINWIkCBrpx8= -github.com/CalebQ42/stupid-backend/v2 v2.0.2 h1:FB4tbu0opV4kTQfO+56dTHuMPnmgbo8F1joDN1fSU0Q= -github.com/CalebQ42/stupid-backend/v2 v2.0.2/go.mod h1:skBYIF77NzxYcqZ34V1eSD2/MIZCAGyyINWIkCBrpx8= +github.com/CalebQ42/stupid-backend/v2 v2.0.3 h1:h6fDA3m1SXcqHebiKyX/VN6W1jGj5ebw/8qrsVY6WvU= +github.com/CalebQ42/stupid-backend/v2 v2.0.3/go.mod h1:skBYIF77NzxYcqZ34V1eSD2/MIZCAGyyINWIkCBrpx8= github.com/CalebQ42/swassistant-backend v0.2.0 h1:pXUG7+uHP5/lHaqqD6Hc64hOjfPzCGO8TkOpvtDB238= github.com/CalebQ42/swassistant-backend v0.2.0/go.mod h1:m67UAzh552+puEc0LngTHzOL3b/Y2B19NzbaVdVeabI= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -18,8 +16,6 @@ github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -42,16 +38,12 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.mongodb.org/mongo-driver v1.13.0 h1:67DgFFjYOCMWdtTEmKFpV3ffWlFnh+CYZ8ZS/tXWUfY= -go.mongodb.org/mongo-driver v1.13.0/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ= go.mongodb.org/mongo-driver v1.13.1 h1:YIc7HTYsKndGK4RFzJ3covLz1byri52x0IoMB0Pt/vk= go.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwDtFu/Z9+eo= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= diff --git a/internal/darkstormtech/app.go b/internal/darkstormtech/app.go index 9d92750..e941642 100644 --- a/internal/darkstormtech/app.go +++ b/internal/darkstormtech/app.go @@ -95,6 +95,27 @@ func (d *DarkstormTech) HandleReqest(req *stupid.Request) bool { return d.handleFiles(req) case "portfolio": return d.handlePortfolio(req) + case "default": + b, err := d.getBlog(req) + if err == mongo.ErrNoDocuments { + req.Resp.Write(notFoundPage().json()) + req.Resp.WriteHeader(http.StatusNotFound) + return true + } else if err != nil { + log.Println("Error while getting blog:", err) + req.Resp.WriteHeader(http.StatusInternalServerError) + return true + } + out := pageOut{ + Content: d.bb.Convert(b.Content), + } + (&out).addDefaults() + _, err = req.Resp.Write(out.json()) + if err != nil { + log.Println("Error while writing response:", err) + req.Resp.WriteHeader(http.StatusInternalServerError) + } + return true } res := d.DB.Collection("pages").FindOne(context.TODO(), bson.M{"_id": strings.Join(req.Path[1:], "/")}, options.FindOne().SetProjection(bson.M{"_id": 0})) if res.Err() == mongo.ErrNoDocuments { @@ -129,14 +150,22 @@ type blog struct { Content string `bson:"content" json:"content"` } -type blogOut struct { - Content string `json:"content"` - Title string `json:"title"` -} - -func (b blogOut) json() []byte { - out, _ := json.Marshal(b) - return out +func (d *DarkstormTech) getBlog(req *stupid.Request) (*blog, error) { + var res *mongo.SingleResult + if len(req.Path) == 2 { + res = d.DB.Collection("blog").FindOne(context.TODO(), bson.M{}, options.FindOne().SetSort(bson.M{"_id": -1})) + } else { + res = d.DB.Collection("blog").FindOne(context.TODO(), bson.M{"_id": req.Path[2]}) + } + if res.Err() != nil { + return nil, res.Err() + } + var b blog + err := res.Decode(&b) + if err != nil { + return nil, err + } + return &b, nil } func (d *DarkstormTech) handleBlog(req *stupid.Request) bool { @@ -146,30 +175,22 @@ func (d *DarkstormTech) handleBlog(req *stupid.Request) bool { req.Resp.WriteHeader(http.StatusBadRequest) return true } - var res *mongo.SingleResult - if len(req.Path) == 2 { - res = d.DB.Collection("blogs").FindOne(context.TODO(), bson.M{}, options.FindOne().SetSort(bson.M{"_id": -1})) - } else { - res = d.DB.Collection("blogs").FindOne(context.TODO(), bson.M{"_id": req.Path[2]}) - } - if res.Err() == mongo.ErrNoDocuments { + b, err := d.getBlog(req) + if err == mongo.ErrNoDocuments { req.Resp.Write(notFoundPage().json()) req.Resp.WriteHeader(http.StatusNotFound) return true - } else if res.Err() != nil { - log.Println("Error while getting blog:", res.Err()) + } else if err != nil { + log.Println("Error while getting blog:", err) req.Resp.WriteHeader(http.StatusInternalServerError) return true } - var b blogOut - err := res.Decode(&b) - if err != nil { - log.Println("Error while decoding blog:", err) - req.Resp.WriteHeader(http.StatusInternalServerError) - return true + out := pageOut{ + Content: d.bb.Convert(b.Content), + Title: b.Title, } - b.Content = d.bb.Convert(b.Content) - _, err = req.Resp.Write(b.json()) + (&out).addDefaults() + _, err = req.Resp.Write(out.json()) if err != nil { log.Println("Error while writing response:", err) req.Resp.WriteHeader(http.StatusInternalServerError) @@ -206,7 +227,7 @@ func (d *DarkstormTech) addBlog(req *stupid.Request) bool { return true } b.ID = strconv.Itoa(int(time.Now().Unix())) - _, err = d.DB.Collection("blogs").InsertOne(context.TODO(), b) + _, err = d.DB.Collection("blog").InsertOne(context.TODO(), b) if err != nil { log.Println("Error while inserting blog:", err) req.Resp.WriteHeader(http.StatusInternalServerError)