Exemple #1
0
 def google_auth(self):
     client_id = self.request.get('client_id')
     redirect_uri = self.request.get('redirect_uri')
     state = self.request.get('state')
     id_token = self.request.get('id_token')
     redir_url = user = None
     if client_id == 'google':
         # Part of Google Home / API.AI auth flow
         if redirect_uri == "https://oauth-redirect.googleusercontent.com/r/%s" % secrets.GOOGLE_PROJECT_ID:
             if not user:
                 ok, _email, name = self.validate_google_id_token(id_token)
                 if ok:
                     user = User.GetByEmail(_email, create_if_missing=True, name=name)
             if user:
                 access_token = user.aes_access_token(client_id='google')
                 redir_url = 'https://oauth-redirect.googleusercontent.com/r/%s#' % secrets.GOOGLE_PROJECT_ID
                 redir_url += urllib.urlencode({
                     'access_token': access_token,
                     'token_type': 'bearer',
                     'state': state
                 })
                 self.success = True
         else:
             self.message = "Malformed"
     else:
         self.message = "Malformed"
     self.set_response({'redirect': redir_url}, debug=True)
    def GET(self):

        web.header('Access-Control-Allow-Origin', '*')
        web.header('Access-Control-Allow-Credentials', 'true')

        inputs = web.input()

        # look for existing user by email
        existingUser = User.GetByEmail(inputs.user_email)

        if (existingUser):
            return "User Exists"

        else:  # not existing, create new database record

            newUser = User(user_name=inputs.user_name,
                           user_email=inputs.user_email,
                           user_phone=inputs.user_phone,
                           address_street=inputs.address_street,
                           address_street2=inputs.address_street2,
                           address_city=inputs.address_city,
                           address_state=inputs.address_state,
                           address_zipcode=inputs.address_zipcode)
            newUser.put()

        return "Success"
 def check_login(self, *args, **kwargs):
     d = {
         'SITENAME': SITENAME,
         'TAGLINE': TAGLINE,
         'AUTHOR_NAME': AUTHOR_NAME,
         'YEAR': datetime.now().year,
         'CURTIME': datetime.now()
     }
     allow = False
     handled = False
     user = None
     session = self.session
     if 'user' in session:
         user = session['user']
     if not user and role:
         headers = self.request.headers
         if headers:
             authorization = headers.get('authorization')
             if authorization and authorization.startswith("Basic "):
                 auth_b64 = authorization.replace('Basic ', '')
                 user_pass = base64.b64decode(auth_b64)
                 if user_pass:
                     _user_id, _pass = user_pass.split(':')
                     if _user_id and _pass:
                         if _user_id.isdigit():
                             # Interpret as User ID
                             user = User.get_by_id(int(_user_id))
                         elif '@' in _user_id:
                             # Interpret as user amil
                             user = User.GetByEmail(_user_id)
                         if user and not user.checkPass(_pass):
                             user = None
     if not role:
         allow = True
     elif role == "user":
         if user:
             allow = True
     elif role == "admin":
         if user and user.admin():
             allow = True
     if not handled:
         if allow:
             self.user = d['user'] = user
             d['logout_url'] = "/logout"
             kwargs['d'] = d
             handler_method(self, *args, **kwargs)
         else:
             # Unauthorized
             self.set_response(success=False,
                               message="Unauthorized",
                               status=401)
Exemple #4
0
 def google_login(self):
     from constants import ADMIN_EMAIL
     token = self.request.get('token')
     ok, _email, name = self.validate_google_id_token(token)
     u = None
     if ok:
         u = User.GetByEmail(_email)
         if not u:
             u = User.Create(email=_email, name=name)
             u.put()
         if u:
             self.update_session_user(u)
             self.login_dt = datetime.now()
             self.success = True
             self.message = "Signed in"
     else:
         self.message = "Failed to validate"
     self.set_response({'user': u.json() if u else None})
Exemple #5
0
 def fbook_auth(self):
     id_token = self.request.get('id_token')
     account_linking_token = self.request.get('account_linking_token')
     redirect_uri = self.request.get('redirect_uri')
     res = {}
     user = None
     ok, _email, name = self.validate_google_id_token(id_token)
     if ok:
         user = User.GetByEmail(_email, create_if_missing=True, name=name)
     if user:
         auth_code = user.key.id()
         if redirect_uri:
             redirect_uri += '&authorization_code=%s' % auth_code
             self.success = True
         else:
             self.message = "No redirect URI?"
     else:
         self.message = "User not found"
     res['redirect'] = redirect_uri
     self.set_response(res, debug=True)
    def POST(self):

        web.header('Access-Control-Allow-Origin', '*')
        web.header('Access-Control-Allow-Credentials', 'true')

        userItem = simplejson.loads(web.data())

        existingUser = User.GetByEmail(userItem['user_email'])

        if (existingUser):
            return "{ status: 'Error - User Exists'}"

        else:  # not existing, create new database record
            newUser = User(user_name=userItem['user_name'],
                           user_email=userItem['user_email'],
                           user_phone=userItem['user_phone'],
                           address_street=userItem['address_street'],
                           address_street2=userItem['address_street2'],
                           address_city=userItem['address_city'],
                           address_state=userItem['address_state'],
                           address_zipcode=userItem['address_zipcode'])
            newUser.put()

        return "{ status: 'Success'}"