~habnabit/+junk/descbot-mysql

« back to all changes in this revision

Viewing changes to descbot.py

  • Committer: Aaron Gallagher
  • Date: 2009-12-16 08:27:25 UTC
  • Revision ID: habnabit@gmail.com-20091216082725-evov42kbmy9vm3vt
Should be just about working now!

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
    SELECT   description 
35
35
    FROM     descriptions 
36
36
    WHERE    username = ?
37
 
    ORDER BY updated ASC 
 
37
    ORDER BY updated DESC 
38
38
    LIMIT    1
39
39
"""
40
40
 
45
45
"""
46
46
 
47
47
GET_DESCRIPTIONS = """
48
 
    SELECT   username, updated 
 
48
    SELECT   username, MAX(updated)
49
49
    FROM     descriptions 
50
50
    GROUP BY username 
51
 
    HAVING   updated = MAX(updated)
 
51
    ORDER BY username ASC
52
52
"""
53
53
 
54
54
GET_PASSWORD = """
121
121
            self.notice(nick, 'you are not registered!')
122
122
            return
123
123
        salted = results[0][0]
124
 
        if salted != salthash(passwd, salted):
 
124
        if salted != salthash(passwd.encode(), salted):
125
125
            self.notice(nick, "password doesn't match")
126
126
            return
127
127
        if not data:
181
181
        self.doPage(request)
182
182
        return server.NOT_DONE_YET
183
183
 
 
184
class DescSetterResource(Resource):
 
185
    isLeaf = True
 
186
    allowedMethods = 'GET', 'POST'
 
187
    def __init__(self, lookup, dbpool):
 
188
        self.lookup, self.dbpool = lookup, dbpool
 
189
        Resource.__init__(self)
 
190
    
 
191
    @defer.inlineCallbacks
 
192
    def doPage(self, request):
 
193
        username = request.args.get('username', ['']).pop()
 
194
        passwd = request.args.get('passwd', ['']).pop()
 
195
        description = request.args.get('description', ['']).pop()
 
196
        results = yield self.dbpool.runQuery(
 
197
            GET_PASSWORD, (username,))
 
198
        if not results:
 
199
            message = 'Invalid username or password.'
 
200
        else:
 
201
            salted = results[0][0]
 
202
            if salted != salthash(passwd.encode(), salted):
 
203
                message = 'Invalid username or password.'
 
204
            else:
 
205
                if not description:
 
206
                    description = None
 
207
                else:
 
208
                    description = description.decode('utf-8', 'replace')
 
209
                yield self.dbpool.runOperation(
 
210
                    SET_DESCRIPTION, (username, description, time.time()))
 
211
                message = "Description set for '%s'." % username
 
212
        tmpl = self.lookup.get_template('postset.html')
 
213
        request.write(tmpl.render(message=message))
 
214
        request.finish()
 
215
    
 
216
    def render_POST(self, request):
 
217
        request.setHeader('Content-type', 'text/html; charset=utf-8')
 
218
        self.doPage(request)
 
219
        return server.NOT_DONE_YET
 
220
    
 
221
    def render_GET(self, request):
 
222
        request.setHeader('Content-type', 'text/html; charset=utf-8')
 
223
        tmpl = self.lookup.get_template('set.html')
 
224
        return tmpl.render()
 
225
 
184
226
class StaticTemplateResource(Resource):
185
227
    isLeaf = True
186
228
    def __init__(self, lookup, name):
203
245
            static.File(options.at('web', 'static')))
204
246
        self.root_resource.putChild('desc', 
205
247
            DescMapperResource(self.lookup, dbpool))
 
248
        self.root_resource.putChild('set', 
 
249
            DescSetterResource(self.lookup, dbpool))
206
250
        self.root_resource.putChild('', 
207
251
            StaticTemplateResource(self.lookup, 'index.html'))
208
252