Exemplo n.º 1
0
def social_login():
    """
	Login via google
	With the id token get user details, if the user does not 
	exist then create it. If the user is coming back then just save the id token 
	Then make a token and send it to the client
	"""
    post = Utils.parse_json(request)
    id_token = post['id_token']

    url = 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=%s' % id_token

    try:
        result = urlfetch.fetch(url)
        if result.status_code == 200:
            result = json.loads(result.content)
            name = result['name']
            email = result['email']
            picture = result['picture']
        else:
            error = 'Status code: {} , Response: {}'.format(
                result.status_code, result.content)
            logging.error(error)
            return Respond.error('Error getting user info from google.')
    except urlfetch.Error:
        logging.exception('Caught exception fetching url')
        return Respond.error('Error getting user info from google.')

    users = User.query(User.email == email).fetch()

    if len(users) > 1:
        return Respond.error("There was an error", error_code=422)

    elif len(users) == 1:
        # User already exists. Just make a token and return
        user = users[0]

        # Make token
        token = user.make_token()

        # Respond with user and token
        return Respond.success({"token": token, "user": user.as_dict()})
    else:
        # New User. Create and send token
        user = User(name=name, email=email, picture_uri=picture)
        user.put()

        # Make token
        token = user.make_token()

        # Respond with user and token
        return Respond.success({"token": token, "user": user.as_dict()})
Exemplo n.º 2
0
def admin_register(user):
    """
	Get the post variables and register the user
	:return: User token
	"""
    # parse the json request
    post = Utils.parse_json(request)

    # Check if basic account info is in the post
    if 'name' not in post or 'email' not in post or 'password' not in post:
        return Respond.error("Validation Error", error_code=422)

    # Check if email has not registered before
    if User.query(User.email == post['email']).count() > 0:
        return Respond.error("User account with this email already registered",
                             401)

    # Create a user model
    user = User(name=post['name'],
                email=post['email'],
                password=User.hash_password(post['password']),
                type=post['type'])

    # Add other properties of the user if sent
    if 'year' in post:
        user.year = post['year']
    if 'course' in post:
        user.course = post['course']
    if 'college' in post:
        user.college = post['college']
    if 'picture_uri' in post:
        user.picture_uri = post['picture_uri']

    # Save the user
    user.put()

    # Make a token for the user
    token = user.make_token()

    # Respond with the token
    return Respond.success({"token": token, "user": user.as_dict()})