84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
|
package resolvers
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/viktorstrate/photoview/api/graphql/auth"
|
||
|
"github.com/viktorstrate/photoview/api/graphql/models"
|
||
|
)
|
||
|
|
||
|
// func (r *Resolver) User() UserResolver {
|
||
|
// return &userResolver{r}
|
||
|
// }
|
||
|
|
||
|
// type userResolver struct{ *Resolver }
|
||
|
|
||
|
func (r *queryResolver) Users(ctx context.Context) ([]*models.User, error) {
|
||
|
|
||
|
rows, err := r.Database.Query("SELECT * FROM users")
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
|
||
|
users, err := models.NewUsersFromRows(rows)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return users, nil
|
||
|
}
|
||
|
|
||
|
func (r *queryResolver) MyUser(ctx context.Context) (*models.User, error) {
|
||
|
|
||
|
user := auth.UserFromContext(ctx)
|
||
|
if user == nil {
|
||
|
return nil, auth.ErrUnauthorized
|
||
|
}
|
||
|
|
||
|
return user, nil
|
||
|
}
|
||
|
|
||
|
func (r *mutationResolver) AuthorizeUser(ctx context.Context, username string, password string) (*models.AuthorizeResult, error) {
|
||
|
user, err := models.AuthorizeUser(r.Database, username, password)
|
||
|
if err != nil {
|
||
|
return &models.AuthorizeResult{
|
||
|
Success: false,
|
||
|
Status: err.Error(),
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
var token *models.AccessToken
|
||
|
|
||
|
token, err = user.GenerateAccessToken(r.Database)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &models.AuthorizeResult{
|
||
|
Success: true,
|
||
|
Status: "ok",
|
||
|
Token: &token.Value,
|
||
|
}, nil
|
||
|
}
|
||
|
func (r *mutationResolver) RegisterUser(ctx context.Context, username string, password string, rootPath string) (*models.AuthorizeResult, error) {
|
||
|
user, err := models.RegisterUser(r.Database, username, password, rootPath)
|
||
|
if err != nil {
|
||
|
return &models.AuthorizeResult{
|
||
|
Success: false,
|
||
|
Status: err.Error(),
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
token, err := user.GenerateAccessToken(r.Database)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &models.AuthorizeResult{
|
||
|
Success: true,
|
||
|
Status: "ok",
|
||
|
Token: &token.Value,
|
||
|
}, nil
|
||
|
}
|