Add client package
This commit is contained in:
28
api/http.go
28
api/http.go
@@ -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
20
api/json.go
Normal 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"`
|
||||
}
|
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user