2014-05-05 13: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 06:48:14 +04:00
package admin
import (
"strings"
2014-05-05 12:40:25 +04:00
"github.com/go-martini/martini"
2014-05-11 14:10:37 +04:00
"github.com/go-xorm/core"
2014-05-11 18:37:31 +04:00
2014-05-03 06:48:14 +04:00
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/auth/ldap"
2014-05-05 12:40:25 +04:00
"github.com/gogits/gogs/modules/base"
2014-05-05 13:32:47 +04:00
"github.com/gogits/gogs/modules/log"
2014-05-03 06:48:14 +04:00
"github.com/gogits/gogs/modules/middleware"
)
func NewAuthSource ( ctx * middleware . Context ) {
ctx . Data [ "Title" ] = "New Authentication"
ctx . Data [ "PageIsAuths" ] = true
2014-05-05 12:40:25 +04:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
2014-05-11 14:10:37 +04:00
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-05-03 06:48:14 +04:00
ctx . HTML ( 200 , "admin/auths/new" )
}
func NewAuthSourcePost ( ctx * middleware . Context , form auth . AuthenticationForm ) {
ctx . Data [ "Title" ] = "New Authentication"
ctx . Data [ "PageIsAuths" ] = true
2014-05-11 14:10:37 +04:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-05-03 06:48:14 +04:00
if ctx . HasError ( ) {
ctx . HTML ( 200 , "admin/auths/new" )
return
}
2014-05-11 14:10:37 +04:00
var u core . Conversion
2014-05-11 15:43:57 +04:00
switch form . Type {
case models . LT_LDAP :
2014-05-11 14:10:37 +04:00
u = & models . LDAPConfig {
Ldapsource : ldap . Ldapsource {
Host : form . Host ,
Port : form . Port ,
2014-05-15 16:21:27 +04:00
UseSSL : form . UseSSL ,
2014-05-11 14:10:37 +04:00
BaseDN : form . BaseDN ,
Attributes : form . Attributes ,
Filter : form . Filter ,
MsAdSAFormat : form . MsAdSA ,
Enabled : true ,
Name : form . AuthName ,
} ,
}
2014-05-11 15:43:57 +04:00
case models . LT_SMTP :
2014-05-11 14:10:37 +04:00
u = & models . SMTPConfig {
Auth : form . SmtpAuth ,
2014-05-12 19:02:36 +04:00
Host : form . SmtpHost ,
Port : form . SmtpPort ,
2014-05-11 15:43:57 +04:00
TLS : form . Tls ,
2014-05-11 14:10:37 +04:00
}
2014-05-11 15:43:57 +04:00
default :
ctx . Error ( 400 )
return
2014-05-11 14:10:37 +04:00
}
var source = & models . LoginSource {
Type : form . Type ,
Name : form . AuthName ,
IsActived : true ,
2014-05-11 16:18:57 +04:00
AllowAutoRegister : form . AllowAutoRegister ,
2014-05-11 14:10:37 +04:00
Cfg : u ,
2014-05-03 06:48:14 +04:00
}
2014-05-11 14:10:37 +04:00
if err := models . AddSource ( source ) ; err != nil {
2014-05-11 15:43:57 +04:00
ctx . Handle ( 500 , "admin.auths.NewAuth" , err )
2014-05-03 06:48:14 +04:00
return
}
log . Trace ( "%s Authentication created by admin(%s): %s" , ctx . Req . RequestURI ,
2014-05-05 13:32:47 +04:00
ctx . User . LowerName , strings . ToLower ( form . AuthName ) )
2014-05-03 06:48:14 +04:00
ctx . Redirect ( "/admin/auths" )
}
2014-05-05 12:40:25 +04:00
func EditAuthSource ( ctx * middleware . Context , params martini . Params ) {
ctx . Data [ "Title" ] = "Edit Authentication"
ctx . Data [ "PageIsAuths" ] = true
2014-05-11 14:10:37 +04:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-05-05 12:40:25 +04:00
id , err := base . StrTo ( params [ "authid" ] ) . Int64 ( )
if err != nil {
ctx . Handle ( 404 , "admin.auths.EditAuthSource" , err )
return
}
u , err := models . GetLoginSourceById ( id )
if err != nil {
ctx . Handle ( 500 , "admin.user.EditUser" , err )
return
}
ctx . Data [ "Source" ] = u
ctx . HTML ( 200 , "admin/auths/edit" )
2014-05-03 06:48:14 +04:00
}
2014-05-05 12:40:25 +04:00
func EditAuthSourcePost ( ctx * middleware . Context , form auth . AuthenticationForm ) {
ctx . Data [ "Title" ] = "Edit Authentication"
ctx . Data [ "PageIsAuths" ] = true
2014-05-11 14:10:37 +04:00
ctx . Data [ "LoginTypes" ] = models . LoginTypes
ctx . Data [ "SMTPAuths" ] = models . SMTPAuths
2014-05-05 12:40:25 +04:00
if ctx . HasError ( ) {
ctx . HTML ( 200 , "admin/auths/edit" )
return
}
2014-05-11 14:10:37 +04:00
var config core . Conversion
2014-05-11 18:37:31 +04:00
switch form . Type {
case models . LT_LDAP :
2014-05-11 14:10:37 +04:00
config = & models . LDAPConfig {
2014-05-05 12:40:25 +04:00
Ldapsource : ldap . Ldapsource {
Host : form . Host ,
Port : form . Port ,
2014-05-15 16:21:27 +04:00
UseSSL : form . UseSSL ,
2014-05-05 12:40:25 +04:00
BaseDN : form . BaseDN ,
Attributes : form . Attributes ,
Filter : form . Filter ,
MsAdSAFormat : form . MsAdSA ,
Enabled : true ,
2014-05-05 13:32:47 +04:00
Name : form . AuthName ,
2014-05-05 12:40:25 +04:00
} ,
2014-05-11 14:10:37 +04:00
}
2014-05-11 18:37:31 +04:00
case models . LT_SMTP :
2014-05-11 14:10:37 +04:00
config = & models . SMTPConfig {
Auth : form . SmtpAuth ,
2014-05-12 19:02:36 +04:00
Host : form . SmtpHost ,
Port : form . SmtpPort ,
2014-05-11 15:43:57 +04:00
TLS : form . Tls ,
2014-05-11 14:10:37 +04:00
}
2014-05-11 18:37:31 +04:00
default :
ctx . Error ( 400 )
return
2014-05-11 14:10:37 +04:00
}
u := models . LoginSource {
2014-05-15 18:34:36 +04:00
Id : form . Id ,
2014-05-11 14:10:37 +04:00
Name : form . AuthName ,
IsActived : form . IsActived ,
Type : form . Type ,
2014-05-11 16:18:57 +04:00
AllowAutoRegister : form . AllowAutoRegister ,
2014-05-11 14:10:37 +04:00
Cfg : config ,
2014-05-05 12:40:25 +04:00
}
2014-05-11 14:10:37 +04:00
if err := models . UpdateSource ( & u ) ; err != nil {
2014-05-11 18:37:31 +04:00
ctx . Handle ( 500 , "admin.auths.EditAuth" , err )
2014-05-05 12:40:25 +04:00
return
}
log . Trace ( "%s Authentication changed by admin(%s): %s" , ctx . Req . RequestURI ,
2014-05-05 13:32:47 +04:00
ctx . User . LowerName , strings . ToLower ( form . AuthName ) )
2014-05-05 12:40:25 +04:00
ctx . Redirect ( "/admin/auths" )
2014-05-03 06:48:14 +04:00
}
2014-05-05 12:40:25 +04:00
func DeleteAuthSource ( ctx * middleware . Context , params martini . Params ) {
ctx . Data [ "Title" ] = "Delete Authentication"
ctx . Data [ "PageIsAuths" ] = true
id , err := base . StrTo ( params [ "authid" ] ) . Int64 ( )
if err != nil {
ctx . Handle ( 404 , "admin.auths.DeleteAuth" , err )
return
}
a , err := models . GetLoginSourceById ( id )
if err != nil {
ctx . Handle ( 500 , "admin.auths.DeleteAuth" , err )
return
}
if err = models . DelLoginSource ( a ) ; err != nil {
switch err {
case models . ErrAuthenticationUserUsed :
ctx . Flash . Error ( "This authentication still has used by some users, you should move them and then delete again." )
ctx . Redirect ( "/admin/auths/" + params [ "authid" ] )
default :
ctx . Handle ( 500 , "admin.auths.DeleteAuth" , err )
}
return
}
log . Trace ( "%s Authentication deleted by admin(%s): %s" , ctx . Req . RequestURI ,
ctx . User . LowerName , ctx . User . LowerName )
ctx . Redirect ( "/admin/auths" )
2014-05-03 06:48:14 +04:00
}