]> jfr.im git - irc/quakenet/newserv.git/blob - nterface/nterfacer_spamscan2.c
Merged revisions 303 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 int handle_delchan(struct rline *li, int argc, char **argv);
23
24 struct service_node *s_node;
25
26 void _init(void) {
27 s_node = register_service("S2");
28 if(!s_node)
29 return;
30
31 register_handler(s_node, "getprofile", 1, handle_getprofile);
32 register_handler(s_node, "setprofile", 3, handle_setprofile);
33 register_handler(s_node, "delchan", 1, handle_delchan);
34 }
35
36 void _fini(void) {
37 if(s_node)
38 deregister_service(s_node);
39 }
40
41 int handle_getprofile(struct rline *li, int argc, char **argv) {
42 spamscan_channelsettings *cs;
43
44 if(argv[0][0] != '#')
45 return ri_error(li, ERR_TARGET_NOT_FOUND, "Channel not found");
46
47 cs = spamscan_getchannelsettings(argv[0], 0);
48 if(!cs)
49 return ri_error(li, ERR_CHANNEL_NOT_REGISTERED, "Channel not registered");
50
51 ri_append(li, "%s", cs->cp?cs->cp->profilename:"unknown");
52 ri_append(li, "%s", printflags(cs->flags, s_cfflags));
53 return ri_final(li);
54 }
55
56 int handle_setprofile(struct rline *li, int argc, char **argv) {
57 spamscan_channelsettings *cs;
58 spamscan_channelprofile *cp;
59
60 if(argv[0][0] != '#')
61 return ri_error(li, ERR_TARGET_NOT_FOUND, "Channel not found");
62
63 cs = spamscan_getchannelsettings(argv[0], 0);
64 if(!cs)
65 return ri_error(li, ERR_CHANNEL_NOT_REGISTERED, "Channel not registered");
66
67 cp = spamscan_getchannelprofile(argv[1], 0);
68 if(!cp)
69 return ri_error(li, ERR_PROFILE_DOES_NOT_EXIST, "Profile does not exist");
70
71 if(setflags(&cs->flags, SPAMSCAN_CF_ALL, argv[2], s_cfflags, REJECT_UNKNOWN) != REJECT_NONE)
72 return ri_error(li, ERR_BAD_FLAGS, "Bad flags");
73
74 /* TODO: beat Cruicky till he refactors this functionality */
75 spamscan_checkchannelpresence(findchannel(cs->channelname)); /* what if findchannel returns NULL? */
76 cs->cp = cp;
77 cs->modified = time(NULL);
78 cs->modifiedby = spamscan_getaccountsettings("nterfacer", 0); /* ugly hack, should be 1... */
79 spamscan_updatechanneldb(cs);
80
81 ri_append(li, "Done.");
82 return ri_final(li);
83 }
84
85 int handle_delchan(struct rline *li, int argc, char **argv) {
86 if(argv[0][0] != '#')
87 return ri_error(li, ERR_TARGET_NOT_FOUND, "Channel not found");
88
89 if(spamscan_deletechannelsettings(argv[0]))
90 return ri_error(li, ERR_CHANNEL_NOT_REGISTERED, "Channel not registered");
91
92 ri_append(li, "Done");
93 return ri_final(li);
94 }
95
96