diff --git a/auth/proxy.go b/auth/proxy.go index d6194e8f..0e954309 100644 --- a/auth/proxy.go +++ b/auth/proxy.go @@ -22,42 +22,43 @@ type ProxyAuth struct { func (a ProxyAuth) Auth(r *http.Request, usr users.Store, setting *settings.Settings, srv *settings.Server) (*users.User, error) { username := r.Header.Get(a.Header) user, err := usr.Get(srv.Root, username) + if errors.Is(err, fbErrors.ErrNotExist) { + return a.createUser(usr, setting, srv, username) + } + return user, err +} + +func (a ProxyAuth) createUser(usr users.Store, setting *settings.Settings, srv *settings.Server, username string) (*users.User, error) { + const passwordSize = 32 + randomPasswordBytes := make([]byte, passwordSize) + _, err := rand.Read(randomPasswordBytes) if err != nil { - // Return the error unless it is a user does not exist error - if !errors.Is(err, fbErrors.ErrNotExist) { - return nil, err - } + return nil, err + } - randomPasswordBytes := make([]byte, 32) //nolint:gomnd - _, err = rand.Read(randomPasswordBytes) - if err != nil { - return nil, err - } + var hashedRandomPassword string + hashedRandomPassword, err = users.HashPwd(string(randomPasswordBytes)) + if err != nil { + return nil, err + } - var hashedRandomPassword string - hashedRandomPassword, err = users.HashPwd(string(randomPasswordBytes)) - if err != nil { - return nil, err - } + user := &users.User{ + Username: username, + Password: hashedRandomPassword, + LockPassword: true, + } + setting.Defaults.Apply(user) - user = &users.User{ - Username: username, - Password: hashedRandomPassword, - LockPassword: true, - } - setting.Defaults.Apply(user) + var userHome string + userHome, err = setting.MakeUserDir(user.Username, user.Scope, srv.Root) + if err != nil { + return nil, err + } + user.Scope = userHome - var userHome string - userHome, err = setting.MakeUserDir(user.Username, user.Scope, srv.Root) - if err != nil { - return nil, err - } - user.Scope = userHome - - err = usr.Save(user) - if err != nil { - return nil, err - } + err = usr.Save(user) + if err != nil { + return nil, err } return user, nil