2021-03-03 12:58:06 +00:00
|
|
|
package admin
|
|
|
|
|
|
|
|
import (
|
2021-03-04 10:12:37 +00:00
|
|
|
"fmt"
|
2021-03-03 12:58:06 +00:00
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"go.mindeco.de/http/render"
|
|
|
|
|
|
|
|
"github.com/gorilla/csrf"
|
|
|
|
"github.com/ssb-ngi-pointer/go-ssb-room/admindb"
|
2021-03-04 10:12:37 +00:00
|
|
|
"github.com/ssb-ngi-pointer/go-ssb-room/web/user"
|
2021-03-03 12:58:06 +00:00
|
|
|
)
|
|
|
|
|
2021-03-04 11:26:49 +00:00
|
|
|
type invitesHandler struct {
|
2021-03-03 12:58:06 +00:00
|
|
|
r *render.Renderer
|
|
|
|
|
|
|
|
db admindb.InviteService
|
|
|
|
}
|
|
|
|
|
2021-03-04 11:26:49 +00:00
|
|
|
func (h invitesHandler) overview(rw http.ResponseWriter, req *http.Request) (interface{}, error) {
|
2021-03-03 12:58:06 +00:00
|
|
|
lst, err := h.db.List(req.Context())
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Reverse the slice to provide recent-to-oldest results
|
|
|
|
for i, j := 0, len(lst)-1; i < j; i, j = i+1, j-1 {
|
|
|
|
lst[i], lst[j] = lst[j], lst[i]
|
|
|
|
}
|
|
|
|
|
2021-03-04 09:32:39 +00:00
|
|
|
pageData, err := paginate(lst, len(lst), req.URL.Query())
|
2021-03-03 12:58:06 +00:00
|
|
|
if err != nil {
|
2021-03-04 09:32:39 +00:00
|
|
|
return nil, err
|
2021-03-03 12:58:06 +00:00
|
|
|
}
|
|
|
|
|
2021-03-04 09:32:39 +00:00
|
|
|
pageData[csrf.TemplateTag] = csrf.TemplateField(req)
|
2021-03-03 12:58:06 +00:00
|
|
|
|
2021-03-04 09:32:39 +00:00
|
|
|
return pageData, nil
|
2021-03-03 12:58:06 +00:00
|
|
|
}
|
2021-03-04 10:12:37 +00:00
|
|
|
|
2021-03-04 11:26:49 +00:00
|
|
|
func (h invitesHandler) create(w http.ResponseWriter, req *http.Request) {
|
2021-03-04 10:12:37 +00:00
|
|
|
if req.Method != "POST" {
|
|
|
|
// TODO: proper error type
|
|
|
|
h.r.Error(w, req, http.StatusBadRequest, fmt.Errorf("bad request"))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err := req.ParseForm(); err != nil {
|
|
|
|
// TODO: proper error type
|
|
|
|
h.r.Error(w, req, http.StatusBadRequest, fmt.Errorf("bad request: %w", err))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-03-04 10:14:59 +00:00
|
|
|
user := user.FromContext(req.Context())
|
|
|
|
if user == nil {
|
|
|
|
err := fmt.Errorf("warning: no user session for elevated access request")
|
|
|
|
h.r.Error(w, req, http.StatusInternalServerError, err)
|
|
|
|
return
|
|
|
|
}
|
2021-03-04 10:12:37 +00:00
|
|
|
|
|
|
|
aliasSuggestion := req.Form.Get("alias_suggestion")
|
|
|
|
|
|
|
|
token, err := h.db.Create(req.Context(), user.ID, aliasSuggestion)
|
|
|
|
if err != nil {
|
|
|
|
h.r.Error(w, req, http.StatusInternalServerError, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Println("use me:", token)
|
|
|
|
|
|
|
|
http.Redirect(w, req, "/admin/invites", http.StatusFound)
|
|
|
|
}
|