diff options
author | ᴜɴᴋɴᴡᴏɴ <u@gogs.io> | 2020-09-20 11:19:02 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-20 11:19:02 +0800 |
commit | 3af91d7cfdb334e602d312743a89e64cd2d369ee (patch) | |
tree | c04a148917cdd9be878ca0e5fbcd552825c18df7 /internal/auth/pam/provider.go | |
parent | b836a56e6e823eecbce2dd99121a340418f1d5b7 (diff) |
auth: decouple types and functions from db (#6320)
Diffstat (limited to 'internal/auth/pam/provider.go')
-rw-r--r-- | internal/auth/pam/provider.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/internal/auth/pam/provider.go b/internal/auth/pam/provider.go new file mode 100644 index 00000000..ad1b7a8c --- /dev/null +++ b/internal/auth/pam/provider.go @@ -0,0 +1,54 @@ +// Copyright 2020 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package pam + +import ( + "strings" + + "gogs.io/gogs/internal/auth" +) + +// Provider contains configuration of a PAM authentication provider. +type Provider struct { + config *Config +} + +// NewProvider creates a new PAM authentication provider. +func NewProvider(cfg *Config) auth.Provider { + return &Provider{ + config: cfg, + } +} + +func (p *Provider) Authenticate(login, password string) (*auth.ExternalAccount, error) { + err := p.config.doAuth(login, password) + if err != nil { + if strings.Contains(err.Error(), "Authentication failure") { + return nil, auth.ErrBadCredentials{Args: map[string]interface{}{"login": login}} + } + return nil, err + } + + return &auth.ExternalAccount{ + Login: login, + Name: login, + }, nil +} + +func (p *Provider) Config() interface{} { + return p.config +} + +func (p *Provider) HasTLS() bool { + return false +} + +func (p *Provider) UseTLS() bool { + return false +} + +func (p *Provider) SkipTLSVerify() bool { + return false +} |