diff --git a/.gitignore b/.gitignore
index 34e5572..fb3dc3d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@
.swp
main
dsn
+*.pem
+api_key.pem
diff --git a/controllers/blog.go b/controllers/blog.go
index e2905e2..6e8f56e 100644
--- a/controllers/blog.go
+++ b/controllers/blog.go
@@ -18,19 +18,26 @@ along with this program. If not, see .Rawley Fow
*/
import (
- "github.com/gin-gonic/gin"
+ "io/ioutil"
+ "log"
"net/http"
+
+ "github.com/gin-gonic/gin"
"gitlab.com/rawleyifowler/site-rework/models"
"gitlab.com/rawleyifowler/site-rework/utils"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
-var db *gorm.DB
+var (
+ db *gorm.DB
+ apiKey string
+)
func RegisterBlogGroup(r *gin.RouterGroup) {
// Load dsn and initialize database
dsn := utils.LoadDSN("dsn")
+ apiKey = utils.LoadApiKey("api_key.pem")
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
@@ -39,6 +46,7 @@ func RegisterBlogGroup(r *gin.RouterGroup) {
utils.PerformMigrations(db)
r.GET("/", RenderBlogPage)
r.GET("/post/:url", RenderIndividualBlogPost)
+ r.POST("/post", CreateBlogPost)
}
func RenderBlogPage(c *gin.Context) {
@@ -49,6 +57,24 @@ func RenderIndividualBlogPost(c *gin.Context) {
c.HTML(http.StatusOK, "blog_post.tmpl", GetBlogPostById(c.Param("url")))
}
+func CreateBlogPost(c *gin.Context) {
+ reqKey, err := c.Request.Cookie("APK")
+ if err != nil {
+ c.Status(406)
+ return
+ }
+ if reqKey.Value != apiKey {
+ c.Status(403)
+ return
+ }
+ data, err := ioutil.ReadAll(c.Request.Body)
+ if err != nil {
+ c.Status(406)
+ return
+ }
+ log.Println(data)
+}
+
func GetAllBlogPosts() *[]models.BlogPost {
var posts []models.BlogPost
db.Find(&posts)
@@ -57,6 +83,6 @@ func GetAllBlogPosts() *[]models.BlogPost {
func GetBlogPostById(id string) *models.BlogPost {
var post models.BlogPost
- db.Where(&models.BlogPost{ Url: id }).First(&post)
+ db.Where(&models.BlogPost{Url: id}).First(&post)
return &post
}
diff --git a/utils/api_key.go b/utils/api_key.go
new file mode 100644
index 0000000..34b827e
--- /dev/null
+++ b/utils/api_key.go
@@ -0,0 +1,35 @@
+package utils
+
+/*
+Copyright (C) 2022 Rawley Fowler
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .Rawley Fowler, 2022
+*/
+import (
+ "bufio"
+ "os"
+)
+
+func LoadApiKey(path string) string {
+ file, err := os.Open(path)
+ defer file.Close()
+ if err != nil {
+ panic("Could not find file: " + path)
+ }
+ reader := bufio.NewScanner(file)
+ if reader.Scan() {
+ return reader.Text()
+ }
+ panic(path + " is empty...")
+}
diff --git a/utils/dsn.go b/utils/dsn.go
index a3cebeb..4771f4f 100644
--- a/utils/dsn.go
+++ b/utils/dsn.go
@@ -1,4 +1,5 @@
package utils
+
/*
Copyright (C) 2022 Rawley Fowler
@@ -16,8 +17,8 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .Rawley Fowler, 2022
*/
import (
- "os"
"bufio"
+ "os"
)
// Loads the dsn via OS file system and then returns the value as a string
@@ -27,7 +28,7 @@ func LoadDSN(dsnPath string) string {
panic("Could not find DSN for database...")
}
defer file.Close()
- reader := bufio.NewScanner(file)
+ reader := bufio.NewScanner(file)
// The dsn should be the first line of the file
if reader.Scan() {
return reader.Text()