feat(authtication): #3580 Rename all usernames to lowercase (#4603)

* feat(authtication): Rename all usernames to lowercase

* feat(authentication): Remove database migration (#3580)

* feat(authentication): Make UserByUsername compare usernames case-insensitively (#3580)

* feat(authentication): validate new username case-insensitively (#3580)

Co-authored-by: Simon Meng <simon.meng@portainer.io>
pull/4841/head
cong meng 4 years ago committed by GitHub
parent 46dec01fe3
commit 24b1894a84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -4,6 +4,7 @@ import (
"github.com/portainer/portainer/api" "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/bolt/errors" "github.com/portainer/portainer/api/bolt/errors"
"github.com/portainer/portainer/api/bolt/internal" "github.com/portainer/portainer/api/bolt/internal"
"strings"
"github.com/boltdb/bolt" "github.com/boltdb/bolt"
) )
@ -47,6 +48,8 @@ func (service *Service) User(ID portainer.UserID) (*portainer.User, error) {
func (service *Service) UserByUsername(username string) (*portainer.User, error) { func (service *Service) UserByUsername(username string) (*portainer.User, error) {
var user *portainer.User var user *portainer.User
username = strings.ToLower(username)
err := service.db.View(func(tx *bolt.Tx) error { err := service.db.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(BucketName)) bucket := tx.Bucket([]byte(BucketName))
cursor := bucket.Cursor() cursor := bucket.Cursor()
@ -58,7 +61,7 @@ func (service *Service) UserByUsername(username string) (*portainer.User, error)
return err return err
} }
if u.Username == username { if strings.ToLower(u.Username) == username {
user = &u user = &u
break break
} }
@ -123,6 +126,7 @@ func (service *Service) UsersByRole(role portainer.UserRole) ([]portainer.User,
// UpdateUser saves a user. // UpdateUser saves a user.
func (service *Service) UpdateUser(ID portainer.UserID, user *portainer.User) error { func (service *Service) UpdateUser(ID portainer.UserID, user *portainer.User) error {
identifier := internal.Itob(int(ID)) identifier := internal.Itob(int(ID))
user.Username = strings.ToLower(user.Username)
return internal.UpdateObject(service.db, BucketName, identifier, user) return internal.UpdateObject(service.db, BucketName, identifier, user)
} }
@ -133,6 +137,7 @@ func (service *Service) CreateUser(user *portainer.User) error {
id, _ := bucket.NextSequence() id, _ := bucket.NextSequence()
user.ID = portainer.UserID(id) user.ID = portainer.UserID(id)
user.Username = strings.ToLower(user.Username)
data, err := internal.MarshalObject(user) data, err := internal.MarshalObject(user)
if err != nil { if err != nil {

@ -29,7 +29,7 @@ angular.module('portainer.app').controller('UsersController', [
$scope.checkUsernameValidity = function () { $scope.checkUsernameValidity = function () {
var valid = true; var valid = true;
for (var i = 0; i < $scope.users.length; i++) { for (var i = 0; i < $scope.users.length; i++) {
if ($scope.formValues.Username === $scope.users[i].Username) { if ($scope.formValues.Username.toLocaleLowerCase() === $scope.users[i].Username.toLocaleLowerCase()) {
valid = false; valid = false;
break; break;
} }

Loading…
Cancel
Save