]> jfr.im git - irc/quakenet/newserv.git/blob - nterface/nterfacer_spamscan2.c
Merged revisions 297 via svnmerge from
[irc/quakenet/newserv.git] / nterface / nterfacer_spamscan2.c
1 /*
2 nterfacer spamscan2 module
3 Copyright (C) 2005 Chris Porter.
4
5 */
6
7 #include "../localuser/localuserchannel.h"
8 #include "../channel/channel.h"
9
10 #include "../spamscan2/spamscan2.h"
11
12 #include "library.h"
13 #include "nterfacer.h"
14
15 #define ERR_TARGET_NOT_FOUND 0x01
16 #define ERR_CHANNEL_NOT_REGISTERED 0x02
17 #define ERR_PROFILE_DOES_NOT_EXIST 0x03
18 #define ERR_BAD_FLAGS 0x04
19
20 int handle_getprofile(struct rline *li, int argc, char **argv);
21 int handle_setprofile(struct rline *li, int argc, char **argv);
22
23 struct service_node *s_node;
24
25 void _init(void) {
26 s_node = register_service("S");
27 if(!s_node)
28 return;
29
30 register_handler(s_node, "getprofile", 1, handle_getprofile);
31 register_handler(s_node, "setprofile", 3, handle_setprofile);
32 }
33
34 void _fini(void) {
35 if(s_node)
36 deregister_service(s_node);
37 }
38
39 int handle_getprofile(struct rline *li, int argc, char **argv) {
40 spamscan_channelsettings *cs;
41
42 if(argv[0][0] != '#')
43 return ri_error(li, ERR_TARGET_NOT_FOUND, "Channel not found");
44
45 cs = spamscan_getchannelsettings(argv[0], 0);
46 if(!cs)
47 return ri_error(li, ERR_CHANNEL_NOT_REGISTERED, "Channel not registered");
48
49 ri_append(li, "%s,%s", cs->cp?cs->cp->profilename:"unknown", printflags(cs->flags, s_cfflags));
50 return ri_final(li);
51 }
52
53 int handle_setprofile(struct rline *li, int argc, char **argv) {
54 spamscan_channelsettings *cs;
55 spamscan_channelprofile *cp;
56
57 if(argv[0][0] != '#')
58 return ri_error(li, ERR_TARGET_NOT_FOUND, "Channel not found");
59
60 cs = spamscan_getchannelsettings(argv[0], 0);
61 if(!cs)
62 return ri_error(li, ERR_CHANNEL_NOT_REGISTERED, "Channel not registered");
63
64 cp = spamscan_getchannelprofile(argv[1], 0);
65 if(!cp)
66 return ri_error(li, ERR_PROFILE_DOES_NOT_EXIST, "Profile does not exist");
67
68 if(setflags(&cs->flags, SPAMSCAN_CF_ALL, argv[2], s_cfflags, REJECT_UNKNOWN) != REJECT_NONE)
69 return ri_error(li, ERR_BAD_FLAGS, "Bad flags");
70
71 /* TODO: beat Cruicky till he refactors this functionality */
72 spamscan_checkchannelpresence(findchannel(cs->channelname)); /* what if findchannel returns NULL? */
73 cs->cp = cp;
74 cs->modified = time(NULL);
75 cs->modifiedby = spamscan_getaccountsettings("nterfacer", 1);
76 spamscan_updatechanneldb(cs);
77
78 ri_append(li, "Done.");
79 return ri_final(li);
80 }
81