forked from mirrors/homebox
inject defaults + cleanup
This commit is contained in:
parent
9b46ea7874
commit
5f589f95b8
8 changed files with 212 additions and 85 deletions
|
@ -87,8 +87,21 @@ func mwStripTrailingSlash(next http.Handler) http.Handler {
|
|||
})
|
||||
}
|
||||
|
||||
type StatusRecorder struct {
|
||||
http.ResponseWriter
|
||||
Status int
|
||||
}
|
||||
|
||||
func (r *StatusRecorder) WriteHeader(status int) {
|
||||
r.Status = status
|
||||
r.ResponseWriter.WriteHeader(status)
|
||||
}
|
||||
|
||||
func (a *app) mwStructLogger(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
record := &StatusRecorder{ResponseWriter: w, Status: http.StatusOK}
|
||||
next.ServeHTTP(record, r)
|
||||
|
||||
scheme := "http"
|
||||
if r.TLS != nil {
|
||||
scheme = "https"
|
||||
|
@ -101,25 +114,35 @@ func (a *app) mwStructLogger(next http.Handler) http.Handler {
|
|||
Str("url", url).
|
||||
Str("method", r.Method).
|
||||
Str("remote_addr", r.RemoteAddr).
|
||||
Msgf("[%s] %s", r.Method, url)
|
||||
next.ServeHTTP(w, r)
|
||||
Int("status", record.Status).
|
||||
Msg(url)
|
||||
})
|
||||
}
|
||||
|
||||
func (a *app) mwSummaryLogger(next http.Handler) http.Handler {
|
||||
bold := func(s string) string {
|
||||
return "\033[1m" + s + "\033[0m"
|
||||
}
|
||||
bold := func(s string) string { return "\033[1m" + s + "\033[0m" }
|
||||
orange := func(s string) string { return "\033[33m" + s + "\033[0m" }
|
||||
aqua := func(s string) string { return "\033[36m" + s + "\033[0m" }
|
||||
red := func(s string) string { return "\033[31m" + s + "\033[0m" }
|
||||
green := func(s string) string { return "\033[32m" + s + "\033[0m" }
|
||||
|
||||
pink := func(s string) string {
|
||||
return "\033[35m" + s + "\033[0m"
|
||||
}
|
||||
|
||||
aqua := func(s string) string {
|
||||
return "\033[36m" + s + "\033[0m"
|
||||
fmtCode := func(code int) string {
|
||||
switch {
|
||||
case code >= 500:
|
||||
return red(fmt.Sprintf("%d", code))
|
||||
case code >= 400:
|
||||
return orange(fmt.Sprintf("%d", code))
|
||||
case code >= 300:
|
||||
return aqua(fmt.Sprintf("%d", code))
|
||||
default:
|
||||
return green(fmt.Sprintf("%d", code))
|
||||
}
|
||||
}
|
||||
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
record := &StatusRecorder{ResponseWriter: w, Status: http.StatusOK}
|
||||
next.ServeHTTP(record, r) // Blocks until the next handler returns.
|
||||
|
||||
scheme := "http"
|
||||
if r.TLS != nil {
|
||||
scheme = "https"
|
||||
|
@ -127,7 +150,11 @@ func (a *app) mwSummaryLogger(next http.Handler) http.Handler {
|
|||
|
||||
url := fmt.Sprintf("%s://%s%s %s", scheme, r.Host, r.RequestURI, r.Proto)
|
||||
|
||||
log.Info().Msgf("%s %s", bold(pink("["+r.Method+"]")), aqua(url))
|
||||
next.ServeHTTP(w, r)
|
||||
log.Info().
|
||||
Msgf("%s %s %s",
|
||||
bold(orange(""+r.Method+"")),
|
||||
aqua(url),
|
||||
bold(fmtCode(record.Status)),
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@ type UserService struct {
|
|||
repos *repo.AllRepos
|
||||
}
|
||||
|
||||
// RegisterUser creates a new user and group in the data with the provided data. It also bootstraps the user's group
|
||||
// with default Labels and Locations.
|
||||
func (svc *UserService) RegisterUser(ctx context.Context, data types.UserRegistration) (*types.UserOut, error) {
|
||||
group, err := svc.repos.Groups.Create(ctx, data.GroupName)
|
||||
if err != nil {
|
||||
|
@ -38,7 +40,26 @@ func (svc *UserService) RegisterUser(ctx context.Context, data types.UserRegistr
|
|||
GroupID: group.ID,
|
||||
}
|
||||
|
||||
return mappers.ToOutUser(svc.repos.Users.Create(ctx, usrCreate))
|
||||
usr, err := svc.repos.Users.Create(ctx, usrCreate)
|
||||
if err != nil {
|
||||
return &types.UserOut{}, err
|
||||
}
|
||||
|
||||
for _, label := range defaultLabels() {
|
||||
_, err := svc.repos.Labels.Create(ctx, group.ID, label)
|
||||
if err != nil {
|
||||
return &types.UserOut{}, err
|
||||
}
|
||||
}
|
||||
|
||||
for _, location := range defaultLocations() {
|
||||
_, err := svc.repos.Locations.Create(ctx, group.ID, location)
|
||||
if err != nil {
|
||||
return &types.UserOut{}, err
|
||||
}
|
||||
}
|
||||
|
||||
return mappers.ToOutUser(usr, nil)
|
||||
}
|
||||
|
||||
// GetSelf returns the user that is currently logged in based of the token provided within
|
||||
|
|
55
backend/internal/services/service_user_defaults.go
Normal file
55
backend/internal/services/service_user_defaults.go
Normal file
|
@ -0,0 +1,55 @@
|
|||
package services
|
||||
|
||||
import "github.com/hay-kot/content/backend/internal/types"
|
||||
|
||||
func defaultLocations() []types.LocationCreate {
|
||||
return []types.LocationCreate{
|
||||
{
|
||||
Name: "Living Room",
|
||||
},
|
||||
{
|
||||
Name: "Garage",
|
||||
},
|
||||
{
|
||||
Name: "Kitchen",
|
||||
},
|
||||
{
|
||||
Name: "Bedroom",
|
||||
},
|
||||
{
|
||||
Name: "Bathroom",
|
||||
},
|
||||
{
|
||||
Name: "Office",
|
||||
},
|
||||
{
|
||||
Name: "Attic",
|
||||
},
|
||||
{
|
||||
Name: "Basement",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func defaultLabels() []types.LabelCreate {
|
||||
return []types.LabelCreate{
|
||||
{
|
||||
Name: "Appliances",
|
||||
},
|
||||
{
|
||||
Name: "IOT",
|
||||
},
|
||||
{
|
||||
Name: "Electronics",
|
||||
},
|
||||
{
|
||||
Name: "Servers",
|
||||
},
|
||||
{
|
||||
Name: "General",
|
||||
},
|
||||
{
|
||||
Name: "Important",
|
||||
},
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue