98 lines
2.9 KiB
Go
98 lines
2.9 KiB
Go
package keys
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
|
|
"git.hatecomputers.club/hatecomputers/hatecomputers.club/api/types"
|
|
"git.hatecomputers.club/hatecomputers/hatecomputers.club/database"
|
|
"git.hatecomputers.club/hatecomputers/hatecomputers.club/utils"
|
|
)
|
|
|
|
const MAX_USER_API_KEYS = 5
|
|
|
|
func ListAPIKeysContinuation(context *types.RequestContext, req *http.Request, resp http.ResponseWriter) types.ContinuationChain {
|
|
return func(success types.Continuation, failure types.Continuation) types.ContinuationChain {
|
|
typesKeys, err := database.ListUserAPIKeys(context.DBConn, context.User.ID)
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp.WriteHeader(http.StatusInternalServerError)
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
(*context.TemplateData)["APIKeys"] = typesKeys
|
|
return success(context, req, resp)
|
|
}
|
|
}
|
|
|
|
func CreateAPIKeyContinuation(context *types.RequestContext, req *http.Request, resp http.ResponseWriter) types.ContinuationChain {
|
|
return func(success types.Continuation, failure types.Continuation) types.ContinuationChain {
|
|
formErrors := types.BannerMessages{
|
|
Messages: []string{},
|
|
}
|
|
|
|
numKeys, err := database.CountUserAPIKeys(context.DBConn, context.User.ID)
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp.WriteHeader(http.StatusInternalServerError)
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
if numKeys >= MAX_USER_API_KEYS {
|
|
formErrors.Messages = append(formErrors.Messages, "max types keys reached")
|
|
}
|
|
|
|
if len(formErrors.Messages) > 0 {
|
|
(*context.TemplateData)["Error"] = formErrors
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
_, err = database.SaveAPIKey(context.DBConn, &database.UserApiKey{
|
|
UserID: context.User.ID,
|
|
Key: utils.RandomId(),
|
|
})
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp.WriteHeader(http.StatusInternalServerError)
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
formSuccess := types.BannerMessages{
|
|
Messages: []string{"key created."},
|
|
}
|
|
(*context.TemplateData)["Success"] = formSuccess
|
|
return success(context, req, resp)
|
|
}
|
|
}
|
|
|
|
func DeleteAPIKeyContinuation(context *types.RequestContext, req *http.Request, resp http.ResponseWriter) types.ContinuationChain {
|
|
return func(success types.Continuation, failure types.Continuation) types.ContinuationChain {
|
|
apiKey := req.FormValue("key")
|
|
|
|
key, err := database.GetAPIKey(context.DBConn, apiKey)
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp.WriteHeader(http.StatusInternalServerError)
|
|
return failure(context, req, resp)
|
|
}
|
|
if (key == nil) || (key.UserID != context.User.ID) {
|
|
resp.WriteHeader(http.StatusUnauthorized)
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
err = database.DeleteAPIKey(context.DBConn, apiKey)
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp.WriteHeader(http.StatusInternalServerError)
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
formSuccess := types.BannerMessages{
|
|
Messages: []string{"key deleted."},
|
|
}
|
|
(*context.TemplateData)["Success"] = formSuccess
|
|
|
|
return success(context, req, resp)
|
|
}
|
|
}
|