Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion embedded/embedded.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ func CopyEmbeddedFile(path string, to string) error {
}

embeddedHash, err := utils.FileHash(bytes.NewReader(content))

if err != nil {
return err
}
Expand Down
49 changes: 49 additions & 0 deletions handlers/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"fmt"
"io"
"net/http"
"strings"

"git.difuse.io/Difuse/kalmia/config"
"git.difuse.io/Difuse/kalmia/services"
Expand Down Expand Up @@ -177,6 +178,54 @@ func UploadFile(db *gorm.DB, w http.ResponseWriter, r *http.Request, cfg *config
SendJSONResponse(http.StatusOK, w, map[string]string{"status": "success", "message": "file_uploaded", "file": fileURL})
}

func UploadAssetsFile(db *gorm.DB, w http.ResponseWriter, r *http.Request, cfg *config.Config) {
// Capped at MaxFileSize set by the user
err := r.ParseMultipartForm(cfg.MaxFileSize << 20)
if err != nil {
SendJSONResponse(http.StatusBadRequest, w, map[string]string{"status": "error", "message": "failed_to_parse_form"})
return
}

uploadTagName := r.FormValue("upload_tag_name")

file, header, err := r.FormFile(uploadTagName)
if err != nil {
SendJSONResponse(http.StatusBadRequest, w, map[string]string{"status": "error", "message": "failed_to_get_file"})
return
}
defer file.Close()

if header.Size > cfg.MaxFileSize<<20 {
SendJSONResponse(http.StatusBadRequest, w, map[string]string{"status": "error", "message": "file_too_large"})
return
}

fileBytes, err := io.ReadAll(file)
if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": "failed_to_read_file"})
return
}

contentType := http.DetectContentType(fileBytes)

fmt.Println("Request URI: ", r.RequestURI)

fileURL, err := services.UploadToS3Storage(bytes.NewReader(fileBytes), header.Filename, contentType, cfg)
if err != nil {

fmt.Println(fmt.Errorf("ERROR uploading: %v", err))
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": "failed_to_upload_file"})
return
}

// strip file name from the bucket url and we will only need that here
filePathSlices := strings.Split(fileURL, "/")

bucketFileName := filePathSlices[len(filePathSlices)-1]

SendJSONResponse(http.StatusOK, w, map[string]string{"status": "success", "message": "file_uploaded", "file": bucketFileName})
}

