Add client package
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline failed

This commit is contained in:
2022-01-20 17:50:56 +01:00
parent 99bddcd03f
commit a4bf701ac3
6 changed files with 364 additions and 33 deletions

View File

@@ -119,13 +119,8 @@ func (s *HTTPServer) HandlerAPIFileGet(w http.ResponseWriter, r *http.Request) {
func (s *HTTPServer) processMultiPartFormUpload(w http.ResponseWriter, r *http.Request) {
reqID := middleware.GetReqID(r.Context())
type resp struct {
Message string `json:"message"`
ID string `json:"id"`
URL string `json:"url"`
}
var responses []resp
var responses []ResponseAPIFilePost
if err := r.ParseMultipartForm(1024 * 1024 * 10); err != nil {
s.Logger.Warnw("Error parsing multipart form.", "req_id", reqID, "err", err)
@@ -149,7 +144,7 @@ func (s *HTTPServer) processMultiPartFormUpload(w http.ResponseWriter, r *http.R
}
s.Logger.Infow("Stored file.", "req_id", reqID, "id", f.ID, "filename", f.OriginalFilename, "remote_addr", r.RemoteAddr)
responses = append(responses, resp{Message: "OK", ID: f.ID, URL: "TODO"})
responses = append(responses, ResponseAPIFilePost{Message: "OK", ID: f.ID, URL: "TODO"})
}
@@ -162,10 +157,7 @@ func (s *HTTPServer) processMultiPartFormUpload(w http.ResponseWriter, r *http.R
func (s *HTTPServer) HandlerAPILogin(w http.ResponseWriter, r *http.Request) {
reqID := middleware.GetReqID(r.Context())
expectedRequest := struct {
Username string `json:"username"`
Password string `json:"password"`
}{}
var expectedRequest RequestAPILogin
decoder := json.NewDecoder(r.Body)
defer r.Body.Close()
if err := decoder.Decode(&expectedRequest); err != nil {
@@ -179,9 +171,7 @@ func (s *HTTPServer) HandlerAPILogin(w http.ResponseWriter, r *http.Request) {
return
}
response := struct {
Token string `json:"token"`
}{
response := ResponseAPILogin{
Token: token,
}
@@ -193,17 +183,12 @@ func (s *HTTPServer) HandlerAPILogin(w http.ResponseWriter, r *http.Request) {
}
}
type RequestAPIUserCreate struct {
Username string `json:"username"`
Password string `json:"password"`
}
func (s *HTTPServer) HandlerAPIUserCreate(w http.ResponseWriter, r *http.Request) {
reqID := middleware.GetReqID(r.Context())
defer r.Body.Close()
level, err := AuthLevelFromRequest(r)
if err != nil || level < gpaste.AuthLevelAdmin {
role, err := RoleFromRequest(r)
if err != nil || role != users.RoleAdmin {
w.WriteHeader(http.StatusUnauthorized)
return
}
@@ -229,5 +214,6 @@ func (s *HTTPServer) HandlerAPIUserCreate(w http.ResponseWriter, r *http.Request
w.WriteHeader(http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusAccepted)
s.Logger.Infow("Created user.", "req_id", reqID, "remote_addr", r.RemoteAddr, "username", req.Username)
}

20
api/json.go Normal file
View File

@@ -0,0 +1,20 @@
package api
type RequestAPIUserCreate struct {
Username string `json:"username"`
Password string `json:"password"`
}
type RequestAPILogin struct {
Username string `json:"username"`
Password string `json:"password"`
}
type ResponseAPILogin struct {
Token string `json:"token"`
}
type ResponseAPIFilePost struct {
Message string `json:"message"`
ID string `json:"id"`
URL string `json:"url"`
}

View File

@@ -8,6 +8,7 @@ import (
"time"
"git.t-juice.club/torjus/gpaste"
"git.t-juice.club/torjus/gpaste/users"
"github.com/go-chi/chi/v5/middleware"
)
@@ -90,14 +91,14 @@ func UsernameFromRequest(r *http.Request) (string, error) {
return username, nil
}
func AuthLevelFromRequest(r *http.Request) (gpaste.AuthLevel, error) {
func RoleFromRequest(r *http.Request) (users.Role, error) {
rawLevel := r.Context().Value(authCtxAuthLevel)
if rawLevel == nil {
return gpaste.AuthLevelUnset, fmt.Errorf("no username")
return users.RoleUnset, fmt.Errorf("no username")
}
level, ok := rawLevel.(gpaste.AuthLevel)
level, ok := rawLevel.(users.Role)
if !ok {
return gpaste.AuthLevelUnset, fmt.Errorf("no username")
return users.RoleUnset, fmt.Errorf("no username")
}
return level, nil
}