app/soc/logic/accounts.py
author Sverre Rabbelier <srabbelier@gmail.com>
Sun, 15 Mar 2009 13:15:01 +0000
changeset 1860 26ce742dbb63
parent 1619 66f944747562
child 2345 f78caf12f32d
permissions -rw-r--r--
Added an getAcceptedOrgsRedirect to redirects Patch by: Sverre Rabbelier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
112
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     2
#
1308
35b75ffcbb37 Partially reverted "Update the copyright notice for 2009."
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1307
diff changeset
     3
# Copyright 2008 the Melange authors.
112
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     4
#
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     8
#
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    10
#
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    15
# limitations under the License.
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    16
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 457
diff changeset
    17
"""Basic Google Account and User (Model) query functions.
112
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    18
"""
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    19
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    20
__authors__ = [
229
a46c238be8db Show link to /site/user/list on /site/user/lookup when User is not found.
Todd Larsen <tlarsen@google.com>
parents: 223
diff changeset
    21
  '"Chen Lunpeng" <forever.clp@gmail.com>',
112
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    22
  '"Todd Larsen" <tlarsen@google.com>',
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    23
  '"Sverre Rabbelier" <sverre@rabbelier.nl>',
112
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    24
  ]
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    25
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    26
390
d12c95ade374 Remove unused imports, fix too long lines and indentions.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 355
diff changeset
    27
from google.appengine.api import users
131
Todd Larsen <tlarsen@google.com>
parents: 112
diff changeset
    28
112
4d9895fb15bc Consolidate functions dealing with Google Accounts and look-up of User entities
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    29
1600
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    30
def getCurrentAccount(normalize=True):
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    31
  """Returns an optionally normalized version of the current account.
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    32
  """
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    33
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    34
  account = users.get_current_user()
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    35
  return normalizeAccount(account) if (account and normalize) else account
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    36
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    37
1520
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    38
def normalizeAccount(account):
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    39
  """Returns a normalized version of the specified account.
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    40
  """
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    41
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    42
  normalized = str(account).lower()
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    43
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    44
  if account.email() == normalized:
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    45
    return account
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    46
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    47
  return users.User(email=normalized)
ac407f5b10dc Add a normalizeAccount to logic.accounts
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1519
diff changeset
    48
1547
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    49
def denormalizeAccount(account):
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    50
  """Returns a denormalized version of the specified account.
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    51
  """
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    52
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    53
  if account.email().find('@') != -1:
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    54
    return account
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    55
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    56
  domain = account.auth_domain()
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    57
  denormalized = ''.join([account.email(), '@', domain])
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    58
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    59
  return users.User(email=denormalized)
c8c269ef0498 Added a denormalizeAccount
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1527
diff changeset
    60
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    61
def isDeveloper(account=None):
164
afdf502c6cc4 Documentation updates and one typo fix.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 141
diff changeset
    62
  """Returns True if a Google Account is a Developer with special privileges.
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    63
481
94834a1e6c01 Attempt to rename User.id to User.account, in preparation for making User be
Todd Larsen <tlarsen@google.com>
parents: 457
diff changeset
    64
  Since it only works on the current logged-in user, if account matches the
138
e1167bdf71a4 Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents: 137
diff changeset
    65
  current logged-in Google Account, the App Engine Users API function
e1167bdf71a4 Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents: 137
diff changeset
    66
  user.is_current_user_admin() is checked.  If that returns False, or
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    67
  account is not the currently logged-in user, False is returned.
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    68
138
e1167bdf71a4 Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents: 137
diff changeset
    69
  This solves the "chicken-and-egg" problem of no User entity having its
e1167bdf71a4 Improve the __doc__ string of isIdDeveloper() to explain better how it now
Todd Larsen <tlarsen@google.com>
parents: 137
diff changeset
    70
  is_developer property set, but no one being able to set it.
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    71
131
Todd Larsen <tlarsen@google.com>
parents: 112
diff changeset
    72
  Args:
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    73
    account: a Google Account (users.User) object;
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    74
      if not supplied, the current logged-in user is checked
131
Todd Larsen <tlarsen@google.com>
parents: 112
diff changeset
    75
  """
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 263
diff changeset
    76
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 263
diff changeset
    77
  # Get the currently logged in user
1600
0aa3de1b2acc Fix access bug due to forgotten normalization
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1547
diff changeset
    78
  current = getCurrentAccount()
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 263
diff changeset
    79
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    80
  if current and (not account):
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    81
    # default to the current user
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    82
    account = current
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    83
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    84
  if not account:
137
0f572149449d Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents: 136
diff changeset
    85
    # no Google Account was supplied or is logged in, so an unspecified
0f572149449d Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents: 136
diff changeset
    86
    # User is definitely *not* a Developer
0f572149449d Make isIdDeveloper() also able to check an is_developer Boolean property in
Todd Larsen <tlarsen@google.com>
parents: 136
diff changeset
    87
    return False
131
Todd Larsen <tlarsen@google.com>
parents: 112
diff changeset
    88
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    89
  if (account == current) and users.is_current_user_admin():
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    90
    # the current account should be checked, and it is in the
299
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 263
diff changeset
    91
    # Administration->Developers list in the App Engine console
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 263
diff changeset
    92
    return True
a1cc853a56e5 Refactor nearly all the soc.logic code to use the Base class
Sverre Rabbelier <srabbelier@gmail.com>
parents: 263
diff changeset
    93
1527
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    94
  # account is not current user, or current user is not an admin
0071733da7cd Simplify the account retrieval logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1520
diff changeset
    95
  return False