1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #!/usr/bin/env lua
- local json = require "luci.jsonc"
- local fs = require "nixio.fs"
- local function readfile(path)
- if fs.stat(path, "type") == "reg" then
- local s = fs.readfile(path)
- return s and (s:gsub("^%s+", ""):gsub("%s+$", ""))
- else
- return null
- end
- end
- local function writefile(path, data)
- local n = fs.writefile(path, data)
- return (n == #data)
- end
- local function parseInput()
- local parse = json.new()
- local done, err
- while true do
- local chunk = io.read(4096)
- if not chunk then
- break
- elseif not done and not err then
- done, err = parse:parse(chunk)
- end
- end
- if not done then
- print(json.stringify({ error = err or "Incomplete input" }))
- os.exit(1)
- end
- return parse:get()
- end
- if arg[1] == "list" then
- print(json.stringify({
- getCertificates = {
- interface = "interface"
- },
- setCertificates = {
- interface = "interface",
- user_cert = "user_cert",
- user_key = "user_key",
- ca_file = "ca_file"
- }
- }))
- elseif arg[1] == "call" then
- local args = parseInput()
- if not args.interface or
- type(args.interface) ~= "string" or
- not args.interface:match("^[a-zA-Z0-9_]+$")
- then
- print(json.stringify({ error = "Invalid interface name" }))
- os.exit(1)
- end
- local user_cert_pem = string.format("/etc/openfortivpn/user-cert-%s.pem", args.interface)
- local user_key_pem = string.format("/etc/openfortivpn/user-key-%s.pem", args.interface)
- local ca_file_pem = string.format("/etc/openfortivpn/ca-%s.pem", args.interface)
- if arg[2] == "getCertificates" then
- print(json.stringify({
- user_cert = readfile(user_cert_pem),
- user_key = readfile(user_key_pem),
- ca_file = readfile(ca_file_pem)
- }))
- elseif arg[2] == "setCertificates" then
- if args.user_cert then
- writefile(user_cert_pem, args.user_cert)
- end
- if args.user_key then
- writefile(user_key_pem, args.user_key)
- end
- if args.ca_file then
- writefile(ca_file_pem, args.ca_file)
- end
- print(json.stringify({ result = true }))
- end
- end
|