Beispiel #1
0
 def callback(self, provider, action):
     # get required params
     if provider == 'local':
         data = self.request.json
         if not all_in(data, 'username', 'email', 'password'):
             return {'error': 'form_incomplete'}, UNAUTHORIZED
         key = data['password']
         email = data['email']
         name = data['username']
     # find / create user
     db = Db()
     user = db.query(User) \
         .filter((User.email == email) | (User.name == name)) \
         .first()
     if user and provider == 'local':
         return {'error': "user_exists"}, UNAUTHORIZED
     elif not user:
         try:
             user = User(email=email, name=name)
         except AssertionError:
             return {'error': "invalid_user"}, UNAUTHORIZED
         db.add(user)
         db.commit()
     # create / update passport
     passport = db.query(Passport).filter_by(user_id=user.id, provider=provider).first()
     if not passport:
         passport = Passport(user_id=user.id, provider=provider)
         db.add(passport)
     try:
         passport.key = key
     except AssertionError:
         db.delete(user)
         return {'error': "invalid_password"}, UNAUTHORIZED
     db.commit()
     return self.authorize(user)
Beispiel #2
0
 def provider(self, provider):
     if provider == 'local':
         data = self.request.json
         if not all_in(data, 'identifier', 'password'):
             return {'error': 'form_incomplete'}, UNAUTHORIZED
         key = data['password']
         identifier = data['identifier']
     # find user
     db = Db()
     user = db.query(User) \
         .filter((User.email == identifier) | (User.name == identifier)) \
         .join(User.passports, aliased=True) \
         .filter_by(provider=provider) \
         .first()
     if not user:
         return {'error': 'invalid_user'}, UNAUTHORIZED
     # check passport
     if len(user.passports) < 1:
         return {'error': 'no_local_passport'}, UNAUTHORIZED
     passport = user.passports[0]
     if not passport.key_matches(key):
         return {'error': 'password_wrong'}, UNAUTHORIZED
     return self.authorize(user)