page = Page | page = Page | ||||
template = Template | template = Template | ||||
language = Language | language = Language | ||||
create_new = Create new... | |||||
create_new = Create... | |||||
user_profile_and_more = User profile and more | user_profile_and_more = User profile and more | ||||
signed_in_as = Signed in as | signed_in_as = Signed in as | ||||
monitor = Monitoring | monitor = Monitoring | ||||
prev = Prev. | prev = Prev. | ||||
next = Next | next = Next | ||||
total = Total: %d | |||||
dashboard.statistic = Statistic | dashboard.statistic = Statistic | ||||
dashboard.operations = Operations | dashboard.operations = Operations | ||||
repos.issues = Issues | repos.issues = Issues | ||||
auths.auth_manage_panel = Authentication Manage Panel | auths.auth_manage_panel = Authentication Manage Panel | ||||
auths.new = Add New Authentication Source | |||||
auths.new = Add New Source | |||||
auths.name = Name | auths.name = Name | ||||
auths.type = Type | auths.type = Type | ||||
auths.enabled = Enabled | auths.enabled = Enabled |
return source.Cfg.(*PAMConfig) | return source.Cfg.(*PAMConfig) | ||||
} | } | ||||
// CountLoginSources returns number of login sources. | |||||
func CountLoginSources() int64 { | |||||
count, _ := x.Count(new(LoginSource)) | |||||
return count | |||||
} | |||||
func CreateSource(source *LoginSource) error { | func CreateSource(source *LoginSource) error { | ||||
_, err := x.Insert(source) | _, err := x.Insert(source) | ||||
return err | return err |
stats.Counter.Follow, _ = x.Count(new(Follow)) | stats.Counter.Follow, _ = x.Count(new(Follow)) | ||||
stats.Counter.Mirror, _ = x.Count(new(Mirror)) | stats.Counter.Mirror, _ = x.Count(new(Mirror)) | ||||
stats.Counter.Release, _ = x.Count(new(Release)) | stats.Counter.Release, _ = x.Count(new(Release)) | ||||
stats.Counter.LoginSource, _ = x.Count(new(LoginSource)) | |||||
stats.Counter.LoginSource = CountLoginSources() | |||||
stats.Counter.Webhook, _ = x.Count(new(Webhook)) | stats.Counter.Webhook, _ = x.Count(new(Webhook)) | ||||
stats.Counter.Milestone, _ = x.Count(new(Milestone)) | stats.Counter.Milestone, _ = x.Count(new(Milestone)) | ||||
stats.Counter.Label, _ = x.Count(new(Label)) | stats.Counter.Label, _ = x.Count(new(Label)) |
} | } | ||||
} | } | ||||
} | } | ||||
.ui.header, | |||||
.ui.segment { | |||||
box-shadow: 0 1px 2px 0 rgba(34,36,38,.15); | |||||
} | |||||
} | } |
ctx.Handle(500, "GetAuths", err) | ctx.Handle(500, "GetAuths", err) | ||||
return | return | ||||
} | } | ||||
ctx.Data["Total"] = models.CountLoginSources() | |||||
ctx.HTML(200, AUTHS) | ctx.HTML(200, AUTHS) | ||||
} | } | ||||
var u core.Conversion | var u core.Conversion | ||||
switch models.LoginType(form.Type) { | switch models.LoginType(form.Type) { | ||||
case models.LDAP: | case models.LDAP: | ||||
fallthrough | |||||
fallthrough | |||||
case models.DLDAP: | case models.DLDAP: | ||||
u = &models.LDAPConfig{ | u = &models.LDAPConfig{ | ||||
Ldapsource: ldap.Ldapsource{ | Ldapsource: ldap.Ldapsource{ | ||||
var config core.Conversion | var config core.Conversion | ||||
switch models.LoginType(form.Type) { | switch models.LoginType(form.Type) { | ||||
case models.LDAP: | case models.LDAP: | ||||
fallthrough | |||||
fallthrough | |||||
case models.DLDAP: | case models.DLDAP: | ||||
config = &models.LDAPConfig{ | config = &models.LDAPConfig{ | ||||
Ldapsource: ldap.Ldapsource{ | Ldapsource: ldap.Ldapsource{ |
<input class="ipt ipt-large ipt-radius {{if .Err_AuthName}}ipt-error{{end}}" id="name" name="name" value="{{.Source.Name}}" required /> | <input class="ipt ipt-large ipt-radius {{if .Err_AuthName}}ipt-error{{end}}" id="name" name="name" value="{{.Source.Name}}" required /> | ||||
</div> | </div> | ||||
{{if eq $type 2 3}} | |||||
{{if eq $type 2 5}} | |||||
<div class="field"> | <div class="field"> | ||||
<label class="req" for="host">{{.i18n.Tr "admin.auths.host"}}</label> | <label class="req" for="host">{{.i18n.Tr "admin.auths.host"}}</label> | ||||
<input class="ipt ipt-large ipt-radius {{if .Err_Host}}ipt-error{{end}}" id="host" name="host" value="{{.Source.LDAP.Host}}" required /> | <input class="ipt ipt-large ipt-radius {{if .Err_Host}}ipt-error{{end}}" id="host" name="host" value="{{.Source.LDAP.Host}}" required /> | ||||
<input class="ipt ipt-large ipt-radius {{if .Err_UserBase}}ipt-error{{end}}" id="user_base" name="user_base" value="{{.Source.LDAP.UserBase}}" /> | <input class="ipt ipt-large ipt-radius {{if .Err_UserBase}}ipt-error{{end}}" id="user_base" name="user_base" value="{{.Source.LDAP.UserBase}}" /> | ||||
</div> | </div> | ||||
{{end}} | {{end}} | ||||
{{if eq $type 3}} | |||||
{{if eq $type 5}} | |||||
<div class="field"> | <div class="field"> | ||||
<label class="req" for="user_dn">{{.i18n.Tr "admin.auths.user_dn"}}</label> | <label class="req" for="user_dn">{{.i18n.Tr "admin.auths.user_dn"}}</label> | ||||
<input class="ipt ipt-large ipt-radius {{if .Err_UserDN}}ipt-error{{end}}" id="user_dn" name="user_dn" value="{{.Source.LDAP.UserDN}}" /> | <input class="ipt ipt-large ipt-radius {{if .Err_UserDN}}ipt-error{{end}}" id="user_dn" name="user_dn" value="{{.Source.LDAP.UserDN}}" /> | ||||
</div> | </div> | ||||
{{else if eq $type 4}} | |||||
{{else if eq $type 3}} | |||||
<div class="field"> | <div class="field"> | ||||
<label class="req">{{.i18n.Tr "admin.auths.smtp_auth"}}</label> | <label class="req">{{.i18n.Tr "admin.auths.smtp_auth"}}</label> | ||||
<select name="smtp_auth"> | <select name="smtp_auth"> | ||||
<input class="ipt ipt-large ipt-radius {{if .Err_SmtpPort}}ipt-error{{end}}" id="smtp_port" name="smtp_port" value="{{.Source.SMTP.Port}}" /> | <input class="ipt ipt-large ipt-radius {{if .Err_SmtpPort}}ipt-error{{end}}" id="smtp_port" name="smtp_port" value="{{.Source.SMTP.Port}}" /> | ||||
</div> | </div> | ||||
{{else if eq $type 5}} | |||||
{{else if eq $type 4}} | |||||
<div class="field"> | <div class="field"> | ||||
<label class="req" for="pam_service_name">{{.i18n.Tr "admin.auths.pam_service_name"}}</label> | <label class="req" for="pam_service_name">{{.i18n.Tr "admin.auths.pam_service_name"}}</label> | ||||
<input class="ipt ipt-large ipt-radius {{if .Err_PAMServiceName}}ipt-error{{end}}" id="pam_service_name" name="pam_service_name" value="{{.Source.PAM.ServiceName}}" /> | <input class="ipt ipt-large ipt-radius {{if .Err_PAMServiceName}}ipt-error{{end}}" id="pam_service_name" name="pam_service_name" value="{{.Source.PAM.ServiceName}}" /> | ||||
{{end}} | {{end}} | ||||
<div class="field"> | <div class="field"> | ||||
{{if eq $type 4}} | |||||
{{if eq $type 3}} | |||||
<label></label> | <label></label> | ||||
<input name="tls" type="checkbox" {{if .Source.SMTP.TLS}}checked{{end}}> | <input name="tls" type="checkbox" {{if .Source.SMTP.TLS}}checked{{end}}> | ||||
<strong>{{.i18n.Tr "admin.auths.enable_tls"}}</strong> | <strong>{{.i18n.Tr "admin.auths.enable_tls"}}</strong> |
{{template "ng/base/head" .}} | |||||
{{template "ng/base/header" .}} | |||||
<div id="admin-wrapper"> | |||||
<div id="setting-wrapper" class="main-wrapper"> | |||||
<div id="admin-setting" class="container clear"> | |||||
{{template "admin/nav" .}} | |||||
<div class="grid-4-5 left"> | |||||
<div class="setting-content"> | |||||
{{template "ng/base/alert" .}} | |||||
<div id="setting-content"> | |||||
<div class="panel panel-radius"> | |||||
<div class="panel-header"> | |||||
<strong>{{.i18n.Tr "admin.auths.auth_manage_panel"}}</strong> | |||||
</div> | |||||
<div class="panel-body admin-panel"> | |||||
<a class="btn-blue btn-medium btn-link btn-radius" href="{{AppSubUrl}}/admin/auths/new">{{.i18n.Tr "admin.auths.new"}}</a> | |||||
<div class="admin-table"> | |||||
<table class="table table-striped"> | |||||
<thead> | |||||
<tr> | |||||
<th>Id</th> | |||||
<th>{{.i18n.Tr "admin.auths.name"}}</th> | |||||
<th>{{.i18n.Tr "admin.auths.type"}}</th> | |||||
<th>{{.i18n.Tr "admin.auths.enabled"}}</th> | |||||
<th>{{.i18n.Tr "admin.auths.updated"}}</th> | |||||
<th>{{.i18n.Tr "admin.users.created"}}</th> | |||||
<th>{{.i18n.Tr "admin.users.edit"}}</th> | |||||
</tr> | |||||
</thead> | |||||
<tbody> | |||||
{{range .Sources}} | |||||
<tr> | |||||
<td>{{.ID}}</td> | |||||
<td><a href="{{AppSubUrl}}/admin/auths/{{.ID}}">{{.Name}}</a></td> | |||||
<td>{{.TypeString}}</td> | |||||
<td><i class="fa fa{{if .IsActived}}-check{{end}}-square-o"></i></td> | |||||
<td><span title="{{DateFmtLong .Updated}}">{{DateFmtShort .Updated}}</span></td> | |||||
<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td> | |||||
<td><a href="{{AppSubUrl}}/admin/auths/{{.ID}}"><i class="fa fa-pencil-square-o"></i></a></td> | |||||
</tr> | |||||
{{end}} | |||||
</tbody> | |||||
</table> | |||||
{{if or .LastPageNum .NextPageNum}} | |||||
<ul class="pagination"> | |||||
{{if .LastPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/auths?p={{.LastPageNum}}">« Prev.</a></li>{{end}} | |||||
{{if .NextPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/auths?p={{.NextPageNum}}">» Next</a></li>{{end}} | |||||
</ul> | |||||
{{end}} | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
{{template "base/head" .}} | |||||
<div class="admin authentication"> | |||||
<div class="ui container"> | |||||
<div class="ui grid"> | |||||
{{template "admin/navbar" .}} | |||||
<div class="twelve wide column content"> | |||||
{{template "base/alert" .}} | |||||
<h4 class="ui top attached header"> | |||||
{{.i18n.Tr "admin.auths.auth_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}}) | |||||
<div class="ui right"> | |||||
<a class="ui blue tiny button" href="{{AppSubUrl}}/admin/auths/new">{{.i18n.Tr "admin.auths.new"}}</a> | |||||
</div> | |||||
</h4> | |||||
<div class="ui attached table segment"> | |||||
<table class="ui very basic striped table"> | |||||
<thead> | |||||
<tr> | |||||
<th>ID</th> | |||||
<th>{{.i18n.Tr "admin.auths.name"}}</th> | |||||
<th>{{.i18n.Tr "admin.auths.type"}}</th> | |||||
<th>{{.i18n.Tr "admin.auths.enabled"}}</th> | |||||
<th>{{.i18n.Tr "admin.auths.updated"}}</th> | |||||
<th>{{.i18n.Tr "admin.users.created"}}</th> | |||||
<th>{{.i18n.Tr "admin.users.edit"}}</th> | |||||
</tr> | |||||
</thead> | |||||
<tbody> | |||||
{{range .Sources}} | |||||
<tr> | |||||
<td>{{.ID}}</td> | |||||
<td><a href="{{AppSubUrl}}/admin/auths/{{.ID}}">{{.Name}}</a></td> | |||||
<td>{{.TypeString}}</td> | |||||
<td><i class="fa fa{{if .IsActived}}-check{{end}}-square-o"></i></td> | |||||
<td><span class="poping up" data-content="{{DateFmtLong .Updated}}" data-variation="tiny">{{DateFmtShort .Updated}}</span></td> | |||||
<td><span class="poping up" data-content="{{DateFmtLong .Created}}" data-variation="tiny">{{DateFmtShort .Created}}</span></td> | |||||
<td><a href="{{AppSubUrl}}/admin/auths/{{.ID}}"><i class="fa fa-pencil-square-o"></i></a></td> | |||||
</tr> | |||||
{{end}} | |||||
</tbody> | |||||
</table> | |||||
</div> | |||||
</div> | |||||
</div> | </div> | ||||
</div> | |||||
</div> | </div> | ||||
{{template "ng/base/footer" .}} | |||||
{{template "base/footer" .}} |