mirror of
https://github.com/neovim/neovim.git
synced 2025-09-08 04:18:18 +00:00
feat(secure): add :trust
command and vim.secure.trust() (#21107)
Introduce vim.secure.trust() to programmatically manage the trust database. Use this function in a new :trust ex command which can be used as a simple frontend. Resolves: https://github.com/neovim/neovim/issues/21092 Co-authored-by: Gregory Anders <greg@gpanders.com> Co-authored-by: ii14 <ii14@users.noreply.github.com>
This commit is contained in:
@@ -2217,3 +2217,51 @@ char *nlua_read_secure(const char *path)
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
bool nlua_trust(const char *action, const char *path)
|
||||
{
|
||||
lua_State *const lstate = global_lstate;
|
||||
lua_getglobal(lstate, "vim");
|
||||
lua_getfield(lstate, -1, "secure");
|
||||
lua_getfield(lstate, -1, "trust");
|
||||
|
||||
lua_newtable(lstate);
|
||||
lua_pushstring(lstate, "action");
|
||||
lua_pushstring(lstate, action);
|
||||
lua_settable(lstate, -3);
|
||||
if (path == NULL) {
|
||||
lua_pushstring(lstate, "bufnr");
|
||||
lua_pushnumber(lstate, 0);
|
||||
lua_settable(lstate, -3);
|
||||
} else {
|
||||
lua_pushstring(lstate, "path");
|
||||
lua_pushstring(lstate, path);
|
||||
lua_settable(lstate, -3);
|
||||
}
|
||||
|
||||
if (nlua_pcall(lstate, 1, 2)) {
|
||||
nlua_error(lstate, _("Error executing vim.secure.trust: %.*s"));
|
||||
return false;
|
||||
}
|
||||
|
||||
bool success = lua_toboolean(lstate, -2);
|
||||
const char *msg = lua_tostring(lstate, -1);
|
||||
if (msg != NULL) {
|
||||
if (success) {
|
||||
if (strcmp(action, "allow") == 0) {
|
||||
smsg("Allowed \"%s\" in trust database.", msg);
|
||||
} else if (strcmp(action, "deny") == 0) {
|
||||
smsg("Denied \"%s\" in trust database.", msg);
|
||||
} else if (strcmp(action, "remove") == 0) {
|
||||
smsg("Removed \"%s\" from trust database.", msg);
|
||||
}
|
||||
} else {
|
||||
semsg(e_trustfile, msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Pop return values, "vim" and "secure"
|
||||
lua_pop(lstate, 4);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
Reference in New Issue
Block a user