1
0
mirror of https://github.com/Yubico/yubiadmin.git synced 2025-02-20 14:54:30 +01:00

Introduced forms.

This commit is contained in:
Dain Nilsson 2013-04-24 14:19:42 +02:00
parent 9dccc5cf01
commit dd1beb1282
9 changed files with 182 additions and 46 deletions

View File

@ -1,7 +1,28 @@
{% extends "content.html" %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
{{ content }}
<div class="navbar">
<div class="navbar-inner">
<ul class="nav">
{% for sect in module.sections %}
<li {% if sect.name == section.name %}class="active"{% endif %}>
<a href="/{{ module.name }}/{{ sect.name }}">{{ sect.title }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
{% if errors %}
<div class="alert alert-error">
<p>Errors:</p>
<ul>
{% for error in errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{{ page }}
{% endblock %}

View File

@ -6,7 +6,7 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>{% block title %}YubiAuth{% endblock %}</title>
<title>{{ title|default('YubiADMIN') }}</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">

View File

@ -15,7 +15,7 @@
<ul class="nav nav-list">
<li class="nav-header">Modules</li>
{% for mod in modules %}
<li {% if mod.name == module.name %}class="active"{% endif %} >
<li {% if module is defined and mod.name == module.name %}class="active"{% endif %} >
<a href="/{{ mod.name }}">{{ mod.title }}</a>
</li>
{% endfor %}
@ -23,24 +23,10 @@
</div>
</div>
<div class="span9">
<div class="navbar">
<div class="navbar-inner">
<a class="brand" href="#">{{ title }}</a>
<ul class="nav">
{% for sect in module.sections %}
<li {% if sect.name == section.name %}class="active"{% endif %}>
<a href="/{{ module.name }}/{{ sect.name }}">{{ sect.title }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
{% block content %}
<p>Stuff goes here</p>
{% endblock %}
</div>
</div>
</div>
<hr>

103
templates/forms.html Normal file
View File

@ -0,0 +1,103 @@
{%- macro form_field_label(field) -%}
<label for="{{ field.id }}">{{ field.label.text }}
{%- if field.flags.required -%}
<abbr title="This field is required!">*</abbr>
{%- endif %}</label>
{% endmacro %}
{%- macro form_field_description(field) -%}
{% if field.description %}
<span class="descr">{{ field.description }}</span>
{% endif %}
{%- endmacro -%}
{%- macro form_field_errors(field) -%}
{% if field.errors %}
<div>
{%- for error in field.errors -%}
<span class="label important">{{ error }}</span>
{%- endfor -%}
</div>
{% endif %}
{%- endmacro -%}
{%- macro form_field_boolean(field) -%}
<div class="input">
<label>
{{ field(**kwargs) }}
<span>{{ field.label.text }}</span>
{{ form_field_description(field) }}
{{ form_field_errors(field) }}
</label>
</div>
{%- endmacro -%}
{%- macro action_buttons(submit_title="Save", cancel_title="Reset form", submit_class="btn-primary") -%}
<div class="form-actions">
<input type="submit" class="btn {{submit_class}}" value="{{submit_title}}">
&nbsp;
<button type="reset" class="btn">{{cancel_title}}</button>
</div>
{%- endmacro -%}
{%- macro form_field(field) -%}
<div class="clearfix">
{% if field.type == 'HiddenField' %}
{{ field() }}
{% else %}
{% if field.type == 'BooleanField' %}
{{ form_field_boolean(field, **kwargs) }}
{% else%}
{{ form_field_label(field) }}
<div class="input" id="{{field.id}}-div">
{% if field.type == 'RadioField' %}
{{ field(class='radio-group', **kwargs) }}
{% else %}
{{ field(**kwargs) }}
{% endif %}
{{ form_field_description(field) }}
{{ form_field_errors(field) }}
</div>
{% endif %}
{% endif %}
</div>
{%- endmacro -%}
{%- macro form_fields(fields, class=None, legend=None) -%}
<fieldset {% if class %}class="{{class}}"{% endif %}>
{% if legend %}
<legend>{{legend}}</legend>
{% endif %}
{% for field in fields %}
{% if field.type == 'HiddenField' %}
{{ field() }}
{% else %}
{{ form_field(field) }}
{% endif %}
{% endfor %}
</fieldset>
{%- endmacro -%}
{%- macro form_fieldset(fieldset) -%}
<fieldset>
{% if fieldset.legend %}
<legend>{{fieldset.legend}}</legend>
{% endif %}
{% for field in fieldset %}
{% if field.type == 'HiddenField' %}
{{ field() }}
{% else %}
{{ form_field(field) }}
{% endif %}
{% endfor %}
</fieldset>
{%- endmacro -%}
{%- macro render_form(fieldsets, action) -%}
<form action="{{ action }}" method="post">
{% for fieldset in fieldsets %}
{{ form_fieldset(fieldset) }}
{% endfor %}
{{ action_buttons() }}
</form>
{%- endmacro -%}

View File

@ -1,3 +1,3 @@
<h2>General settings</h2>
{% from "forms.html" import render_form %}
<p>This is where general settings go.</p>
{{ render_form(fieldsets, '/val/general') }}

View File

@ -0,0 +1,3 @@
<h2>KSM settings</h2>
<p>This is where general settings go.</p>

View File

@ -33,13 +33,17 @@ class YubiAdmin(object):
def __init__(self, env):
self.env = env
self.apps = {}
self.template = env.get_template('app_base.html')
for app in apps:
app_data = inspect_app(app)
self.apps[app_data['name']] = (app, app_data)
self.modules = [data for (_, data) in self.apps.values()]
@cherrypy.expose
def default(self, module_name, section_name=None, **kwargs):
def default(self, module_name=None, section_name=None, **kwargs):
if not module_name:
tmpl = self.env.get_template('index.html')
return tmpl.render(modules=self.modules)
app, module = self.apps[module_name]
if not section_name:
section_name = module['sections'][0]['name']
@ -48,13 +52,19 @@ class YubiAdmin(object):
(module_name, section_name))
section = next(section for section in module['sections']
if section['name'] == section_name)
data = {
'modules': [data for (_, data) in self.apps.values()],
data = app.__getattribute__(section_name)(**kwargs)
page = tmpl.render(**data)
data.update({
'modules': self.modules,
'module': module,
'section': section,
'content': render_section(app, section_name, tmpl, **kwargs)
}
return self.template.render(**data)
'title': '%s - %s' % (module_name, section_name),
'page': page
})
tmpl = env.get_template('app_base.html')
return tmpl.render(**data)
if __name__ == '__main__':
cwd = os.path.dirname(__file__)

View File

@ -11,13 +11,7 @@ class YubikeyKsm(object):
"""
name = 'ksm'
sections = ['general', 'database', 'ksms']
def general(self):
"""
General
"""
return {}
sections = ['database']
def database(self):
"""
@ -25,10 +19,4 @@ class YubikeyKsm(object):
"""
return {}
def ksms(self):
"""
Key Store Modules
"""
return {}
app = YubikeyKsm()

View File

@ -1,23 +1,42 @@
from wtforms import Form, IntegerField
__all__ = [
'app'
]
class MiscForm(Form):
legend = 'Misc'
default_timeout = IntegerField('Default Timeout')
class SyncLevelsForm(Form):
legend = 'Sync Levels'
sync_default = IntegerField('Default')
sync_secure = IntegerField('Secure')
sync_fast = IntegerField('Fast')
class YubikeyVal(object):
"""
YubiKey Validation server
YubiKey Validation Server
YubiKey OTP validation server
"""
name = 'val'
sections = ['general', 'database', 'ksms']
sections = ['general', 'database', 'syncpool', 'ksms']
def general(self):
def general(self, **kwargs):
"""
General
"""
return {}
if kwargs:
# Save
print kwargs
return {
'fieldsets': [SyncLevelsForm(kwargs), MiscForm(kwargs)]
}
def database(self):
"""
@ -25,6 +44,12 @@ class YubikeyVal(object):
"""
return {}
def syncpool(self):
"""
Sync pool
"""
return {}
def ksms(self):
"""
Key Store Modules