Add Lua scripting to log out stanza
This commit is contained in:
parent
146924694c
commit
0088ce8a71
54
bbs.c
54
bbs.c
@ -717,11 +717,63 @@ void runbbs_real(int socket, char *ip, int ssh) {
|
||||
// main menu
|
||||
main_menu(user);
|
||||
|
||||
s_displayansi("goodbye");
|
||||
|
||||
dolog("%s is logging out, on node %d", user->loginname, mynode);
|
||||
disconnect("Log out");
|
||||
}
|
||||
|
||||
int do_logout() {
|
||||
char buffer[256];
|
||||
struct stat s;
|
||||
lua_State *L;
|
||||
int ret = 0;
|
||||
char c;
|
||||
int result;
|
||||
int do_internal_logout = 1;
|
||||
|
||||
if (conf.script_path != NULL) {
|
||||
sprintf(buffer, "%s/logout_stanza.lua", conf.script_path);
|
||||
if (stat(buffer, &s) == 0) {
|
||||
L = luaL_newstate();
|
||||
luaL_openlibs(L);
|
||||
lua_push_cfunctions(L);
|
||||
luaL_loadfile(L, buffer);
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
do_internal_logout = 1;
|
||||
lua_close(L);
|
||||
} else {
|
||||
do_internal_logout = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (do_internal_logout == 1) {
|
||||
s_printf(get_string(53));
|
||||
c = s_getc();
|
||||
if (tolower(c) == 'y') {
|
||||
s_displayansi("goodbye");
|
||||
ret = 1;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
} else {
|
||||
lua_getglobal(L, "logout");
|
||||
result = lua_pcall(L, 0, 1, 0);
|
||||
if (result) {
|
||||
dolog("Failed to run script: %s", lua_tostring(L, -1));
|
||||
lua_close(L);
|
||||
return 0;
|
||||
}
|
||||
ret = lua_tointeger(L, -1);
|
||||
lua_pop(L, 1);
|
||||
lua_close(L);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void runbbs(int socket, char *ip) {
|
||||
runbbs_real(socket, ip, 0);
|
||||
}
|
||||
|
1
bbs.h
1
bbs.h
@ -183,6 +183,7 @@ extern char s_getc();
|
||||
extern void disconnect(char *calledby);
|
||||
extern void display_info();
|
||||
extern void display_last10_callers(struct user_record *user);
|
||||
extern int do_logout();
|
||||
|
||||
extern void gen_salt(char **s);
|
||||
extern char *hash_sha256(char *pass, char *salt);
|
||||
|
8
doors.c
8
doors.c
@ -305,12 +305,8 @@ int door_menu(struct user_record *user) {
|
||||
break;
|
||||
case 'g':
|
||||
{
|
||||
s_printf(get_string(53));
|
||||
c = s_getc();
|
||||
if (tolower(c) == 'y') {
|
||||
doquit = 1;
|
||||
dodoors = 1;
|
||||
}
|
||||
doquit = do_logout();
|
||||
dodoors = doquit;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
8
files.c
8
files.c
@ -843,12 +843,8 @@ int file_menu(struct user_record *user) {
|
||||
break;
|
||||
case 'g':
|
||||
{
|
||||
s_printf(get_string(53));
|
||||
c = s_getc();
|
||||
if (tolower(c) == 'y') {
|
||||
dofiles = 1;
|
||||
doquit = 1;
|
||||
}
|
||||
doquit = do_logout();
|
||||
dofiles = doquit;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1774,12 +1774,8 @@ int mail_menu(struct user_record *user) {
|
||||
break;
|
||||
case 'g':
|
||||
{
|
||||
s_printf(get_string(53));
|
||||
c = s_getc();
|
||||
if (tolower(c) == 'y') {
|
||||
domail = 1;
|
||||
doquit = 1;
|
||||
}
|
||||
doquit = do_logout();
|
||||
domail = doquit;
|
||||
}
|
||||
break;
|
||||
case 'e':
|
||||
|
@ -151,11 +151,7 @@ void main_menu(struct user_record *user) {
|
||||
break;
|
||||
case 'g':
|
||||
{
|
||||
s_printf(get_string(53));
|
||||
c = s_getc();
|
||||
if (tolower(c) == 'y') {
|
||||
doquit = 1;
|
||||
}
|
||||
doquit = do_logout();
|
||||
}
|
||||
break;
|
||||
case 't':
|
||||
|
13
scripts_examples/logout_stanza.lua
Normal file
13
scripts_examples/logout_stanza.lua
Normal file
@ -0,0 +1,13 @@
|
||||
function logout()
|
||||
bbs_write_string("\r\n\r\nAre you sure you want to logoff (Y/N) ? ");
|
||||
|
||||
cmd = bbs_read_char();
|
||||
|
||||
if (cmd == 10) then
|
||||
return 0;
|
||||
end
|
||||
|
||||
bbs_display_ansi("goodbye");
|
||||
|
||||
return 1;
|
||||
end
|
Reference in New Issue
Block a user