Merge pull request #53 from freifunk-gluon/fastd-key-generate

config-mode, mesh-vpn: refactor key generation
This commit is contained in:
Nils Schneider 2014-08-04 20:32:03 +02:00
commit a7a8f37308
5 changed files with 22 additions and 38 deletions

View File

@ -48,13 +48,13 @@ function index()
end end
function action_reboot() function action_reboot()
local configmode = require "luci.tools.gluon-config-mode" local util = require "luci.util"
local pubkey local pubkey
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local meshvpn_enabled = uci:get("fastd", meshvpn_name, "enabled", "0") local meshvpn_enabled = uci:get("fastd", meshvpn_name, "enabled", "0")
local sysconfig = require 'gluon.sysconfig' local sysconfig = require 'gluon.sysconfig'
if meshvpn_enabled == "1" then if meshvpn_enabled == "1" then
pubkey = configmode.get_fastd_pubkey(meshvpn_name) pubkey = util.exec("/etc/init.d/fastd show_key " .. meshvpn_name)
end end
uci:set("gluon-setup-mode", uci:get_first("gluon-setup-mode", "setup_mode"), "configured", "1") uci:set("gluon-setup-mode", uci:get_first("gluon-setup-mode", "setup_mode"), "configured", "1")

View File

@ -1,11 +1,7 @@
local configmode = require "luci.tools.gluon-config-mode"
local meshvpn_name = "mesh_vpn" local meshvpn_name = "mesh_vpn"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local f, s, o local f, s, o
-- prepare fastd key as early as possible
configmode.setup_fastd_secret(meshvpn_name)
f = SimpleForm("wizard") f = SimpleForm("wizard")
f.reset = false f.reset = false
f.template = "gluon-config-mode/cbi/wizard" f.template = "gluon-config-mode/cbi/wizard"

View File

@ -1,29 +0,0 @@
local luci = require "luci"
local io = require "io"
module "luci.tools.gluon-config-mode"
function setup_fastd_secret(name)
local uci = luci.model.uci.cursor()
local secret = uci:get("fastd", name, "secret")
if not secret or not secret:match("%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x") then
local f = io.popen("fastd --generate-key --machine-readable", "r")
local secret = f:read("*a")
f:close()
uci:set("fastd", name, "secret", secret)
uci:save("fastd")
uci:commit("fastd")
end
end
function get_fastd_pubkey(name)
local f = io.popen("/etc/init.d/fastd show_key " .. name, "r")
local key = f:read("*a")
f:close()
return key
end

View File

@ -25,12 +25,16 @@
version = util.trim(fs.readfile('/lib/gluon/gluon-version')), version = util.trim(fs.readfile('/lib/gluon/gluon-version')),
release = util.trim(fs.readfile('/lib/gluon/release')), release = util.trim(fs.readfile('/lib/gluon/release')),
site = site.site_name, site = site.site_name,
pubkey = 'n/a',
} }
local meshvpn_enabled = uci:get("fastd", "mesh_vpn", "enabled", "0")
if meshvpn_enabled == "1" then
local pubkey = util.trim(util.exec('/etc/init.d/fastd show_key mesh_vpn')) local pubkey = util.trim(util.exec('/etc/init.d/fastd show_key mesh_vpn'))
if pubkey ~= '' then if pubkey ~= '' then
values.pubkey = pubkey values.pubkey = pubkey
end end
end
-%> -%>
<h2>Info</h2> <h2>Info</h2>
<% for _, key in ipairs({'hostname', 'primary_mac', 'model', 'version', 'release', 'site', 'pubkey'}) do %> <% for _, key in ipairs({'hostname', 'primary_mac', 'model', 'version', 'release', 'site', 'pubkey'}) do %>

View File

@ -0,0 +1,13 @@
#!/usr/bin/lua
local uci = require 'luci.model.uci'
local c = uci.cursor()
local secret = c:get("fastd", "mesh_vpn", "secret")
if not secret or not secret:match(("%x"):rep(64)) then
c:set("fastd", "mesh_vpn", "secret", "generate")
c:save("fastd")
c:commit("fastd")
end