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

Added FreeRADIUS daemon status and controls.

This commit is contained in:
Dain Nilsson 2013-05-27 14:00:01 +02:00
parent d3a499a554
commit 1e15bcba4d
2 changed files with 59 additions and 8 deletions

View File

@ -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': '<pre>%s</pre>' % output}
alert = {'title': 'Command: %s' % cmd}
alert['message'] = '<pre style="white-space: pre-wrap;">%s</pre>' \
% 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()

View File

@ -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 %}
<div>
<legend>FreeRADIUS Server</legend>
Current status: <span class="{{ status_cls }}">{{ status_txt }}</span>
</p>
<form action="server" method="post">
<button name="server" value="toggle" class="btn">{{ toggle_txt }}</button>
<button name="server" value="restart" class="{{ restart_cls }}" {{ restart_attrs }}>Restart FreeRADIUS</button>
</form>
</div>
<form action="/freerad/general" method="post">
{{ form_fieldset(form) }}
<input type="submit" class="btn" value="Test" />
<input type="submit" class="btn" value="Authenticate" />
</form>