Skip to content

Commit aee0be7

Browse files
author
Jonas Plum
authored
Allow @ in usernames (#742)
1 parent 188ca25 commit aee0be7

File tree

5 files changed

+40
-21
lines changed

5 files changed

+40
-21
lines changed

database/user.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (db *Database) UserCreate(ctx context.Context, newUser *model.UserForm) (*m
9393

9494
var doc model.User
9595
newctx := driver.WithReturnNew(ctx, &doc)
96-
meta, err := db.userCollection.CreateDocument(ctx, newctx, strcase.ToKebab(newUser.ID), toUser(newUser, sha256Hash))
96+
meta, err := db.userCollection.CreateDocument(ctx, newctx, newUser.ID, toUser(newUser, sha256Hash))
9797
if err != nil {
9898
return nil, err
9999
}

dev/authelia/users_database.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
users:
2-
alice:
2+
alice@example.com:
33
displayname: Alice
44
password: "$argon2id$v=19$m=65536,t=3,p=4$S3hTSS90U1QycjNEWURZTw$aJP1fI/byC/3A7NCz5lyrXR7NS+l+1YMnqj5qFopZRk"
55
email: alice@example.com
6-
bob:
6+
bob@example.com:
77
displayname: "Bob"
88
password: "$argon2id$v=19$m=65536,t=3,p=4$amxRcURFVUk4TlhPOXFmWg$sPRsvGg9rrqefRp0fFA7wQG3O8OcMnQhj4IckHYPEz8"
99
email: bob@example.com
10-
admin:
10+
admin@example.com:
1111
displayname: "Admin"
1212
password: "$argon2id$v=19$m=65536,t=3,p=4$SFBXa1BXblNZKytoZ1ZLYQ$JruWROu9opYmcPNw1cIiHms4k4466DqrKIPvJe94nfA"
1313
email: admin@example.com

service/user.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"net/url"
78

89
"github.com/arangodb/go-driver"
910
maut "github.com/jonas-plum/maut/auth"
@@ -20,14 +21,6 @@ func newUserResponseID(user *model.NewUserResponse) []driver.DocumentID {
2021
return userID(user.ID)
2122
}
2223

23-
func userResponseID(user *model.UserResponse) []driver.DocumentID {
24-
if user == nil {
25-
return nil
26-
}
27-
28-
return userID(user.ID)
29-
}
30-
3124
func userID(id string) []driver.DocumentID {
3225
return []driver.DocumentID{driver.DocumentID(fmt.Sprintf("%s/%s", database.UserCollectionName, id))}
3326
}
@@ -42,20 +35,35 @@ func (s *Service) CreateUser(ctx context.Context, form *model.UserForm) (doc *mo
4235
return s.database.UserCreate(ctx, form)
4336
}
4437

45-
func (s *Service) GetUser(ctx context.Context, s2 string) (*model.UserResponse, error) {
46-
return s.database.UserGet(ctx, s2)
38+
func (s *Service) GetUser(ctx context.Context, id string) (*model.UserResponse, error) {
39+
decodedValue, err := url.QueryUnescape(id)
40+
if err == nil {
41+
id = decodedValue
42+
}
43+
44+
return s.database.UserGet(ctx, id)
4745
}
4846

49-
func (s *Service) UpdateUser(ctx context.Context, s2 string, form *model.UserForm) (doc *model.UserResponse, err error) {
50-
defer s.publishRequest(ctx, err, "UpdateUser", userID(s2))
47+
func (s *Service) UpdateUser(ctx context.Context, id string, form *model.UserForm) (doc *model.UserResponse, err error) {
48+
decodedValue, err := url.QueryUnescape(id)
49+
if err == nil {
50+
id = decodedValue
51+
}
52+
53+
defer s.publishRequest(ctx, err, "UpdateUser", userID(id))
5154

52-
return s.database.UserUpdate(ctx, s2, form)
55+
return s.database.UserUpdate(ctx, id, form)
5356
}
5457

55-
func (s *Service) DeleteUser(ctx context.Context, s2 string) (err error) {
56-
defer s.publishRequest(ctx, err, "DeleteUser", userID(s2))
58+
func (s *Service) DeleteUser(ctx context.Context, id string) (err error) {
59+
decodedValue, err := url.QueryUnescape(id)
60+
if err == nil {
61+
id = decodedValue
62+
}
63+
64+
defer s.publishRequest(ctx, err, "DeleteUser", userID(id))
5765

58-
return s.database.UserDelete(ctx, s2)
66+
return s.database.UserDelete(ctx, id)
5967
}
6068

6169
func (s *Service) CurrentUser(ctx context.Context) (*model.UserResponse, error) {

service/userdata.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"net/url"
78

89
"github.com/arangodb/go-driver"
910
maut "github.com/jonas-plum/maut/auth"
@@ -29,10 +30,20 @@ func (s *Service) ListUserData(ctx context.Context) (doc []*model.UserDataRespon
2930
}
3031

3132
func (s *Service) GetUserData(ctx context.Context, id string) (*model.UserDataResponse, error) {
33+
decodedValue, err := url.QueryUnescape(id)
34+
if err == nil {
35+
id = decodedValue
36+
}
37+
3238
return s.database.UserDataGet(ctx, id)
3339
}
3440

3541
func (s *Service) UpdateUserData(ctx context.Context, id string, data *model.UserData) (doc *model.UserDataResponse, err error) {
42+
decodedValue, err := url.QueryUnescape(id)
43+
if err == nil {
44+
id = decodedValue
45+
}
46+
3647
defer s.publishRequest(ctx, err, "UpdateUserData", userDataResponseID(doc))
3748

3849
return s.database.UserDataUpdate(ctx, id, data)

ui/cypress/support/e2e.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Cypress.Commands.add('login', (options = {}) => {
2626
cy.get("#kc-login").click();
2727
} else if (Cypress.env('AUTH') === 'authelia') {
2828
cy.contains("Login with OIDC").should('be.visible').click();
29-
cy.get("#username-textfield").should('be.visible').type("bob");
29+
cy.get("#username-textfield").should('be.visible').type("bob@example.com");
3030
cy.get("#password-textfield").type("bob");
3131
cy.get("#sign-in-button").click();
3232
cy.get("#accept-button").should('be.visible').click();

0 commit comments

Comments
 (0)