|
|
## -*- coding: utf-8 -*-
|
|
|
<%inherit file="/base/base.html"/>
|
|
|
|
|
|
<%def name="title()">
|
|
|
${_('Authentication Settings')}
|
|
|
%if c.site_name:
|
|
|
· ${c.site_name}
|
|
|
%endif
|
|
|
</%def>
|
|
|
|
|
|
<%def name="breadcrumbs_links()">
|
|
|
${h.link_to(_('Admin'),h.url('admin_home'))}
|
|
|
»
|
|
|
${_('Authentication')}
|
|
|
</%def>
|
|
|
|
|
|
<%block name="header_menu">
|
|
|
${self.menu('admin')}
|
|
|
</%block>
|
|
|
|
|
|
<%def name="main()">
|
|
|
<div class="box">
|
|
|
<!-- box / title -->
|
|
|
<div class="title">
|
|
|
${self.breadcrumbs()}
|
|
|
</div>
|
|
|
${h.form(url('auth_settings'))}
|
|
|
<div class="form">
|
|
|
|
|
|
## enabled auth plugins
|
|
|
<h1>${_('Authentication Plugins')}</h1>
|
|
|
<div class="fields">
|
|
|
<div class="field">
|
|
|
<div class="label"><label for="auth_plugins">${_("Enabled Plugins")}</label></div>
|
|
|
<div class="input">${h.text("auth_plugins", class_='large')}
|
|
|
<span class="help-block">${_('Comma separated list of plugins. Order of plugins is also order in which Kallithea will try to authenticate user')}</span>
|
|
|
<div style="padding:10px 0px 10px 0px;font-weight: bold">${_('Available built-in plugins')}</div>
|
|
|
<ul>
|
|
|
%for plugin_path in c.available_plugins:
|
|
|
<li>
|
|
|
<div style="padding:3px 0px 3px 0px">
|
|
|
<span style="margin: 0px 10px 0px 0px" plugin_id="${plugin_path}" class="toggle-plugin btn btn-mini ${'btn-success' if plugin_path in c.enabled_plugins else ''}">
|
|
|
${_('enabled') if plugin_path in c.enabled_plugins else _('disabled')}</span>${plugin_path}
|
|
|
</div>
|
|
|
</li>
|
|
|
%endfor
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
%for cnt, module in enumerate(c.auth_plugins):
|
|
|
<% pluginName = c.auth_plugins_shortnames[module] %>
|
|
|
<h1>${_('Plugin')}: ${pluginName}</h1>
|
|
|
<div class="fields">
|
|
|
## autoform generation, based on plugin definition from it's settings
|
|
|
%for setting in c.plugin_settings[module]:
|
|
|
<% fullsetting = "auth_%s_%s" % (pluginName, setting["name"]) %>
|
|
|
<% displayname = (setting["formname"] if ("formname" in setting) else setting["name"]) %>
|
|
|
%if setting["type"] == "password":
|
|
|
<div class="field">
|
|
|
<div class="label"><label for="${fullsetting}">${_(displayname)}</label></div>
|
|
|
<div class="input">
|
|
|
${h.password(fullsetting,class_='small',autocomplete="off")}
|
|
|
<span class="help-block">${setting["description"]}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
%elif setting["type"] in ["string", "int"]:
|
|
|
<div class="field">
|
|
|
<div class="label"><label for="${fullsetting}">${_(displayname)}</label></div>
|
|
|
<div class="input">
|
|
|
${h.text(fullsetting,class_='small')}
|
|
|
<span class="help-block">${setting["description"]}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
%elif setting["type"] == "bool":
|
|
|
<div class="field">
|
|
|
<div class="label label-checkbox"><label for="${fullsetting}">${_(displayname)}</label></div>
|
|
|
<div class="checkboxes">
|
|
|
<div class="checkbox">${h.checkbox(fullsetting,True,class_='small')}</div>
|
|
|
<span class="help-block">${setting["description"]}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
%elif setting["type"] == "select":
|
|
|
<div class="field">
|
|
|
<div class="label"><label for="${fullsetting}">${_(displayname)}</label></div>
|
|
|
<div class="select">
|
|
|
${h.select(fullsetting,setting['values'][0],setting['values'],class_='small')}
|
|
|
<span class="help-block">${setting["description"]}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
%else:
|
|
|
<div class="field">
|
|
|
<div class="label"><label for="${fullsetting}">${_(displayname)}</label></div>
|
|
|
<div class="input">This field is of type ${setting['type']}, which cannot be displayed. Must be one of [string|int|bool|select].</div>
|
|
|
<span class="help-block">${setting["description"]}</span>
|
|
|
</div>
|
|
|
%endif
|
|
|
%endfor
|
|
|
</div>
|
|
|
%endfor
|
|
|
<div class="fields">
|
|
|
<div class="buttons">
|
|
|
${h.submit('save',_('Save'),class_="btn")}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
${h.end_form()}
|
|
|
</div>
|
|
|
|
|
|
<script>
|
|
|
$('.toggle-plugin').click(function(e){
|
|
|
var $auth_plugins_input = $('#auth_plugins');
|
|
|
var notEmpty = function(element, index, array) {
|
|
|
return (element != "");
|
|
|
}
|
|
|
var elems = $auth_plugins_input.val().split(',').filter(notEmpty);
|
|
|
var $cur_button = $(e.currentTarget);
|
|
|
var plugin_id = $cur_button.attr('plugin_id');
|
|
|
|
|
|
if($cur_button.hasClass('btn-success')){
|
|
|
elems.splice(elems.indexOf(plugin_id), 1);
|
|
|
$auth_plugins_input.val(elems.join(','));
|
|
|
$cur_button.removeClass('btn-success');
|
|
|
$cur_button.html(_TM['disabled']);
|
|
|
}
|
|
|
else{
|
|
|
console.log(elems);
|
|
|
if(elems.indexOf(plugin_id) == -1){
|
|
|
elems.push(plugin_id);
|
|
|
}
|
|
|
$auth_plugins_input.val(elems.join(','));
|
|
|
$cur_button.addClass('btn-success');
|
|
|
$cur_button.html(_TM['enabled']);
|
|
|
}
|
|
|
});
|
|
|
</script>
|
|
|
</%def>
|
|
|
|