]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/authcmds/reset.c
Now accounthistory is updated in every function that touches email addresses or passw...
[irc/quakenet/newserv.git] / chanserv / authcmds / reset.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: reset
5 * CMDLEVEL: QCMD_NOTAUTHED
6 * CMDARGS: 2
7 * CMDDESC: Restores the old details on an account after a change.
8 * CMDFUNC: csa_doreset
9 * CMDPROTO: int csa_doreset(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: RESET <username> <code>
11 * CMDHELP: Restores your old email address and password if any of these
12 * CMDHELP: have recently changed, where the following parameters are:
13 * CMDHELP: username - your username
14 * CMDHELP: code - the code received in the RESET email.
15 */
16
17 #include "../chanserv.h"
18 #include "../authlib.h"
19 #include "../../lib/irc_string.h"
20 #include <stdio.h>
21 #include <string.h>
22
23 int csa_doreset(void *source, int cargc, char **cargv) {
24 reguser *rup;
25 nick *sender=source;
26 char newpassword[PASSLEN+1];
27
28 if (cargc<2) {
29 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "reset");
30 return CMD_ERROR;
31 }
32
33 if (!(rup=findreguser(sender, cargv[0])))
34 return CMD_ERROR;
35
36 if(UHasHelperPriv(rup) || (!rup->lockuntil || rup->lockuntil <= time(NULL))) {
37 chanservstdmessage(sender, QM_ACCOUNTNOTLOCKED);
38 return CMD_ERROR;
39 }
40
41 if(strcasecmp(cargv[1], csc_generateresetcode(rup->lockuntil, rup->username))) {
42 chanservstdmessage(sender, QM_BADRESETCODE);
43 return CMD_ERROR;
44 }
45
46 csa_createrandompw(newpassword, PASSLEN);
47
48 if(rup->lastemail) {
49 csdb_accounthistory_insert(sender, rup->password, newpassword, rup->email?rup->email->content:NULL, rup->lastemail->content);
50 if(rup->email)
51 freesstring(rup->email);
52 rup->email=rup->lastemail;
53 rup->lastemail=NULL;
54 } else {
55 csdb_accounthistory_insert(sender, rup->password, newpassword, NULL, NULL);
56 }
57
58 setpassword(rup, newpassword);
59
60 rup->lockuntil=0;
61 cs_log(sender,"RESET OK username %s", rup->username);
62 csdb_updateuser(rup);
63 csdb_createmail(rup, QMAIL_RESET);
64 chanservstdmessage(sender, QM_RESETOK);
65
66 return CMD_OK;
67 }