func CreateJWT(authService *services.AuthService, w http.ResponseWriter, r *http.Request) {
type Request struct {
Username string `json:"username"`
Expand Down
80 changes: 49 additions & 31 deletions handlers/docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (

func GetDocumentations(service *services.DocService, w http.ResponseWriter, r *http.Request) {
docs, err := service.GetDocumentations()

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{
"status": "error",
Expand All @@ -33,13 +32,11 @@ func GetDocumentation(service *services.DocService, w http.ResponseWriter, r *ht
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}

doc, err := service.GetDocumentation(req.ID)

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{
"status": "error",
Expand All @@ -51,16 +48,14 @@ func GetDocumentation(service *services.DocService, w http.ResponseWriter, r *ht
SendJSONResponse(http.StatusOK, w, doc)
}

func CreateDocumentation(services *services.ServiceRegistry, w http.ResponseWriter, r *http.Request) {
func CreateDocumentation(service *services.ServiceRegistry, w http.ResponseWriter, r *http.Request) {
token, err := GetTokenFromHeader(r)

if err != nil {
SendJSONResponse(http.StatusUnauthorized, w, map[string]string{"status": "error", "message": "invalid_token"})
return
}

user, err := services.AuthService.GetUserFromToken(token)

user, err := service.AuthService.GetUserFromToken(token)
if err != nil {
SendJSONResponse(http.StatusUnauthorized, w, map[string]string{"status": "error", "message": "invalid_token"})
return
Expand Down Expand Up @@ -89,10 +84,14 @@ func CreateDocumentation(services *services.ServiceRegistry, w http.ResponseWrit
GitUser string `json:"gitUser"`
GitPassword string `json:"gitPassword"`
GitEmail string `json:"gitEmail"`

BucketFavicon string `json:"bucketFavicon"`
BucketMetaImage string `json:"bucketMetaImage"`
BucketNavImage string `json:"bucketNavImage"`
BucketNavImageDark string `json:"bucketNavImageDark"`
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}
Expand Down Expand Up @@ -126,8 +125,12 @@ func CreateDocumentation(services *services.ServiceRegistry, w http.ResponseWrit
GitEmail: req.GitEmail,
}

err = services.DocService.CreateDocumentation(documentation, user)

err = service.DocService.CreateDocumentation(documentation, user, map[string]string{
"favicon": req.BucketFavicon,
"metaImage": req.BucketMetaImage,
"navImage": req.BucketNavImage,
"navImageDark": req.BucketNavImageDark,
})
if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand Down Expand Up @@ -161,10 +164,14 @@ func EditDocumentation(services *services.ServiceRegistry, w http.ResponseWriter
GitEmail string `json:"gitEmail"`
GitUser string `json:"gitUser"`
GitPassword string `json:"gitPassword"`

BucketFavicon string `json:"bucketFavicon"`
BucketMetaImage string `json:"bucketMetaImage"`
BucketNavImage string `json:"bucketNavImage"`
BucketNavImageDark string `json:"bucketNavImageDark"`
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}
Expand All @@ -181,11 +188,37 @@ func EditDocumentation(services *services.ServiceRegistry, w http.ResponseWriter
return
}

err = services.DocService.EditDocumentation(user, req.ID, req.Name, req.Description, req.Version, req.Favicon, req.MetaImage,
req.NavImage, req.NavImageDark, req.CustomCSS, req.FooterLabelLinks, req.MoreLabelLinks, req.CopyrightText,
req.URL, req.OrganizationName, req.ProjectName, req.BaseURL, req.LanderDetails, req.RequireAuth, req.GitRepo,
req.GitBranch, req.GitUser, req.GitPassword, req.GitEmail)

err = services.DocService.EditDocumentation(user,
req.ID,
req.Name,
req.Description,
req.Version,
req.Favicon,
req.MetaImage,
req.NavImage,
req.NavImageDark,
req.CustomCSS,
req.FooterLabelLinks,
req.MoreLabelLinks,
req.CopyrightText,
req.URL,
req.OrganizationName,
req.ProjectName,
req.BaseURL,
req.LanderDetails,
req.RequireAuth,
req.GitRepo,
req.GitBranch,
req.GitUser,
req.GitPassword,
req.GitEmail,
map[string]string{
"favicon": req.BucketFavicon,
"metaImage": req.BucketMetaImage,
"navImage": req.BucketNavImage,
"navImageDark": req.BucketNavImageDark,
},
)
if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand All @@ -200,13 +233,11 @@ func DeleteDocumentation(service *services.DocService, w http.ResponseWriter, r
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}

err = service.DeleteDocumentation(req.ID)

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand All @@ -222,13 +253,11 @@ func CreateDocumentationVersion(service *services.DocService, w http.ResponseWri
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}

err = service.CreateDocumentationVersion(req.OriginalDocID, req.NewVersion)

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand All @@ -239,7 +268,6 @@ func CreateDocumentationVersion(service *services.DocService, w http.ResponseWri

func GetPages(service *services.DocService, w http.ResponseWriter, r *http.Request) {
pages, err := service.GetPages()

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand All @@ -254,13 +282,11 @@ func GetPage(service *services.DocService, w http.ResponseWriter, r *http.Reques
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}

page, err := service.GetPage(req.ID)

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand All @@ -280,20 +306,17 @@ func CreatePage(services *services.ServiceRegistry, w http.ResponseWriter, r *ht
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}

token, err := GetTokenFromHeader(r)

if err != nil {
SendJSONResponse(http.StatusUnauthorized, w, map[string]string{"status": "error", "message": "invalid_request"})
return
}

user, err := services.AuthService.GetUserFromToken(token)

if err != nil {
SendJSONResponse(http.StatusUnauthorized, w, map[string]string{"status": "error", "message": "invalid_request"})
return
Expand All @@ -319,7 +342,6 @@ func CreatePage(services *services.ServiceRegistry, w http.ResponseWriter, r *ht
}

err = services.DocService.CreatePage(&page)

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand Down Expand Up @@ -434,20 +456,17 @@ func CreatePageGroup(services *services.ServiceRegistry, w http.ResponseWriter,
}

req, err := ValidateRequest[Request](w, r)

if err != nil {
return
}

token, err := GetTokenFromHeader(r)

if err != nil {
SendJSONResponse(http.StatusUnauthorized, w, map[string]string{"status": "error", "message": "invalid_request"})
return
}

user, err := services.AuthService.GetUserFromToken(token)

if err != nil {
SendJSONResponse(http.StatusUnauthorized, w, map[string]string{"status": "error", "message": "invalid_request"})
return
Expand All @@ -471,7 +490,6 @@ func CreatePageGroup(services *services.ServiceRegistry, w http.ResponseWriter,
}

_, err = services.DocService.CreatePageGroup(&pageGroup)

if err != nil {
SendJSONResponse(http.StatusInternalServerError, w, map[string]string{"status": "error", "message": err.Error()})
return
Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ func main() {
authRouter.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) { handlers.GetUsers(aS, w, r) }).Methods("GET")
authRouter.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { handlers.GetUser(aS, w, r) }).Methods("POST")
authRouter.HandleFunc("/user/upload-file", func(w http.ResponseWriter, r *http.Request) { handlers.UploadFile(d, w, r, config.ParsedConfig) }).Methods("POST")
authRouter.HandleFunc("/user/assets/upload-file", func(w http.ResponseWriter, r *http.Request) { handlers.UploadAssetsFile(d, w, r, config.ParsedConfig) }).Methods("POST")

authRouter.HandleFunc("/jwt/create", func(w http.ResponseWriter, r *http.Request) { handlers.CreateJWT(aS, w, r) }).Methods("POST")
authRouter.HandleFunc("/jwt/refresh", func(w http.ResponseWriter, r *http.Request) { handlers.RefreshJWT(aS, w, r) }).Methods("POST")
Expand Down
Loading
Loading