summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2014-09-16 00:51:46 +0000
committerTed Trask <ttrask01@yahoo.com>2014-09-16 00:51:46 +0000
commitc91120a07c16044b1073b124646cb812d13e658e (patch)
treee8a1364187af561e4e0bf33c61196668c31005fe
parentdb375e2520b7a79b74e8f6415f055a76e81005d7 (diff)
downloadacf-freeradius3-c91120a07c16044b1073b124646cb812d13e658e.tar.bz2
acf-freeradius3-c91120a07c16044b1073b124646cb812d13e658e.tar.xz
Implement editmacauthfile action
-rw-r--r--freeradius3-controller.lua4
-rw-r--r--freeradius3-editmacauthfile-html.lsp96
-rw-r--r--freeradius3-listmacauthfiles-html.lsp2
-rw-r--r--freeradius3-model.lua38
-rw-r--r--freeradius3.roles4
5 files changed, 138 insertions, 6 deletions
diff --git a/freeradius3-controller.lua b/freeradius3-controller.lua
index a107b21..f268fb4 100644
--- a/freeradius3-controller.lua
+++ b/freeradius3-controller.lua
@@ -54,4 +54,8 @@ function mymodule.listmacauthfiles(self)
return self.model.list_macauth_files()
end
+function mymodule.editmacauthfile(self)
+ return self.handle_form(self, self.model.get_macauth_file, self.model.update_macauth_file, self.clientdata, "Save", "Edit File", "File Saved")
+end
+
return mymodule
diff --git a/freeradius3-editmacauthfile-html.lsp b/freeradius3-editmacauthfile-html.lsp
new file mode 100644
index 0000000..756abf3
--- /dev/null
+++ b/freeradius3-editmacauthfile-html.lsp
@@ -0,0 +1,96 @@
+<% local form, viewlibrary, page_info = ... %>
+<% htmlviewfunctions = require("htmlviewfunctions") %>
+<% html = require("acf.html") %>
+
+<script type="text/javascript">
+ if (typeof jQuery == 'undefined') {
+ document.write('<script type="text/javascript" src="<%= html.html_escape(page_info.wwwprefix) %>/js/jquery-latest.js"><\/script>');
+ }
+</script>
+
+<script type="text/javascript">
+ var editEntry = '<td> \
+ <a href="javascript:;"><img src="<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/actions/list-remove.png" width="16" height="16" title="Remove entry"></a> \
+ </td>';
+ var addEntry = '<tr><td> \
+ <a href="javascript:;"><img src="<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/actions/list-add.png" width="16" height="16" title="Insert entry"></a> \
+ </td></tr>';
+
+ function deleteLine(){
+ $(this).parent().parent().replaceWith();
+ }
+ function addLine(){
+ addLinks($(this).parent().parent().before('<tr><td><input type="text" value=""></td></tr>').prev());
+ }
+ function addLinks(rows){
+ rows.each(function(){
+ $(this).prepend(editEntry);
+ $(this).find("td > a:last").click(deleteLine);
+ $(this).find("input").change(validateLine);
+ });
+ }
+ function validateLine(){
+ var regex = /^[0-9a-f]{12}$/;
+ var text = $(this).val().trim().replace(/[-:\s]/g, "").toLowerCase();
+ if (regex.test(text)) {
+ text = text.match(/.{2}/g).join("-");
+ $(this).val(text);
+ $(this).removeClass("error");
+ } else {
+ $(this).addClass("error");
+ }
+ }
+ function submitFile(){
+ var success = true;
+ var file = "";
+ var lines = $("#entries").find("input").each(function(index){
+ if ($(this).val() == "") {
+ $(this).parent().parent().replaceWith();
+ } else {
+ file = file + $(this).val() + "\n";
+ if ($(this).hasClass("error")) {
+ success = false;
+ }
+ }
+ });
+ $("input[name='filecontent']").val(file);
+ if ( ! success ) {
+ return false;
+ }
+ }
+
+ $(function(){
+ $("#entries").find("td:empty").parent().replaceWith();
+ $("#entries").find("td").contents().each(function(){
+ $(this).replaceWith("<input type='text' value='" + $(this).text() + "'>");
+ });
+ $("#entries").find("input").each(validateLine);
+ addLinks($("#entries").find("tr"));
+ $("#entries").append(addEntry).find("a:last").click(addLine);
+ $("form").submit(submitFile);
+ });
+</script>
+
+<%
+local header_level = htmlviewfunctions.displaysectionstart(cfe({label="Edit MAC Authentication File"}), page_info)
+htmlviewfunctions.displayitem(form.value.filename)
+htmlviewfunctions.displayitem(form.value.filesize)
+htmlviewfunctions.displayitem(form.value.mtime)
+local header_level2 = htmlviewfunctions.displaysectionstart(cfe({label="Entries"}), page_info, htmlviewfunctions.incrementheader(header_level))
+ htmlviewfunctions.displayformstart(form, page_info)
+ form.value.filename.type = "hidden"
+ htmlviewfunctions.displayformitem(form.value.filename, "filename")
+ form.value.filecontent.type = "hidden"
+ htmlviewfunctions.displayformitem(form.value.filecontent, "filecontent")
+%>
+<table id="entries">
+<% for line in string.gmatch(html.html_escape(form.value.filecontent.value), "([^\n]*)\n?") do %>
+ <tr><td><%= line %></td></tr>
+<% end %>
+</table>
+<%
+ htmlviewfunctions.displayinfo(form.value.filecontent)
+ htmlviewfunctions.displayformend(form)
+htmlviewfunctions.displaysectionend(header_level2)
+htmlviewfunctions.displaysectionend(header_level)
+%>
diff --git a/freeradius3-listmacauthfiles-html.lsp b/freeradius3-listmacauthfiles-html.lsp
index a70a207..fcb1363 100644
--- a/freeradius3-listmacauthfiles-html.lsp
+++ b/freeradius3-listmacauthfiles-html.lsp
@@ -35,6 +35,8 @@ end
});
</script>
+<% htmlviewfunctions.displaycommandresults({"editmacauthfile"}, session) %>
+
<% local header_level = htmlviewfunctions.displaysectionstart(cfe({label="MAC Authentication Configuration"}), page_info) %>
<table id="list" class="tablesorter"><thead>
<tr>
diff --git a/freeradius3-model.lua b/freeradius3-model.lua
index df85118..4ec9037 100644
--- a/freeradius3-model.lua
+++ b/freeradius3-model.lua
@@ -17,6 +17,7 @@ local group = "root"
local config
local configtable
+local macauthfiles
-- ################################################################################
-- LOCAL FUNCTIONS
@@ -297,11 +298,14 @@ local update_passwd_entry_private = function(self, entry, create)
end
local get_macauth_files = function()
- local files
+ if macauthfiles then
+ return macauthfiles
+ end
+
local result,errtxt = get_config()
if result then
-- Find the files by searching for modules / files / usersfile where key="%{Calling-Station-Id}"
- files = {}
+ macauthfiles = {}
for i,first in ipairs(configtable) do
if string.find(first.name, "^modules$") then
for j,second in ipairs(first.value) do
@@ -314,7 +318,7 @@ local get_macauth_files = function()
key = true
end
if key and file then
- files[#files+1] = file
+ macauthfiles[#macauthfiles+1] = file
break
end
end
@@ -323,7 +327,19 @@ local get_macauth_files = function()
end
end
end
- return files, errtxt
+ return macauthfiles, errtxt
+end
+
+local is_valid_macauth_filename = function(filename)
+ macauthfiles = macauthfiles or get_macauth_files()
+ if macauthfiles then
+ for i,f in ipairs(macauthfiles) do
+ if filename == f then
+ return true
+ end
+ end
+ end
+ return false
end
-- ################################################################################
@@ -603,4 +619,18 @@ function mymodule.list_macauth_files()
return cfe({ type="structure", value=retval, label="List of Freeradius MAC authentication files", errtxt=errtxt })
end
+function mymodule.get_macauth_file(self, clientdata)
+ local filename = clientdata.filename
+ return modelfunctions.getfiledetails(filename, is_valid_macauth_filename)
+end
+
+function mymodule.update_macauth_file(self, filedetails)
+ local ret = modelfunctions.setfiledetails(self, filedetails, is_valid_macauth_filename)
+ if not ret.errtxt then
+ posix.chmod(filedetails.value.filename.value, "rw-r-----")
+ posix.chown(filedetails.value.filename.value, posix.getpasswd(owner, "uid") or 0, posix.getpasswd(group, "gid") or 0)
+ end
+ return ret
+end
+
return mymodule
diff --git a/freeradius3.roles b/freeradius3.roles
index bd204ac..b159597 100644
--- a/freeradius3.roles
+++ b/freeradius3.roles
@@ -1,3 +1,3 @@
USER=freeradius3:status,freeradius3:startstop,freeradius3:logfile
-EXPERT=freeradius3:listfiles,freeradius3:editfile,freeradius3:createfile,freeradius3:deletefile,freeradius3:listpasswdfiles,freeradius3:viewpasswdfile,freeradius3:editpasswdentry,freeradius3:createpasswdentry,freeradius3:deletepasswdentry,freeradius3:editpasswd,freeradius3:listmacauthfiles
-ADMIN=freeradius3:status,freeradius3:startstop,freeradius3:logfile,freeradius3:listfiles,freeradius3:editfile,freeradius3:createfile,freeradius3:deletefile,freeradius3:listpasswdfiles,freeradius3:viewpasswdfile,freeradius3:editpasswdentry,freeradius3:createpasswdentry,freeradius3:deletepasswdentry,freeradius3:editpasswd,freeradius3:listmacauthfiles
+EXPERT=freeradius3:listfiles,freeradius3:editfile,freeradius3:createfile,freeradius3:deletefile,freeradius3:listpasswdfiles,freeradius3:viewpasswdfile,freeradius3:editpasswdentry,freeradius3:createpasswdentry,freeradius3:deletepasswdentry,freeradius3:editpasswd,freeradius3:listmacauthfiles,freeradius3:editmacauthfile
+ADMIN=freeradius3:status,freeradius3:startstop,freeradius3:logfile,freeradius3:listfiles,freeradius3:editfile,freeradius3:createfile,freeradius3:deletefile,freeradius3:listpasswdfiles,freeradius3:viewpasswdfile,freeradius3:editpasswdentry,freeradius3:createpasswdentry,freeradius3:deletepasswdentry,freeradius3:editpasswd,freeradius3:listmacauthfiles,freeradius3:editmacauthfile