2014-05-05 05:32:47 -04:00
// 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 10:48:14 +08:00
package admin
import (
2014-07-26 00:24:27 -04:00
"github.com/Unknwon/com"
2014-05-11 18:10:37 +08:00
"github.com/go-xorm/core"
2014-05-11 10:37:31 -04:00
2014-05-03 10:48:14 +08:00
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/auth/ldap"
2014-05-05 16:40:25 +08:00
"github.com/gogits/gogs/modules/base"
2014-05-05 05:32:47 -04:00
"github.com/gogits/gogs/modules/log"
2014-05-03 10:48:14 +08:00
"github.com/gogits/gogs/modules/middleware"
2014-09-14 19:35:22 +02:00
"github.com/gogits/gogs/modules/setting"
2014-05-03 10:48:14 +08:00
)
2014-06-22 13:14:03 -04:00
const (
2014-08-29 20:50:43 +08:00
AUTHS base . TplName = "admin/auth/list"
2014-06-22 13:14:03 -04:00
AUTH_NEW base . TplName = "admin/auth/new"
AUTH_EDIT base . TplName = "admin/auth/edit"
)
2014-08-29 20:50:43 +08:00
func Authentications ( ctx * middleware . Context ) {
ctx . Data [ "Title" ] = ctx . Tr ( "admin.authentication" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
var err error
ctx . Data [ "Sources" ] , err = models . GetAuths ( )
if err != nil {
ctx . Handle ( 500 , "GetAuths" , err )
return
}
ctx . HTML ( 200 , AUTHS )
}
2014-05-03 10:48:14 +08:00
func NewAuthSource ( ctx * middleware . Context ) {
2014-08-29 20:50:43 +08:00
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.new" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2014-05-05 16:40:25 +08:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
2014-05-11 18:10:37 +08:00
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-06-22 13:14:03 -04:00
ctx . HTML ( 200 , AUTH_NEW )
2014-05-03 10:48:14 +08:00
}
func NewAuthSourcePost ( ctx * middleware . Context , form auth . AuthenticationForm ) {
2014-08-29 20:50:43 +08:00
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.new" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2014-05-11 18:10:37 +08:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-05-03 10:48:14 +08:00
if ctx . HasError ( ) {
2014-06-22 13:14:03 -04:00
ctx . HTML ( 200 , AUTH_NEW )
2014-05-03 10:48:14 +08:00
return
}
2014-05-11 18:10:37 +08:00
var u core . Conversion
2014-06-08 17:53:53 -04:00
switch models . LoginType ( form . Type ) {
case models . LDAP :
2015-09-04 20:39:23 -07:00
fallthrough
case models . DLDAP :
2014-05-11 18:10:37 +08:00
u = & models . LDAPConfig {
Ldapsource : ldap . Ldapsource {
2015-08-29 15:45:58 +08:00
Name : form . Name ,
Host : form . Host ,
Port : form . Port ,
UseSSL : form . UseSSL ,
BindDN : form . BindDN ,
2015-09-04 20:39:23 -07:00
UserDN : form . UserDN ,
2015-08-29 15:45:58 +08:00
BindPassword : form . BindPassword ,
UserBase : form . UserBase ,
AttributeName : form . AttributeName ,
AttributeSurname : form . AttributeSurname ,
AttributeMail : form . AttributeMail ,
2015-09-04 20:39:23 -07:00
Filter : form . Filter ,
AdminFilter : form . AdminFilter ,
2015-08-29 15:45:58 +08:00
Enabled : true ,
2014-05-11 18:10:37 +08:00
} ,
}
2014-06-08 17:53:53 -04:00
case models . SMTP :
2014-05-11 18:10:37 +08:00
u = & models . SMTPConfig {
2015-08-29 15:45:58 +08:00
Auth : form . SMTPAuth ,
Host : form . SMTPHost ,
Port : form . SMTPPort ,
TLS : form . TLS ,
SkipVerify : form . SkipVerify ,
2014-05-11 18:10:37 +08:00
}
2015-04-23 13:58:57 +02:00
case models . PAM :
u = & models . PAMConfig {
ServiceName : form . PAMServiceName ,
}
2014-05-11 07:43:57 -04:00
default :
ctx . Error ( 400 )
return
2014-05-11 18:10:37 +08:00
}
var source = & models . LoginSource {
2014-06-08 17:53:53 -04:00
Type : models . LoginType ( form . Type ) ,
2015-03-24 19:04:16 -04:00
Name : form . Name ,
2014-05-11 18:10:37 +08:00
IsActived : true ,
2014-05-11 20:18:57 +08:00
AllowAutoRegister : form . AllowAutoRegister ,
2014-05-11 18:10:37 +08:00
Cfg : u ,
2014-05-03 10:48:14 +08:00
}
2014-06-08 17:53:53 -04:00
if err := models . CreateSource ( source ) ; err != nil {
2014-08-29 20:50:43 +08:00
ctx . Handle ( 500 , "CreateSource" , err )
2014-05-03 10:48:14 +08:00
return
}
2015-03-24 19:04:16 -04:00
log . Trace ( "Authentication created by admin(%s): %s" , ctx . User . Name , form . Name )
2014-09-19 20:11:34 -04:00
ctx . Redirect ( setting . AppSubUrl + "/admin/auths" )
2014-05-03 10:48:14 +08:00
}
2014-07-26 00:24:27 -04:00
func EditAuthSource ( ctx * middleware . Context ) {
2014-08-29 20:50:43 +08:00
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.edit" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2014-05-11 18:10:37 +08:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-08-29 20:50:43 +08:00
id := com . StrTo ( ctx . Params ( ":authid" ) ) . MustInt64 ( )
if id == 0 {
ctx . Handle ( 404 , "EditAuthSource" , nil )
2014-05-05 16:40:25 +08:00
return
}
2015-08-29 15:45:58 +08:00
u , err := models . GetLoginSourceByID ( id )
2014-05-05 16:40:25 +08:00
if err != nil {
2014-08-29 20:50:43 +08:00
ctx . Handle ( 500 , "GetLoginSourceById" , err )
2014-05-05 16:40:25 +08:00
return
}
ctx . Data [ "Source" ] = u
2014-06-22 13:14:03 -04:00
ctx . HTML ( 200 , AUTH_EDIT )
2014-05-03 10:48:14 +08:00
}
2014-05-05 16:40:25 +08:00
func EditAuthSourcePost ( ctx * middleware . Context , form auth . AuthenticationForm ) {
2014-08-29 20:50:43 +08:00
ctx . Data [ "Title" ] = ctx . Tr ( "admin.auths.edit" )
ctx . Data [ "PageIsAdmin" ] = true
ctx . Data [ "PageIsAdminAuthentications" ] = true
2014-05-05 16:40:25 +08:00
ctx . Data [ "PageIsAuths" ] = true
2014-05-11 18:10:37 +08:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-05-05 16:40:25 +08:00
if ctx . HasError ( ) {
2014-06-22 13:14:03 -04:00
ctx . HTML ( 200 , AUTH_EDIT )
2014-05-05 16:40:25 +08:00
return
}
2014-05-11 18:10:37 +08:00
var config core . Conversion
2014-06-08 17:53:53 -04:00
switch models . LoginType ( form . Type ) {
case models . LDAP :
2015-09-04 20:39:23 -07:00
fallthrough
case models . DLDAP :
2014-05-11 18:10:37 +08:00
config = & models . LDAPConfig {
2014-05-05 16:40:25 +08:00
Ldapsource : ldap . Ldapsource {
2015-08-29 15:45:58 +08:00
Name : form . Name ,
Host : form . Host ,
Port : form . Port ,
UseSSL : form . UseSSL ,
BindDN : form . BindDN ,
2015-09-04 20:39:23 -07:00
UserDN : form . UserDN ,
2015-08-29 15:45:58 +08:00
BindPassword : form . BindPassword ,
UserBase : form . UserBase ,
AttributeName : form . AttributeName ,
AttributeSurname : form . AttributeSurname ,
AttributeMail : form . AttributeMail ,
Filter : form . Filter ,
AdminFilter : form . AdminFilter ,
Enabled : true ,
2014-05-05 16:40:25 +08:00
} ,
2014-05-11 18:10:37 +08:00
}
2014-06-08 17:53:53 -04:00
case models . SMTP :
2014-05-11 18:10:37 +08:00
config = & models . SMTPConfig {
2015-08-29 15:45:58 +08:00
Auth : form . SMTPAuth ,
Host : form . SMTPHost ,
Port : form . SMTPPort ,
TLS : form . TLS ,
SkipVerify : form . SkipVerify ,
2014-05-11 18:10:37 +08:00
}
2015-04-23 13:58:57 +02:00
case models . PAM :
config = & models . PAMConfig {
ServiceName : form . PAMServiceName ,
}
2014-05-11 10:37:31 -04:00
default :
ctx . Error ( 400 )
return
2014-05-11 18:10:37 +08:00
}
u := models . LoginSource {
2015-08-29 15:45:58 +08:00
ID : form . ID ,
2015-03-24 19:04:16 -04:00
Name : form . Name ,
2014-05-11 18:10:37 +08:00
IsActived : form . IsActived ,
2014-06-08 17:53:53 -04:00
Type : models . LoginType ( form . Type ) ,
2014-05-11 20:18:57 +08:00
AllowAutoRegister : form . AllowAutoRegister ,
2014-05-11 18:10:37 +08:00
Cfg : config ,
2014-05-05 16:40:25 +08:00
}
2014-05-11 18:10:37 +08:00
if err := models . UpdateSource ( & u ) ; err != nil {
2014-08-29 20:50:43 +08:00
ctx . Handle ( 500 , "UpdateSource" , err )
2014-05-05 16:40:25 +08:00
return
}
2015-03-24 19:04:16 -04:00
log . Trace ( "Authentication changed by admin(%s): %s" , ctx . User . Name , form . Name )
2014-08-29 20:50:43 +08:00
ctx . Flash . Success ( ctx . Tr ( "admin.auths.update_success" ) )
2014-09-19 20:11:34 -04:00
ctx . Redirect ( setting . AppSubUrl + "/admin/auths/" + ctx . Params ( ":authid" ) )
2014-05-03 10:48:14 +08:00
}
2014-07-26 00:24:27 -04:00
func DeleteAuthSource ( ctx * middleware . Context ) {
2014-08-29 20:50:43 +08:00
id := com . StrTo ( ctx . Params ( ":authid" ) ) . MustInt64 ( )
if id == 0 {
ctx . Handle ( 404 , "DeleteAuthSource" , nil )
2014-05-05 16:40:25 +08:00
return
}
2015-08-29 15:45:58 +08:00
a , err := models . GetLoginSourceByID ( id )
2014-05-05 16:40:25 +08:00
if err != nil {
2014-08-29 20:50:43 +08:00
ctx . Handle ( 500 , "GetLoginSourceById" , err )
2014-05-05 16:40:25 +08:00
return
}
if err = models . DelLoginSource ( a ) ; err != nil {
switch err {
case models . ErrAuthenticationUserUsed :
2014-08-29 20:50:43 +08:00
ctx . Flash . Error ( "form.still_own_user" )
2014-09-19 20:11:34 -04:00
ctx . Redirect ( setting . AppSubUrl + "/admin/auths/" + ctx . Params ( ":authid" ) )
2014-05-05 16:40:25 +08:00
default :
2014-08-29 20:50:43 +08:00
ctx . Handle ( 500 , "DelLoginSource" , err )
2014-05-05 16:40:25 +08:00
}
return
}
2014-08-29 20:50:43 +08:00
log . Trace ( "Authentication deleted by admin(%s): %s" , ctx . User . Name , a . Name )
2014-09-19 20:11:34 -04:00
ctx . Redirect ( setting . AppSubUrl + "/admin/auths" )
2014-05-03 10:48:14 +08:00
}