00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef lint
00021 static const char rcsid[] = "$Id: scriptuser.c,v 1.13 2008-10-17 15:57:43 sven Exp $";
00022 #endif
00023
00024 #include <eggdrop/eggdrop.h>
00025 #include "egg_script_internal.h"
00026
00027 static char *script_uid_to_handle(int uid)
00028 {
00029 user_t *u;
00030
00031 u = user_lookup_by_uid(uid);
00032 if (u) return(u->handle);
00033 return(NULL);
00034 }
00035
00036 static int script_handle_to_uid(user_t *u)
00037 {
00038 if (u) return(u->uid);
00039 return(0);
00040 }
00041
00042 static int script_validhandle(char *handle)
00043 {
00044 if (user_lookup_by_handle(handle)) return(1);
00045 return(0);
00046 }
00047
00048 static int script_validuid(int uid)
00049 {
00050 if (user_lookup_by_uid(uid)) return(1);
00051 return(0);
00052 }
00053
00054 static int script_adduser(char *handle)
00055 {
00056 user_t *u;
00057
00058 u = user_new(handle);
00059 if (!u) return(-1);
00060 return(0);
00061 }
00062
00063 static int script_get_ircmasks(script_var_t *retval, user_t *u)
00064 {
00065 retval->type = SCRIPT_ARRAY | SCRIPT_STRING;
00066 retval->len = u->nircmasks;
00067 retval->value = u->ircmasks;
00068 return(0);
00069 }
00070
00071 static char *script_user_find(char *irchost)
00072 {
00073 user_t *u;
00074
00075 u = user_lookup_by_irchost_nocache(irchost);
00076 if (u) return(u->handle);
00077 return(NULL);
00078 }
00079
00080 static char *script_user_get(int nargs, user_t *u, char *chan, char *setting)
00081 {
00082 char *value;
00083
00084
00085 if (nargs == 2) {
00086 setting = chan;
00087 chan = NULL;
00088 }
00089
00090 user_get_setting(u, chan, setting, &value);
00091 return(value);
00092 }
00093
00094 static int script_user_set(int nargs, user_t *u, char *chan, char *setting, char *value)
00095 {
00096 int i;
00097
00098
00099 if (nargs == 3) {
00100 value = setting;
00101 setting = chan;
00102 chan = NULL;
00103 }
00104
00105 i = user_set_setting(u, chan, setting, value);
00106 return(i);
00107 }
00108
00109 static int script_user_save(char *fname)
00110 {
00111 if (!fname) fname = "_users.xml";
00112 user_save(fname);
00113 return(0);
00114 }
00115
00116 static int script_setflags(user_t *u, char *chan, char *flags)
00117 {
00118 if (!flags) {
00119 flags = chan;
00120 chan = NULL;
00121 }
00122
00123 user_set_flags_str(u, chan, flags);
00124 return(0);
00125 }
00126
00127 static char *script_getflags(user_t *u, char *chan)
00128 {
00129 flags_t flags;
00130 char flagstr[64];
00131
00132 if (user_get_flags(u, chan, &flags)) return(NULL);
00133 flag_to_str(&flags, flagstr);
00134 return strdup(flagstr);
00135 }
00136
00137 static int script_matchflags(void *client_data, user_t *u, char *chan, char *flagstr)
00138 {
00139 flags_t flags_left, flags_right;
00140 int r = 0;
00141
00142 if (!flagstr) {
00143 flagstr = chan;
00144 chan = NULL;
00145 }
00146 if (user_get_flags(u, chan, &flags_right)) return(0);
00147 flag_from_str(&flags_left, flagstr);
00148
00149 switch ((int)client_data) {
00150 case 0:
00151
00152 r = flag_match_subset(&flags_left, &flags_right);
00153 break;
00154 case 1:
00155
00156 r = flag_match_partial(&flags_left, &flags_right);
00157 break;
00158 }
00159 return(r);
00160 }
00161
00162 script_command_t script_new_user_cmds[] = {
00163 {"user", "uid_to_handle", script_uid_to_handle, NULL, 1, "i", "uid", SCRIPT_STRING, 0},
00164 {"user", "handle_to_uid", script_handle_to_uid, NULL, 1, "U", "handle", SCRIPT_INTEGER, 0},
00165 {"user", "validhandle", script_validhandle, NULL, 1, "s", "handle", SCRIPT_INTEGER, 0},
00166 {"user", "validuid", script_validuid, NULL, 1, "i", "uid", SCRIPT_INTEGER, 0},
00167 {"user", "add", script_adduser, NULL, 1, "s", "handle", SCRIPT_INTEGER, 0},
00168 {"user", "delete", user_delete, NULL, 1, "U", "user", SCRIPT_INTEGER, 0},
00169 {"user", "addmask", user_add_ircmask, NULL, 2, "Us", "user ircmask", SCRIPT_INTEGER, 0},
00170 {"user", "getmasks", script_get_ircmasks, NULL, 1, "U", "user", 0, SCRIPT_PASS_RETVAL},
00171 {"user", "delmask", user_del_ircmask, NULL, 2, "Us", "user ircmask", SCRIPT_INTEGER, 0},
00172 {"user", "find", script_user_find, NULL, 1, "s", "irchost", SCRIPT_STRING, 0},
00173 {"user", "get", script_user_get, NULL, 2, "Uss", "user ?channel? setting", SCRIPT_STRING, SCRIPT_VAR_ARGS | SCRIPT_PASS_COUNT},
00174 {"user", "set", script_user_set, NULL, 3, "Usss", "user ?channel? setting value", SCRIPT_INTEGER, SCRIPT_VAR_ARGS | SCRIPT_PASS_COUNT},
00175 {"user", "getflags", script_getflags, NULL, 1, "Us", "user ?chan?", SCRIPT_STRING | SCRIPT_FREE, SCRIPT_VAR_ARGS},
00176 {"user", "setflags", script_setflags, NULL, 2, "Uss", "user ?chan? flags", SCRIPT_INTEGER, SCRIPT_VAR_ARGS},
00177 {"user", "matchflags", script_matchflags, 0, 2, "Uss", "user ?chan? flags", SCRIPT_INTEGER, SCRIPT_VAR_ARGS | SCRIPT_PASS_CDATA},
00178 {"user", "matchflags_or", script_matchflags, (void *)1, 2, "Uss", "user ?chan? flags", SCRIPT_INTEGER, SCRIPT_VAR_ARGS | SCRIPT_PASS_CDATA},
00179 {"user", "load", user_save, NULL, 0, "s", "?fname?", SCRIPT_INTEGER, SCRIPT_VAR_ARGS},
00180 {"user", "save", script_user_save, NULL, 0, "s", "?fname?", SCRIPT_INTEGER, SCRIPT_VAR_ARGS},
00181 {"user", "haspass", user_has_pass, NULL, 1, "U", "user", SCRIPT_INTEGER, 0},
00182 {"user", "checkpass", user_check_pass, NULL, 2, "Us", "user pass", SCRIPT_INTEGER, 0},
00183 {"user", "setpass", user_set_pass, NULL, 2, "Us", "user pass", SCRIPT_INTEGER, 0},
00184 {0}
00185 };