2014-05-05 15:02:47 +05:30
// Copyright 2014 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.
2014-05-03 08:18:14 +05:30
package admin
import (
2019-11-23 05:03:31 +05:30
"errors"
2016-03-06 04:38:42 +05:30
"fmt"
2021-04-05 21:00:52 +05:30
"net/http"
2021-11-16 23:48:25 +05:30
"net/url"
2019-11-23 05:03:31 +05:30
"regexp"
2021-11-16 23:48:25 +05:30
"strconv"
2021-12-14 14:07:11 +05:30
"strings"
2016-03-06 04:38:42 +05:30
2022-01-02 18:42:35 +05:30
"code.gitea.io/gitea/models/auth"
2020-10-23 15:40:29 +05:30
"code.gitea.io/gitea/modules/auth/pam"
2016-11-10 21:54:48 +05:30
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
2019-11-23 05:03:31 +05:30
"code.gitea.io/gitea/modules/util"
2021-01-26 21:06:53 +05:30
"code.gitea.io/gitea/modules/web"
2021-09-24 17:02:56 +05:30
auth_service "code.gitea.io/gitea/services/auth"
2021-07-24 15:46:34 +05:30
"code.gitea.io/gitea/services/auth/source/ldap"
"code.gitea.io/gitea/services/auth/source/oauth2"
2022-01-02 18:42:35 +05:30
pam_service "code.gitea.io/gitea/services/auth/source/pam"
2021-07-24 15:46:34 +05:30
"code.gitea.io/gitea/services/auth/source/smtp"
"code.gitea.io/gitea/services/auth/source/sspi"
2021-04-07 01:14:05 +05:30
"code.gitea.io/gitea/services/forms"
2017-05-01 18:56:53 +05:30
2020-03-22 20:42:55 +05:30
"xorm.io/xorm/convert"
2014-05-03 08:18:14 +05:30
)
2014-06-22 22:44:03 +05:30
const (
2016-11-21 08:51:24 +05:30
tplAuths base . TplName = "admin/auth/list"
tplAuthNew base . TplName = "admin/auth/new"
tplAuthEdit base . TplName = "admin/auth/edit"
2014-06-22 22:44:03 +05:30
)
2019-11-23 05:03:31 +05:30
var (
separatorAntiPattern = regexp . MustCompile ( ` [^\w-\.] ` )
langCodePattern = regexp . MustCompile ( ` ^[a-z] { 2}-[A-Z] { 2}$ ` )
)
2016-11-21 08:51:24 +05:30
// Authentications show authentication config page
2016-03-11 22:26:52 +05:30
func Authentications ( ctx * context . Context ) {
2014-08-29 18:20:43 +05:30
ctx . Data [ "Title" ] = ctx . Tr ( "admin.authentication" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
var err error
2022-01-02 18:42:35 +05:30
ctx . Data [ "Sources" ] , err = auth . Sources ( )
2014-08-29 18:20:43 +05:30
if err != nil {
2022-01-02 18:42:35 +05:30
ctx . ServerError ( "auth.Sources" , err )
2014-08-29 18:20:43 +05:30
return
}
2015-09-11 01:15:03 +05:30
2022-01-02 18:42:35 +05:30
ctx . Data [ "Total" ] = auth . CountSources ( )
2021-04-05 21:00:52 +05:30
ctx . HTML ( http . StatusOK , tplAuths )
2014-08-29 18:20:43 +05:30
}
2016-07-08 04:55:09 +05:30
type dropdownItem struct {
2015-09-11 02:41:41 +05:30
Name string
2016-07-08 04:55:09 +05:30
Type interface { }
2015-09-11 02:41:41 +05:30
}
2016-07-08 04:55:09 +05:30
var (
2020-10-23 15:40:29 +05:30
authSources = func ( ) [ ] dropdownItem {
items := [ ] dropdownItem {
2022-01-02 18:42:35 +05:30
{ auth . LDAP . String ( ) , auth . LDAP } ,
{ auth . DLDAP . String ( ) , auth . DLDAP } ,
{ auth . SMTP . String ( ) , auth . SMTP } ,
{ auth . OAuth2 . String ( ) , auth . OAuth2 } ,
{ auth . SSPI . String ( ) , auth . SSPI } ,
2020-10-23 15:40:29 +05:30
}
if pam . Supported {
2022-01-02 18:42:35 +05:30
items = append ( items , dropdownItem { auth . Names [ auth . PAM ] , auth . PAM } )
2020-10-23 15:40:29 +05:30
}
return items
} ( )
2016-07-08 04:55:09 +05:30
securityProtocols = [ ] dropdownItem {
2021-07-24 15:46:34 +05:30
{ ldap . SecurityProtocolNames [ ldap . SecurityProtocolUnencrypted ] , ldap . SecurityProtocolUnencrypted } ,
{ ldap . SecurityProtocolNames [ ldap . SecurityProtocolLDAPS ] , ldap . SecurityProtocolLDAPS } ,
{ ldap . SecurityProtocolNames [ ldap . SecurityProtocolStartTLS ] , ldap . SecurityProtocolStartTLS } ,
2016-07-08 04:55:09 +05:30
}
)
2015-09-11 02:41:41 +05:30
2016-11-21 08:51:24 +05:30
// NewAuthSource render adding a new auth source page
2016-03-11 22:26:52 +05:30
func NewAuthSource ( ctx * context . Context ) {
2014-08-29 18:20:43 +05:30
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.new" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2015-09-11 02:41:41 +05:30
2022-01-02 18:42:35 +05:30
ctx . Data [ "type" ] = auth . LDAP
ctx . Data [ "CurrentTypeName" ] = auth . Names [ auth . LDAP ]
2021-07-24 15:46:34 +05:30
ctx . Data [ "CurrentSecurityProtocol" ] = ldap . SecurityProtocolNames [ ldap . SecurityProtocolUnencrypted ]
2015-09-11 02:41:41 +05:30
ctx . Data [ "smtp_auth" ] = "PLAIN"
ctx . Data [ "is_active" ] = true
2017-05-10 18:40:18 +05:30
ctx . Data [ "is_sync_enabled" ] = true
2015-09-11 02:41:41 +05:30
ctx . Data [ "AuthSources" ] = authSources
2016-07-08 04:55:09 +05:30
ctx . Data [ "SecurityProtocols" ] = securityProtocols
2021-07-24 15:46:34 +05:30
ctx . Data [ "SMTPAuths" ] = smtp . Authenticators
2021-08-06 06:41:08 +05:30
oauth2providers := oauth2 . GetOAuth2Providers ( )
ctx . Data [ "OAuth2Providers" ] = oauth2providers
2017-02-22 12:44:37 +05:30
2019-11-23 05:03:31 +05:30
ctx . Data [ "SSPIAutoCreateUsers" ] = true
ctx . Data [ "SSPIAutoActivateUsers" ] = true
ctx . Data [ "SSPIStripDomainNames" ] = true
ctx . Data [ "SSPISeparatorReplacement" ] = "_"
ctx . Data [ "SSPIDefaultLanguage" ] = ""
2017-02-22 12:44:37 +05:30
// only the first as default
2021-08-06 06:41:08 +05:30
ctx . Data [ "oauth2_provider" ] = oauth2providers [ 0 ]
2017-02-22 12:44:37 +05:30
2021-04-05 21:00:52 +05:30
ctx . HTML ( http . StatusOK , tplAuthNew )
2014-05-03 08:18:14 +05:30
}
2021-07-24 15:46:34 +05:30
func parseLDAPConfig ( form forms . AuthenticationForm ) * ldap . Source {
2018-05-05 20:00:47 +05:30
var pageSize uint32
if form . UsePagedSearch {
pageSize = uint32 ( form . SearchPageSize )
}
2021-07-24 15:46:34 +05:30
return & ldap . Source {
Name : form . Name ,
Host : form . Host ,
Port : form . Port ,
SecurityProtocol : ldap . SecurityProtocol ( form . SecurityProtocol ) ,
SkipVerify : form . SkipVerify ,
BindDN : form . BindDN ,
UserDN : form . UserDN ,
BindPassword : form . BindPassword ,
UserBase : form . UserBase ,
AttributeUsername : form . AttributeUsername ,
AttributeName : form . AttributeName ,
AttributeSurname : form . AttributeSurname ,
AttributeMail : form . AttributeMail ,
AttributesInBind : form . AttributesInBind ,
AttributeSSHPublicKey : form . AttributeSSHPublicKey ,
2021-09-27 08:09:36 +05:30
AttributeAvatar : form . AttributeAvatar ,
2021-07-24 15:46:34 +05:30
SearchPageSize : pageSize ,
Filter : form . Filter ,
GroupsEnabled : form . GroupsEnabled ,
GroupDN : form . GroupDN ,
GroupFilter : form . GroupFilter ,
GroupMemberUID : form . GroupMemberUID ,
2022-02-11 19:54:58 +05:30
GroupTeamMap : form . GroupTeamMap ,
GroupTeamMapRemoval : form . GroupTeamMapRemoval ,
2021-07-24 15:46:34 +05:30
UserUID : form . UserUID ,
AdminFilter : form . AdminFilter ,
RestrictedFilter : form . RestrictedFilter ,
AllowDeactivateAll : form . AllowDeactivateAll ,
Enabled : true ,
2021-09-17 17:13:47 +05:30
SkipLocalTwoFA : form . SkipLocalTwoFA ,
2015-09-11 21:33:08 +05:30
}
}
2021-07-24 15:46:34 +05:30
func parseSMTPConfig ( form forms . AuthenticationForm ) * smtp . Source {
return & smtp . Source {
2015-09-11 23:02:33 +05:30
Auth : form . SMTPAuth ,
Host : form . SMTPHost ,
Port : form . SMTPPort ,
AllowedDomains : form . AllowedDomains ,
2021-08-12 02:12:58 +05:30
ForceSMTPS : form . ForceSMTPS ,
2015-09-11 23:02:33 +05:30
SkipVerify : form . SkipVerify ,
2021-08-12 02:12:58 +05:30
HeloHostname : form . HeloHostname ,
DisableHelo : form . DisableHelo ,
2021-09-27 06:32:01 +05:30
SkipLocalTwoFA : form . SkipLocalTwoFA ,
2015-09-11 21:33:08 +05:30
}
}
2021-07-24 15:46:34 +05:30
func parseOAuth2Config ( form forms . AuthenticationForm ) * oauth2 . Source {
2017-05-01 18:56:53 +05:30
var customURLMapping * oauth2 . CustomURLMapping
if form . Oauth2UseCustomURL {
customURLMapping = & oauth2 . CustomURLMapping {
TokenURL : form . Oauth2TokenURL ,
AuthURL : form . Oauth2AuthURL ,
ProfileURL : form . Oauth2ProfileURL ,
EmailURL : form . Oauth2EmailURL ,
2021-08-06 06:41:08 +05:30
Tenant : form . Oauth2Tenant ,
2017-05-01 18:56:53 +05:30
}
} else {
customURLMapping = nil
}
2022-03-09 00:26:40 +05:30
var scopes [ ] string
for _ , s := range strings . Split ( form . Oauth2Scopes , "," ) {
s = strings . TrimSpace ( s )
if s != "" {
scopes = append ( scopes , s )
}
}
2021-07-24 15:46:34 +05:30
return & oauth2 . Source {
2017-05-01 18:56:53 +05:30
Provider : form . Oauth2Provider ,
ClientID : form . Oauth2Key ,
ClientSecret : form . Oauth2Secret ,
OpenIDConnectAutoDiscoveryURL : form . OpenIDConnectAutoDiscoveryURL ,
CustomURLMapping : customURLMapping ,
2020-12-28 08:05:55 +05:30
IconURL : form . Oauth2IconURL ,
2022-03-09 00:26:40 +05:30
Scopes : scopes ,
2021-12-14 14:07:11 +05:30
RequiredClaimName : form . Oauth2RequiredClaimName ,
RequiredClaimValue : form . Oauth2RequiredClaimValue ,
2021-09-10 22:07:57 +05:30
SkipLocalTwoFA : form . SkipLocalTwoFA ,
2022-02-01 02:11:11 +05:30
GroupClaimName : form . Oauth2GroupClaimName ,
RestrictedGroup : form . Oauth2RestrictedGroup ,
AdminGroup : form . Oauth2AdminGroup ,
2017-02-22 12:44:37 +05:30
}
}
2021-07-24 15:46:34 +05:30
func parseSSPIConfig ( ctx * context . Context , form forms . AuthenticationForm ) ( * sspi . Source , error ) {
2019-11-23 05:03:31 +05:30
if util . IsEmptyString ( form . SSPISeparatorReplacement ) {
ctx . Data [ "Err_SSPISeparatorReplacement" ] = true
return nil , errors . New ( ctx . Tr ( "form.SSPISeparatorReplacement" ) + ctx . Tr ( "form.require_error" ) )
}
if separatorAntiPattern . MatchString ( form . SSPISeparatorReplacement ) {
ctx . Data [ "Err_SSPISeparatorReplacement" ] = true
return nil , errors . New ( ctx . Tr ( "form.SSPISeparatorReplacement" ) + ctx . Tr ( "form.alpha_dash_dot_error" ) )
}
if form . SSPIDefaultLanguage != "" && ! langCodePattern . MatchString ( form . SSPIDefaultLanguage ) {
ctx . Data [ "Err_SSPIDefaultLanguage" ] = true
return nil , errors . New ( ctx . Tr ( "form.lang_select_error" ) )
}
2021-07-24 15:46:34 +05:30
return & sspi . Source {
2019-11-23 05:03:31 +05:30
AutoCreateUsers : form . SSPIAutoCreateUsers ,
AutoActivateUsers : form . SSPIAutoActivateUsers ,
StripDomainNames : form . SSPIStripDomainNames ,
SeparatorReplacement : form . SSPISeparatorReplacement ,
DefaultLanguage : form . SSPIDefaultLanguage ,
} , nil
}
2016-11-21 08:51:24 +05:30
// NewAuthSourcePost response for adding an auth source
2021-01-26 21:06:53 +05:30
func NewAuthSourcePost ( ctx * context . Context ) {
2021-04-07 01:14:05 +05:30
form := * web . GetForm ( ctx ) . ( * forms . AuthenticationForm )
2014-08-29 18:20:43 +05:30
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.new" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2015-09-11 02:41:41 +05:30
2022-01-02 18:42:35 +05:30
ctx . Data [ "CurrentTypeName" ] = auth . Type ( form . Type ) . String ( )
2021-07-24 15:46:34 +05:30
ctx . Data [ "CurrentSecurityProtocol" ] = ldap . SecurityProtocolNames [ ldap . SecurityProtocol ( form . SecurityProtocol ) ]
2015-09-11 02:41:41 +05:30
ctx . Data [ "AuthSources" ] = authSources
2016-07-08 04:55:09 +05:30
ctx . Data [ "SecurityProtocols" ] = securityProtocols
2021-07-24 15:46:34 +05:30
ctx . Data [ "SMTPAuths" ] = smtp . Authenticators
2021-08-06 06:41:08 +05:30
oauth2providers := oauth2 . GetOAuth2Providers ( )
ctx . Data [ "OAuth2Providers" ] = oauth2providers
2014-05-03 08:18:14 +05:30
2019-11-23 05:03:31 +05:30
ctx . Data [ "SSPIAutoCreateUsers" ] = true
ctx . Data [ "SSPIAutoActivateUsers" ] = true
ctx . Data [ "SSPIStripDomainNames" ] = true
ctx . Data [ "SSPISeparatorReplacement" ] = "_"
ctx . Data [ "SSPIDefaultLanguage" ] = ""
2022-03-09 00:26:40 +05:30
// FIXME: most error path to render tplAuthNew will fail and result in 500
// * template: admin/auth/new:17:68: executing "admin/auth/new" at <.type.Int>: can't evaluate field Int in type interface {}
// * template: admin/auth/source/oauth:5:93: executing "admin/auth/source/oauth" at <.oauth2_provider.Name>: can't evaluate field Name in type interface {}
2016-07-08 04:55:09 +05:30
hasTLS := false
2020-03-22 20:42:55 +05:30
var config convert . Conversion
2022-01-02 18:42:35 +05:30
switch auth . Type ( form . Type ) {
case auth . LDAP , auth . DLDAP :
2015-09-11 21:33:08 +05:30
config = parseLDAPConfig ( form )
2016-11-07 22:08:43 +05:30
hasTLS = ldap . SecurityProtocol ( form . SecurityProtocol ) > ldap . SecurityProtocolUnencrypted
2022-01-02 18:42:35 +05:30
case auth . SMTP :
2015-09-11 21:33:08 +05:30
config = parseSMTPConfig ( form )
2016-07-08 04:55:09 +05:30
hasTLS = true
2022-01-02 18:42:35 +05:30
case auth . PAM :
config = & pam_service . Source {
2021-09-27 06:32:01 +05:30
ServiceName : form . PAMServiceName ,
EmailDomain : form . PAMEmailDomain ,
SkipLocalTwoFA : form . SkipLocalTwoFA ,
2015-04-23 17:28:57 +05:30
}
2022-01-02 18:42:35 +05:30
case auth . OAuth2 :
2017-02-22 12:44:37 +05:30
config = parseOAuth2Config ( form )
2022-01-02 18:42:35 +05:30
case auth . SSPI :
2019-11-23 05:03:31 +05:30
var err error
config , err = parseSSPIConfig ( ctx , form )
if err != nil {
ctx . RenderWithErr ( err . Error ( ) , tplAuthNew , form )
return
}
2022-01-02 18:42:35 +05:30
existing , err := auth . SourcesByType ( auth . SSPI )
2019-11-23 05:03:31 +05:30
if err != nil || len ( existing ) > 0 {
ctx . Data [ "Err_Type" ] = true
ctx . RenderWithErr ( ctx . Tr ( "admin.auths.login_source_of_type_exist" ) , tplAuthNew , form )
return
}
2014-05-11 17:13:57 +05:30
default :
2021-04-05 21:00:52 +05:30
ctx . Error ( http . StatusBadRequest )
2014-05-11 17:13:57 +05:30
return
2014-05-11 15:40:37 +05:30
}
2016-07-08 04:55:09 +05:30
ctx . Data [ "HasTLS" ] = hasTLS
if ctx . HasError ( ) {
2021-04-05 21:00:52 +05:30
ctx . HTML ( http . StatusOK , tplAuthNew )
2016-07-08 04:55:09 +05:30
return
}
2014-05-11 15:40:37 +05:30
2022-01-02 18:42:35 +05:30
if err := auth . CreateSource ( & auth . Source {
Type : auth . Type ( form . Type ) ,
2017-05-10 18:40:18 +05:30
Name : form . Name ,
2021-07-24 15:46:34 +05:30
IsActive : form . IsActive ,
2017-05-10 18:40:18 +05:30
IsSyncEnabled : form . IsSyncEnabled ,
Cfg : config ,
2015-09-11 21:33:08 +05:30
} ) ; err != nil {
2022-01-02 18:42:35 +05:30
if auth . IsErrSourceAlreadyExist ( err ) {
2016-08-31 13:26:10 +05:30
ctx . Data [ "Err_Name" ] = true
2022-01-02 18:42:35 +05:30
ctx . RenderWithErr ( ctx . Tr ( "admin.auths.login_source_exist" , err . ( auth . ErrSourceAlreadyExist ) . Name ) , tplAuthNew , form )
2016-08-31 13:26:10 +05:30
} else {
2022-01-02 18:42:35 +05:30
ctx . ServerError ( "auth.CreateSource" , err )
2016-08-31 13:26:10 +05:30
}
2014-05-03 08:18:14 +05:30
return
}
2015-03-25 04:34:16 +05:30
log . Trace ( "Authentication created by admin(%s): %s" , ctx . User . Name , form . Name )
2015-09-11 21:33:08 +05:30
ctx . Flash . Success ( ctx . Tr ( "admin.auths.new_success" , form . Name ) )
2016-11-27 15:44:25 +05:30
ctx . Redirect ( setting . AppSubURL + "/admin/auths" )
2014-05-03 08:18:14 +05:30
}
2016-11-21 08:51:24 +05:30
// EditAuthSource render editing auth source page
2016-03-11 22:26:52 +05:30
func EditAuthSource ( ctx * context . Context ) {
2014-08-29 18:20:43 +05:30
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.edit" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2015-09-11 21:33:08 +05:30
2016-07-08 04:55:09 +05:30
ctx . Data [ "SecurityProtocols" ] = securityProtocols
2021-07-24 15:46:34 +05:30
ctx . Data [ "SMTPAuths" ] = smtp . Authenticators
2021-08-06 06:41:08 +05:30
oauth2providers := oauth2 . GetOAuth2Providers ( )
ctx . Data [ "OAuth2Providers" ] = oauth2providers
2014-05-11 15:40:37 +05:30
2022-01-02 18:42:35 +05:30
source , err := auth . GetSourceByID ( ctx . ParamsInt64 ( ":authid" ) )
2014-05-05 14:10:25 +05:30
if err != nil {
2022-01-02 18:42:35 +05:30
ctx . ServerError ( "auth.GetSourceByID" , err )
2014-05-05 14:10:25 +05:30
return
}
2015-09-11 21:33:08 +05:30
ctx . Data [ "Source" ] = source
2016-07-08 04:55:09 +05:30
ctx . Data [ "HasTLS" ] = source . HasTLS ( )
2017-02-22 12:44:37 +05:30
if source . IsOAuth2 ( ) {
2021-08-06 06:41:08 +05:30
type Named interface {
Name ( ) string
}
for _ , provider := range oauth2providers {
if provider . Name ( ) == source . Cfg . ( Named ) . Name ( ) {
ctx . Data [ "CurrentOAuth2Provider" ] = provider
break
}
}
2017-02-22 12:44:37 +05:30
}
2021-12-14 14:07:11 +05:30
2021-04-05 21:00:52 +05:30
ctx . HTML ( http . StatusOK , tplAuthEdit )
2014-05-03 08:18:14 +05:30
}
2017-02-22 12:44:37 +05:30
// EditAuthSourcePost response for editing auth source
2021-01-26 21:06:53 +05:30
func EditAuthSourcePost ( ctx * context . Context ) {
2021-04-07 01:14:05 +05:30
form := * web . GetForm ( ctx ) . ( * forms . AuthenticationForm )
2014-08-29 18:20:43 +05:30
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.edit" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2015-09-11 21:33:08 +05:30
2021-07-24 15:46:34 +05:30
ctx . Data [ "SMTPAuths" ] = smtp . Authenticators
2021-08-06 06:41:08 +05:30
oauth2providers := oauth2 . GetOAuth2Providers ( )
ctx . Data [ "OAuth2Providers" ] = oauth2providers
2014-05-05 14:10:25 +05:30
2022-01-02 18:42:35 +05:30
source , err := auth . GetSourceByID ( ctx . ParamsInt64 ( ":authid" ) )
2015-09-11 21:33:08 +05:30
if err != nil {
2022-01-02 18:42:35 +05:30
ctx . ServerError ( "auth.GetSourceByID" , err )
2015-09-11 21:33:08 +05:30
return
}
ctx . Data [ "Source" ] = source
2016-07-08 04:55:09 +05:30
ctx . Data [ "HasTLS" ] = source . HasTLS ( )
2015-09-11 21:33:08 +05:30
2014-05-05 14:10:25 +05:30
if ctx . HasError ( ) {
2021-04-05 21:00:52 +05:30
ctx . HTML ( http . StatusOK , tplAuthEdit )
2014-05-05 14:10:25 +05:30
return
}
2020-03-22 20:42:55 +05:30
var config convert . Conversion
2022-01-02 18:42:35 +05:30
switch auth . Type ( form . Type ) {
case auth . LDAP , auth . DLDAP :
2015-09-11 21:33:08 +05:30
config = parseLDAPConfig ( form )
2022-01-02 18:42:35 +05:30
case auth . SMTP :
2015-09-11 21:33:08 +05:30
config = parseSMTPConfig ( form )
2022-01-02 18:42:35 +05:30
case auth . PAM :
config = & pam_service . Source {
2015-04-23 17:28:57 +05:30
ServiceName : form . PAMServiceName ,
2021-05-14 03:41:47 +05:30
EmailDomain : form . PAMEmailDomain ,
2015-04-23 17:28:57 +05:30
}
2022-01-02 18:42:35 +05:30
case auth . OAuth2 :
2017-02-22 12:44:37 +05:30
config = parseOAuth2Config ( form )
2022-01-02 18:42:35 +05:30
case auth . SSPI :
2019-11-23 05:03:31 +05:30
config , err = parseSSPIConfig ( ctx , form )
if err != nil {
ctx . RenderWithErr ( err . Error ( ) , tplAuthEdit , form )
return
}
2014-05-11 20:07:31 +05:30
default :
2021-04-05 21:00:52 +05:30
ctx . Error ( http . StatusBadRequest )
2014-05-11 20:07:31 +05:30
return
2014-05-11 15:40:37 +05:30
}
2015-09-11 21:33:08 +05:30
source . Name = form . Name
2021-07-24 15:46:34 +05:30
source . IsActive = form . IsActive
2017-05-10 18:40:18 +05:30
source . IsSyncEnabled = form . IsSyncEnabled
2015-09-11 21:33:08 +05:30
source . Cfg = config
2022-03-09 00:26:40 +05:30
// FIXME: if the name conflicts, it will result in 500: Error 1062: Duplicate entry 'aa' for key 'login_source.UQE_login_source_name'
2022-01-02 18:42:35 +05:30
if err := auth . UpdateSource ( source ) ; err != nil {
2021-11-10 23:21:09 +05:30
if oauth2 . IsErrOpenIDConnectInitialize ( err ) {
2017-05-01 18:56:53 +05:30
ctx . Flash . Error ( err . Error ( ) , true )
2021-04-05 21:00:52 +05:30
ctx . HTML ( http . StatusOK , tplAuthEdit )
2017-05-01 18:56:53 +05:30
} else {
2018-01-11 03:04:17 +05:30
ctx . ServerError ( "UpdateSource" , err )
2017-05-01 18:56:53 +05:30
}
2014-05-05 14:10:25 +05:30
return
}
2016-12-21 12:39:43 +05:30
log . Trace ( "Authentication changed by admin(%s): %d" , ctx . User . Name , source . ID )
2014-05-05 14:10:25 +05:30
2014-08-29 18:20:43 +05:30
ctx . Flash . Success ( ctx . Tr ( "admin.auths.update_success" ) )
2021-11-16 23:48:25 +05:30
ctx . Redirect ( setting . AppSubURL + "/admin/auths/" + strconv . FormatInt ( form . ID , 10 ) )
2014-05-03 08:18:14 +05:30
}
2016-11-21 08:51:24 +05:30
// DeleteAuthSource response for deleting an auth source
2016-03-11 22:26:52 +05:30
func DeleteAuthSource ( ctx * context . Context ) {
2022-01-02 18:42:35 +05:30
source , err := auth . GetSourceByID ( ctx . ParamsInt64 ( ":authid" ) )
2014-05-05 14:10:25 +05:30
if err != nil {
2022-01-02 18:42:35 +05:30
ctx . ServerError ( "auth.GetSourceByID" , err )
2014-05-05 14:10:25 +05:30
return
}
2022-01-02 18:42:35 +05:30
if err = auth_service . DeleteSource ( source ) ; err != nil {
if auth . IsErrSourceInUse ( err ) {
2016-03-06 04:38:42 +05:30
ctx . Flash . Error ( ctx . Tr ( "admin.auths.still_in_used" ) )
2016-08-31 13:52:41 +05:30
} else {
2022-01-02 18:42:35 +05:30
ctx . Flash . Error ( fmt . Sprintf ( "auth_service.DeleteSource: %v" , err ) )
2014-05-05 14:10:25 +05:30
}
2021-04-05 21:00:52 +05:30
ctx . JSON ( http . StatusOK , map [ string ] interface { } {
2021-11-16 23:48:25 +05:30
"redirect" : setting . AppSubURL + "/admin/auths/" + url . PathEscape ( ctx . Params ( ":authid" ) ) ,
2016-03-06 04:38:42 +05:30
} )
2014-05-05 14:10:25 +05:30
return
}
2015-09-11 21:33:08 +05:30
log . Trace ( "Authentication deleted by admin(%s): %d" , ctx . User . Name , source . ID )
ctx . Flash . Success ( ctx . Tr ( "admin.auths.deletion_success" ) )
2021-04-05 21:00:52 +05:30
ctx . JSON ( http . StatusOK , map [ string ] interface { } {
2016-11-27 15:44:25 +05:30
"redirect" : setting . AppSubURL + "/admin/auths" ,
2015-09-11 21:33:08 +05:30
} )
2014-05-03 08:18:14 +05:30
}