aboutsummaryrefslogtreecommitdiff
path: root/internal/auth/pam/provider.go
diff options
context:
space:
mode:
authorᴜɴᴋɴᴡᴏɴ <u@gogs.io>2020-09-20 11:19:02 +0800
committerGitHub <noreply@github.com>2020-09-20 11:19:02 +0800
commit3af91d7cfdb334e602d312743a89e64cd2d369ee (patch)
treec04a148917cdd9be878ca0e5fbcd552825c18df7 /internal/auth/pam/provider.go
parentb836a56e6e823eecbce2dd99121a340418f1d5b7 (diff)
auth: decouple types and functions from db (#6320)
Diffstat (limited to 'internal/auth/pam/provider.go')
-rw-r--r--internal/auth/pam/provider.go54
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
+}