~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/apps/userservice/__init__.py

  • Committer: mattgiuca
  • Date: 2008-02-15 07:14:52 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:478
scripts/usrmgr-server: Renamed actions from dashes to underscores.
    (Consistency).
    accept_user returns a dict instead of None.

apps.py: Turned off auth for userservice (otherwise requests can't come thru
    from a user who is not activated; dispatch blocks such requests).
    Userservice does its own auth from now on.

userservice: Now makes the call to usrmgt-server for accept_me.
    Does authentication (since we can't do it at dispatch level).

tos.js: Clicking Accept now makes an Ajax call to userservice to get the
    account activated.

WHAT WORKS: Clicking the button now gets the account activated. There are some
    rough edges and errors won't be handled well.
WHAT DOESN'T: After clicking, the user is left thinking that nothing happened.
    They have to log out and back in again to enable themselves.
    (This is noted in the bug tracker).

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
# Author: Matt Giuca
20
20
# Date: 14/2/2008
21
21
 
 
22
# Provides an Ajax service for handling user management requests.
 
23
# This includes when a user logs in for the first time.
 
24
 
 
25
# NOTE: This app does NOT require authentication. This is because otherwise it
 
26
# would be blocked from receiving requests to activate when the user is trying
 
27
# to accept the TOS.
 
28
 
 
29
# It must do its own authentication and authorization.
 
30
 
22
31
import os
23
32
import sys
24
33
 
25
34
import cjson
26
35
 
27
 
from common import (util, chat)
 
36
import common
 
37
from common import (util, chat, caps)
28
38
import conf
29
39
 
30
40
# TODO: Config these in setup.py
38
48
 
39
49
def handle(req):
40
50
    """Handler for the Console Service AJAX backend application."""
 
51
    if req.username is None:
 
52
        # Not logged in
 
53
        req.throw_error(req.HTTP_FORBIDDEN)
41
54
    if len(req.path) > 0 and req.path[-1] == os.sep:
42
55
        path = req.path[:-1]
43
56
    else:
44
57
        path = req.path
45
58
    # The path determines which "command" we are receiving
46
 
    if req.path == "createme":
47
 
        handle_createme(req)
 
59
    if req.path == "activate_me":
 
60
        handle_activate_me(req)
48
61
    else:
49
62
        req.throw_error(req.HTTP_BAD_REQUEST)
50
63
 
51
 
def handle_createme(req):
 
64
def handle_activate_me(req):
52
65
    """Create the jail, svn, etc, for the currently logged in user (this is
53
66
    put in the queue for usermgt to do).
54
67
    This will block until usermgt returns, which could take seconds to minutes
66
79
    "accepting" the terms - at least this way requires them to acknowledge
67
80
    their acceptance). It must only be called through a POST request.
68
81
    """
69
 
    if req.method != "POST":
70
 
        req.throw_error(req.HTTP_BAD_REQUEST)
71
 
    fields = req.get_fieldstorage()
 
82
    db = common.db.DB()
 
83
 
72
84
    try:
73
 
        declaration = fields.getfirst('declaration')
74
 
    except AttributeError:
75
 
        req.throw_error(req.HTTP_BAD_REQUEST)
76
 
    if declaration != USER_DECLARATION:
77
 
        req.throw_error(req.HTTP_BAD_REQUEST)
78
 
 
79
 
    # Get the arguments for usermgt.create_user from the session
80
 
    # (The user must have already logged in to use this app)
81
 
    session = req.get_session()
82
 
    args = {
83
 
        "username": session['login_name'],
84
 
        "uid": session['unixid'],
85
 
    }
86
 
    msg = {'create_user': args}
87
 
 
88
 
    response = chat.chat(USERMGT_HOST, USERMGT_PORT, msg, USERMGT_MAGIC,
89
 
        decode = False)
90
 
    req.content_type = "text/plain"
91
 
    req.write(response)
92
 
 
 
85
        if req.method != "POST":
 
86
            req.throw_error(req.HTTP_BAD_REQUEST)
 
87
        fields = req.get_fieldstorage()
 
88
        try:
 
89
            declaration = fields.getfirst('declaration')
 
90
        except AttributeError:
 
91
            req.throw_error(req.HTTP_BAD_REQUEST)
 
92
        if declaration != USER_DECLARATION:
 
93
            req.throw_error(req.HTTP_BAD_REQUEST)
 
94
 
 
95
        # TODO: Check the DB that the user's status is "no_agreement".
 
96
        # (Both to avoid redundant calls, and to stop disabled users from
 
97
        # re-enabling their accounts).
 
98
 
 
99
        # Get the arguments for usermgt.create_user from the session
 
100
        # (The user must have already logged in to use this app)
 
101
        session = req.get_session()
 
102
        args = {
 
103
            "login": req.username,
 
104
        }
 
105
        msg = {'activate_user': args}
 
106
 
 
107
        response = chat.chat(USERMGT_HOST, USERMGT_PORT, msg, USERMGT_MAGIC,
 
108
            decode = False)
 
109
        # TODO: Figure out a way to let the user be "enabled" in this session.
 
110
        # (Would require a write to the session?)
 
111
        req.content_type = "text/plain"
 
112
        req.write(response)
 
113
    finally:
 
114
        db.close()