Add user name/email to GraphQL API

This commit is contained in:
Lou Knauer
2022-03-15 11:04:54 +01:00
parent f31efc03ff
commit f5f1869b5a
7 changed files with 417 additions and 51 deletions

View File

@@ -14,6 +14,7 @@ import (
"strings"
"time"
"github.com/ClusterCockpit/cc-backend/graph/model"
"github.com/ClusterCockpit/cc-backend/log"
sq "github.com/Masterminds/squirrel"
"github.com/golang-jwt/jwt/v4"
@@ -233,6 +234,24 @@ func (auth *Authentication) FetchUser(username string) (*User, error) {
return user, nil
}
func FetchUser(ctx context.Context, db *sqlx.DB, username string) (*model.User, error) {
me := GetUser(ctx)
if me != nil && !me.HasRole(RoleAdmin) && me.Username != username {
return nil, errors.New("forbidden")
}
user := &model.User{Username: username}
if err := sq.Select("name", "email").From("user").Where("user.username = ?", username).
RunWith(db).QueryRow().Scan(&user.Name, &user.Email); err != nil {
if err == sql.ErrNoRows {
return nil, nil
}
return nil, err
}
return user, nil
}
// Handle a POST request that should log the user in, starting a new session.
func (auth *Authentication) Login(onsuccess http.Handler, onfailure func(rw http.ResponseWriter, r *http.Request, loginErr error)) http.Handler {
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {