config-mode, mesh-vpn: refactor key generation
Previously, the config-mode was responsible for generating the fastd secret. This patch sets the default secret to "generate" causing a secret to be generated on its first use (e.g. show_key or start). This also changes the info page (in Expert Mode) to show "n/a" when the public key is not yet available.
This commit is contained in:
		
							parent
							
								
									9510d03b8b
								
							
						
					
					
						commit
						2f5705b5de
					
				| @ -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") | ||||||
|  | |||||||
| @ -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" | ||||||
|  | |||||||
| @ -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 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| @ -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 %> | ||||||
|  | |||||||
| @ -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 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user