From 1e15bcba4ddca46ededafb5b2fe71381d7c7b107 Mon Sep 17 00:00:00 2001 From: Dain Nilsson Date: Mon, 27 May 2013 14:00:01 +0200 Subject: [PATCH] Added FreeRADIUS daemon status and controls. --- yubiadmin/apps/freerad.py | 41 ++++++++++++++++++++---- yubiadmin/templates/freerad/general.html | 26 ++++++++++++++- 2 files changed, 59 insertions(+), 8 deletions(-) diff --git a/yubiadmin/apps/freerad.py b/yubiadmin/apps/freerad.py index ebb5c21..e56338d 100644 --- a/yubiadmin/apps/freerad.py +++ b/yubiadmin/apps/freerad.py @@ -26,9 +26,9 @@ # POSSIBILITY OF SUCH DAMAGE. from yubiadmin.util.app import App, render -from yubiadmin.util.system import run +from yubiadmin.util.system import run, invoke_rc_d from wtforms import Form -from wtforms.fields import TextField, PasswordField +from wtforms.fields import TextField import os __all__ = [ @@ -38,10 +38,19 @@ __all__ = [ CLIENTS_CONFIG_FILE = '/etc/freeradius/clients.conf' +def is_freerad_running(): + status, _ = run('cat /var/run/freeradius/freeradius.pid | xargs kill -0') + return status == 0 + + class RadTestForm(Form): legend = 'RADIUS test' + description = """ + This utility allows you to test authentication against the RADIUS server + using the credentials entered below. + """ username = TextField('Username') - password = PasswordField('Password') + password = TextField('Password') class FreeRadius(App): @@ -63,12 +72,17 @@ class FreeRadius(App): General """ alerts = [] + form = RadTestForm() + if 'username' in request.params: - username = request.params['username'] - password = request.params.get('password', '') + form.process(request.params) + username = form.username.data + password = form.password.data cmd = 'radtest %s %s localhost 0 testing123' % (username, password) status, output = run(cmd) - alert = {'title': cmd, 'message': '
%s
' % output} + alert = {'title': 'Command: %s' % cmd} + alert['message'] = '
%s
' \ + % output if status == 0: alert['type'] = 'success' elif status == 1: @@ -79,7 +93,8 @@ class FreeRadius(App): 'Exit code: %d' % status alerts.append(alert) - return render('freerad/general', form=RadTestForm(), alerts=alerts) + return render('freerad/general', form=form, alerts=alerts, + running=is_freerad_running()) def clients(self, request): """ @@ -87,4 +102,16 @@ class FreeRadius(App): """ return '' + def server(self, request): + if request.params['server'] == 'toggle': + if is_freerad_running(): + invoke_rc_d('freeradius', 'stop') + else: + invoke_rc_d('freeradius', 'start') + else: + invoke_rc_d('freeradius', 'restart') + + return self.redirect('/%s/general' % self.name) + + app = FreeRadius() diff --git a/yubiadmin/templates/freerad/general.html b/yubiadmin/templates/freerad/general.html index e8dbb63..e8eb3db 100644 --- a/yubiadmin/templates/freerad/general.html +++ b/yubiadmin/templates/freerad/general.html @@ -1,7 +1,31 @@ {% from 'form.html' import form_fieldset %} +{% if running %} + {% set status_cls = 'label label-success' %} + {% set status_txt = 'Running' %} + {% set toggle_txt = 'Stop FreeRADIUS' %} + {% set restart_cls = 'btn' %} +{% else %} + {% set status_cls = 'label label-important' %} + {% set status_txt = 'Not Running' %} + {% set toggle_txt = 'Start FreeRADIUS' %} + {% set restart_cls = 'btn disabled' %} + {% set restart_attrs = 'disabled="disabled"' %} +{% endif %} + +
+ FreeRADIUS Server + Current status: {{ status_txt }} +

+
+ + +
+
+ +
{{ form_fieldset(form) }} - +