]> jfr.im git - irc/rizon/acid.git/blame - pyva/pyva/src/main/python/pseudoclient/sys_auth.py
Split pyva plugin into pyva.core and pyva.pyva
[irc/rizon/acid.git] / pyva / pyva / src / main / python / pseudoclient / sys_auth.py
CommitLineData
685e346e
A
1import time\r
2from sys_base import *\r
3from core import anope_major\r
4\r
5class Request(object):\r
6 def __init__(self, user, channel, action):\r
7 self.user = user\r
8 self.channel = channel\r
9 self.action = action\r
10 self.time = int(time.time())\r
11\r
12class AuthManager(Subsystem):\r
13 def __init__(self, module):\r
14 Subsystem.__init__(self, module, module.options, 'auth')\r
15 self.requests = {}\r
16\r
17 def request(self, user, channel, action):\r
18 if user in self.requests:\r
19 self.module.notice(user, 'Sorry, you already have a pending request. Please retry later.')\r
20 return\r
21 \r
22 self.requests[user] = Request(user, channel, action)\r
23 \r
24 if anope_major == 1:\r
25 self.module.msg('ChanServ', 'WHY %s %s' % (channel, user))\r
26 elif anope_major == 2:\r
27 self.module.msg('ChanServ', 'STATUS %s %s' % (channel, user))\r
28\r
29 def accept(self, user):\r
30 if not user in self.requests:\r
31 return\r
32\r
33 request = self.requests[user]\r
34 action = request.action\r
35 channel = request.channel\r
36 \r
37 if self.onAccept(user, request, action, channel):\r
38 pass\r
39 elif action == 'request':\r
40 if not channel in self.module.channels:\r
41 self.module.channels.add(channel)\r
42 self.module.notice(user, 'Joined @b%s@b.' % channel)\r
43 elif action == 'remove':\r
44 if self.module.channels.is_valid(channel):\r
45 self.module.channels.remove(channel)\r
46 self.module.notice(user, 'Parted @b%s@b.' % channel)\r
47 else:\r
48 self.module.elog.request('Invalid request. Action: @b%s@b. Channel: @b%s@b. User: @b%s@b.' % (action, channel, user))\r
49 self.module.notice(user, 'Invalid request: @b%s@b.' % action)\r
50 del self.requests[user]\r
51 return\r
52\r
53 self.module.elog.request('Request accepted. Action: @b%s@b. Channel: @b%s@b. User: @b%s@b.' % (action, channel, user))\r
54 del self.requests[user]\r
55\r
56 def onAccept(self, user, request, action, channel):\r
57 return False\r
58\r
59 def reject_not_founder(self, user, channel):\r
60 self.reject(user, 'You are not the channel founder of @b%s@b.' % channel)\r
61 \r
62 def reject_not_registered(self, channel):\r
63 for user in self.requests:\r
64 if self.requests[user].channel == channel:\r
65 self.reject(user, 'Channel @b%s@b is unregistered.' % channel)\r
66 break\r
67\r
68 def reject(self, user, reason = ''):\r
69 if not user in self.requests:\r
70 return\r
71\r
72 request = self.requests[user]\r
73 action = request.action\r
74 channel = request.channel\r
75 self.module.elog.request('Request rejected. Action: @b%s@b. Channel: @b%s@b. User: @b%s@b. Reason: @b%s@b.' % (action, channel, user, reason))\r
76 self.module.notice(user, reason)\r
77 del self.requests[user]\r
78\r
79 def commit(self):\r
80 timeout_time = int(time.time()) - 20\r
81 expired_requests = []\r
82 \r
83 for user in self.requests:\r
84 request = self.requests[user]\r
85 \r
86 if request.time < timeout_time:\r
87 expired_requests.append(user)\r
88 action = request.action\r
89 channel = request.channel\r
90 \r
91 try:\r
92 self.module.elog.request('Request expired. Action: @b%s@b. Channel: @b%s@b. User: @b%s@b.' % (action, channel, user))\r
93 self.module.notice(user, 'Request @b%s@b expired. Please retry later.' % action)\r
94 except Exception, err:\r
95 pass\r
96 \r
97 for user in expired_requests:\r
98 del self.requests[user]\r