diff --git a/database/user.go b/database/user.go index ca83f2e..f485441 100644 --- a/database/user.go +++ b/database/user.go @@ -93,7 +93,7 @@ func (db *Database) UserCreate(ctx context.Context, newUser *model.UserForm) (*m var doc model.User newctx := driver.WithReturnNew(ctx, &doc) - meta, err := db.userCollection.CreateDocument(ctx, newctx, strcase.ToKebab(newUser.ID), toUser(newUser, sha256Hash)) + meta, err := db.userCollection.CreateDocument(ctx, newctx, newUser.ID, toUser(newUser, sha256Hash)) if err != nil { return nil, err } diff --git a/dev/authelia/users_database.yml b/dev/authelia/users_database.yml index 9259941..2e16b9d 100644 --- a/dev/authelia/users_database.yml +++ b/dev/authelia/users_database.yml @@ -1,13 +1,13 @@ users: - alice: + alice@example.com: displayname: Alice password: "$argon2id$v=19$m=65536,t=3,p=4$S3hTSS90U1QycjNEWURZTw$aJP1fI/byC/3A7NCz5lyrXR7NS+l+1YMnqj5qFopZRk" email: alice@example.com - bob: + bob@example.com: displayname: "Bob" password: "$argon2id$v=19$m=65536,t=3,p=4$amxRcURFVUk4TlhPOXFmWg$sPRsvGg9rrqefRp0fFA7wQG3O8OcMnQhj4IckHYPEz8" email: bob@example.com - admin: + admin@example.com: displayname: "Admin" password: "$argon2id$v=19$m=65536,t=3,p=4$SFBXa1BXblNZKytoZ1ZLYQ$JruWROu9opYmcPNw1cIiHms4k4466DqrKIPvJe94nfA" email: admin@example.com \ No newline at end of file diff --git a/service/user.go b/service/user.go index 32d80c4..b117822 100644 --- a/service/user.go +++ b/service/user.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "net/url" "github.com/arangodb/go-driver" maut "github.com/jonas-plum/maut/auth" @@ -20,14 +21,6 @@ func newUserResponseID(user *model.NewUserResponse) []driver.DocumentID { return userID(user.ID) } -func userResponseID(user *model.UserResponse) []driver.DocumentID { - if user == nil { - return nil - } - - return userID(user.ID) -} - func userID(id string) []driver.DocumentID { return []driver.DocumentID{driver.DocumentID(fmt.Sprintf("%s/%s", database.UserCollectionName, id))} } @@ -42,20 +35,35 @@ func (s *Service) CreateUser(ctx context.Context, form *model.UserForm) (doc *mo return s.database.UserCreate(ctx, form) } -func (s *Service) GetUser(ctx context.Context, s2 string) (*model.UserResponse, error) { - return s.database.UserGet(ctx, s2) +func (s *Service) GetUser(ctx context.Context, id string) (*model.UserResponse, error) { + decodedValue, err := url.QueryUnescape(id) + if err == nil { + id = decodedValue + } + + return s.database.UserGet(ctx, id) } -func (s *Service) UpdateUser(ctx context.Context, s2 string, form *model.UserForm) (doc *model.UserResponse, err error) { - defer s.publishRequest(ctx, err, "UpdateUser", userID(s2)) +func (s *Service) UpdateUser(ctx context.Context, id string, form *model.UserForm) (doc *model.UserResponse, err error) { + decodedValue, err := url.QueryUnescape(id) + if err == nil { + id = decodedValue + } - return s.database.UserUpdate(ctx, s2, form) + defer s.publishRequest(ctx, err, "UpdateUser", userID(id)) + + return s.database.UserUpdate(ctx, id, form) } -func (s *Service) DeleteUser(ctx context.Context, s2 string) (err error) { - defer s.publishRequest(ctx, err, "DeleteUser", userID(s2)) +func (s *Service) DeleteUser(ctx context.Context, id string) (err error) { + decodedValue, err := url.QueryUnescape(id) + if err == nil { + id = decodedValue + } - return s.database.UserDelete(ctx, s2) + defer s.publishRequest(ctx, err, "DeleteUser", userID(id)) + + return s.database.UserDelete(ctx, id) } func (s *Service) CurrentUser(ctx context.Context) (*model.UserResponse, error) { diff --git a/service/userdata.go b/service/userdata.go index c4e2b8d..e8e62ee 100644 --- a/service/userdata.go +++ b/service/userdata.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "net/url" "github.com/arangodb/go-driver" maut "github.com/jonas-plum/maut/auth" @@ -29,10 +30,20 @@ func (s *Service) ListUserData(ctx context.Context) (doc []*model.UserDataRespon } func (s *Service) GetUserData(ctx context.Context, id string) (*model.UserDataResponse, error) { + decodedValue, err := url.QueryUnescape(id) + if err == nil { + id = decodedValue + } + return s.database.UserDataGet(ctx, id) } func (s *Service) UpdateUserData(ctx context.Context, id string, data *model.UserData) (doc *model.UserDataResponse, err error) { + decodedValue, err := url.QueryUnescape(id) + if err == nil { + id = decodedValue + } + defer s.publishRequest(ctx, err, "UpdateUserData", userDataResponseID(doc)) return s.database.UserDataUpdate(ctx, id, data) diff --git a/ui/cypress/support/e2e.js b/ui/cypress/support/e2e.js index 3e98811..1386450 100644 --- a/ui/cypress/support/e2e.js +++ b/ui/cypress/support/e2e.js @@ -26,7 +26,7 @@ Cypress.Commands.add('login', (options = {}) => { cy.get("#kc-login").click(); } else if (Cypress.env('AUTH') === 'authelia') { cy.contains("Login with OIDC").should('be.visible').click(); - cy.get("#username-textfield").should('be.visible').type("bob"); + cy.get("#username-textfield").should('be.visible').type("bob@example.com"); cy.get("#password-textfield").type("bob"); cy.get("#sign-in-button").click(); cy.get("#accept-button").should('be.visible').click();