Merge pull request #5400 from systemcrash/wg_pubkey

luci-proto-wireguard: display interface public key
This commit is contained in:
Florian Eckert 2021-11-30 14:10:19 +01:00 committed by GitHub
commit a1723c2272
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 1 deletions

View file

@ -11,6 +11,13 @@ var generateKey = rpc.declare({
expect: { keys: {} }
});
var getPublicAndPrivateKeyFromPrivate = rpc.declare({
object: 'luci.wireguard',
method: 'getPublicAndPrivateKeyFromPrivate',
params: ['privkey'],
expect: { keys: {} }
});
var generateQrCode = rpc.declare({
object: 'luci.wireguard',
method: 'generateQrCode',
@ -88,14 +95,34 @@ return network.registerProtocol('wireguard', {
o.validate = validateBase64;
o.rmempty = false;
var sections = uci.sections('network');
var serverName = this.getIfname();
var server = findSection(sections, serverName);
o = s.taboption('general', form.Value, 'public_key', _('Public Key'), _('Base64-encoded public key of this interface for sharing.'));
o.rmempty = false;
o.write = function() {/* write nothing */};
o.load = function(s) {
return getPublicAndPrivateKeyFromPrivate(server.private_key).then(
function(keypair) {
return keypair.pub || '';
},
function(error){
return _('Error getting PublicKey');
}, this)
};
o = s.taboption('general', form.Button, 'generate_key', _('Generate Key'));
o.inputstyle = 'apply';
o.onclick = ui.createHandlerFn(this, function(section_id, ev) {
return generateKey().then(function(keypair) {
var keyInput = document.getElementById('widget.cbid.network.%s.private_key'.format(section_id)),
changeEvent = new Event('change');
changeEvent = new Event('change'),
pubKeyInput = document.getElementById('widget.cbid.network.%s.public_key'.format(section_id));
keyInput.value = keypair.priv || '';
pubKeyInput.value = keypair.pub || '';
keyInput.dispatchEvent(changeEvent);
});
}, s.section);

View file

@ -16,6 +16,14 @@ local methods = {
return {keys = {priv = prv, pub = pub}}
end
},
getPublicAndPrivateKeyFromPrivate = {
args = {privkey = "privkey"},
call = function(args)
local pubkey = sys.exec("echo %s | wg pubkey 2>/dev/null" % util.shellquote(args.privkey)):sub(1, -2)
return {keys = {priv = args.privkey, pub = pubkey}}
end
},
generateQrCode = {
args = {privkey = "privkey", psk = "psk", allowed_ips = {"allowed_ips"}},
call = function(args)

View file

@ -5,6 +5,7 @@
"ubus": {
"luci.wireguard": [
"generateKeyPair",
"getPublicAndPrivateKeyFromPrivate",
"generateQrCode"
]
}