Exemplo n.º 1
0
def get_user(headers):
    current_user = get_endpoints_current_user(raise_unauthorized=False)
    user = None
    if current_user is None:
        credential_pair = get_credential(headers)
        email = credential_pair[0]
        validate_email(email)
        User.authenticate(credential_pair[0], md5(credential_pair[1]))
        user = User.find_user_by_email(email)
    else:
        user = User.find_user_by_email(current_user.email())
    return user
Exemplo n.º 2
0
def create_teams():
    team_key = ""
    app_name = ""
    community_name = ""
    admin_user_email = ""
    other_users_email = []

    app = AppInfo.query().filter(AppInfo.lc_name == app_name.lower()).get()
    if not app:
        appinfo_message = AppInfoMessage()
        appinfo_message.name = app_name
        app = AppInfo.insert(appinfo_message)

    community = Community.getCommunityFromTeamKey(team_key=team_key)
    if not community:
        community_message = CommunityMessage(name=community_name,
                                             team_key=team_key,
                                             team_secret=md5(community_name.lower()))
        community_message.user = UserMessage(user_email=admin_user_email)
        Community.insert(community_message)
        community = Community.getCommunityFromTeamKey(team_key=team_key)

    if community and app:
        if not app.key in community.apps:
            community.apps.append(app.key)
            community.put()

    for user_email in other_users_email:
        user = User.find_user_by_email(email=user_email, team_key=team_key)
        if not user:
            user = User.insert_user(user_email, account_type=team_key, image_url="")
        userrole = UserRole.insert(user, community)
Exemplo n.º 3
0
def get_user_from_request(user_id=None, user_email=None, team_key=None):
    user = None
    if user_id:
        user = User.get_by_id(user_id)
    elif user_email:
        user = User.find_user_by_email(user_email, team_key)
    return user
Exemplo n.º 4
0
 def forgot_details(self, request):
     email = request.user_email
     validate_email(email)
     if not User.find_user_by_email(email):
         raise endpoints.NotFoundException("Email(" + email + ") doesn't exist.")
         # send reset password email
     return message_types.VoidMessage()
Exemplo n.º 5
0
    def authenticate(self, request):
        email = request.user_email
        validate_email(email)
        team_key = request.team_key
        user = User.find_user_by_email(email, team_key)

        if team_key:
            team_secret = request.team_secret
            validate_team_secret(team_secret)

            display_name = request.display_name
            image_url = request.user_image_url

            if not user:
                user = User.insert_user(email=email, username=display_name, account_type=team_key, image_url=image_url)
                community = Community.getCommunityFromTeamKey(team_key)
                UserRole.insert(user, community)
            elif (display_name != user.display_name) or (image_url != user.image_url):
                User.update_user(user=user, email=email, username=display_name, account_type=team_key, image_url=image_url)
            if not Community.authenticate(team_key, md5(team_secret)):
                raise endpoints.UnauthorizedException("Authentication failed. Team key and secret are not matched.")
        elif user.auth_source == AuthSourceType.ANNO:
            password = request.password
            validate_password(password)
            if not user:
                raise endpoints.NotFoundException("Authentication failed. User account " + email + " doesn't exist.")
            if not User.authenticate(email, md5(password)):
                raise endpoints.UnauthorizedException("Authentication failed. Email and password are not matched.")
        else:
            raise endpoints.ForbiddenException("Account for '%s' is Google or Facebook OAuth account." % email)

        return UserMessage(id=user.key.id(), display_name=user.display_name)
Exemplo n.º 6
0
def handle_user(creator_id):
    current_user = get_endpoints_current_user(raise_unauthorized=False)
    if current_user is None:
        if creator_id is not None:
            user = User.find_user_by_email(creator_id + "@gmail.com")
            if user is None:
                user = User.insert_user(email=creator_id + "@gmail.com")
        else:
            email = '*****@*****.**'
            user = User.find_user_by_email(email)
            if user is None:
                user = User.insert_user(email=email)
    else:
        user = User.find_user_by_email(current_user.email())
        if user is None:
            user = User.insert_user(email=current_user.email())
    return user
Exemplo n.º 7
0
 def user_insert(self, request):
     email = request.creator_id + "@gmail.com"
     user = User.find_user_by_email(email)
     if user is None:
         User.insert_user(email)
         print "user " + request.creator_id + " was inserted."
     else:
         print "user" + request.creator_id + " already exists."
     return message_types.VoidMessage()
Exemplo n.º 8
0
def auth_user(headers):
    current_user = get_endpoints_current_user(raise_unauthorized=False)
    user = None

    if current_user is None:
        credential_pair = get_credential(headers)

        signinMethod = SignInMethod.ANNO
        team_key = None
        team_secret = None
        display_name = None
        image_url = None

        if len(credential_pair) == 2:
            email, password = credential_pair
        elif len(credential_pair) == 5:
            signinMethod, email, password, team_key, team_secret = credential_pair
        else:
            signinMethod, email, password, team_key, team_secret, display_name, image_url = credential_pair

        validate_email(email)
        user = User.find_user_by_email(email, team_key)

        if signinMethod == SignInMethod.ANNO:
            User.authenticate(email, md5(password))
        elif signinMethod == SignInMethod.PLUGIN:
            if not Community.authenticate(team_key, team_secret):
                 raise endpoints.UnauthorizedException("Incorrect team key or secret")

            display_name = unicode(display_name, "utf-8", "ignore")
            if not user:
                user = User.insert_user(email=email, username=display_name, account_type=team_key, image_url=image_url)
                community = Community.getCommunityFromTeamKey(team_key)
                UserRole.insert(user, community)
            elif (display_name and display_name != user.display_name) or (image_url and image_url != user.image_url):
                User.update_user(user=user, email=email, username=display_name, account_type=team_key, image_url=image_url)
    else:
        user = User.find_user_by_email(current_user.email())

    if user is None:
        raise endpoints.UnauthorizedException("Oops, something went wrong. Please try later.")

    return user
Exemplo n.º 9
0
 def authenticate(self, request):
     email = request.user_email
     validate_email(email)
     password = request.password
     validate_password(password)
     user = User.find_user_by_email(email)
     if not user:
         raise endpoints.NotFoundException("Authentication failed. User account " + email + " doesn't exist.")
     if not User.authenticate(email, md5(password)):
         raise endpoints.UnauthorizedException("Authentication failed. User name and password are not matched.")
     return UserMessage(id=user.key.id(), display_name=user.display_name)
Exemplo n.º 10
0
def migrate_photo_time_annos(cursor=None):
    team_key = 'us.orbe.Reko-Album'
    phototime_app = AppInfo.query().filter(AppInfo.lc_name == 'phototime').get()
    phototime_community = Community.getCommunityFromTeamKey(team_key=team_key)
    anno_list = Anno.query().filter(Anno.app == phototime_app.key).fetch()

    for anno in anno_list:
        anno.community = phototime_community.key
        user_email = anno.creator.get().user_email
        anno.creator = User.find_user_by_email(email=user_email, team_key=team_key).key
        anno.put()
Exemplo n.º 11
0
 def user_display_name_get(self, request):
     if request.email is None:
         # if no email is provided, get user by oauth.
         user = get_user(self.request_state.headers)
     else:
         # for not login user, get user by the provided email.
         user = User.find_user_by_email(request.email)
     if user is None:
         return UserMessage(display_name='')
     else:
         return UserMessage(display_name=user.display_name)
Exemplo n.º 12
0
    def forgot_details(self, request):
        user = User.find_user_by_email(request.user_email)

        if user:
            if user.auth_source == AuthSourceType.ANNO:
                validate_email(request.user_email)
                reset_password(user, request.user_email)
            else:
                raise endpoints.ForbiddenException("Account for '%s' is Google or Facebook OAuth account." % request.user_email)
        else:
            raise endpoints.NotFoundException("Email address is not found. Please enter correct email address.")

        return message_types.VoidMessage()
Exemplo n.º 13
0
 def bind_account(self, request):
     current_user = get_endpoints_current_user(raise_unauthorized=True)
     auth_source = request.auth_source
     if auth_source is None:
         auth_source = 'Google'
     email = current_user.email()
     user = User.find_user_by_email(email)
     if user is not None:
         user.auth_source = auth_source
         user.display_name = request.display_name
         user.put()
     else:
         User.insert_user(current_user.email(), request.display_name, auth_source)
     return message_types.VoidMessage()
Exemplo n.º 14
0
 def bind_account(self, request):
     if request.user_email is None:
         raise endpoints.UnauthorizedException("Oops, something went wrong. Please try later.")
     auth_source = request.auth_source
     if auth_source is None:
         auth_source = AuthSourceType.GOOGLE
     email = request.user_email
     user = User.find_user_by_email(email)
     if user is not None:
         user.auth_source = auth_source
         user.display_name = request.display_name
         user.put()
     else:
         User.insert_user(email=email, username=request.display_name)
     return message_types.VoidMessage()
Exemplo n.º 15
0
    def get_unread_count(cls, message):
        user = User.find_user_by_email(message.user_email, team_key=message.team_key)
        unread_count = 0
        limit = 20

        if user is not None:
            query = cls.query().filter(cls.user == user.key)
            query = query.filter(ndb.OR(cls.last_read == None, cls.modified != None))
            activity_list = query.fetch()

            for activity in activity_list[0:limit]:
                anno = activity.anno.get()
                if activity.last_read and anno and anno.last_update_time and (activity.last_read < anno.last_update_time):
                    unread_count += 1

        return unread_count
Exemplo n.º 16
0
    def register(self, request):
        email = request.user_email
        validate_email(email)
        password = request.password
        validate_password(password)
        user = User.find_user_by_email(email)
        if user is not None:
            raise endpoints.BadRequestException("Email(" + email + ") already exists.")

        display_name = request.display_name
        if display_name is None or display_name == '':
            raise endpoints.BadRequestException("Registration failed. Display name is missing.")
        user = User.find_user_by_display_name(display_name)
        if user is not None:
            raise endpoints.BadRequestException("Display name(" + display_name + ") already exists.")

        user = User.insert_user(email=email, username=display_name, password=md5(password))
        return UserMessage(id=user.key.id())
Exemplo n.º 17
0
 def vote_delete(self, request):
     """
     Exposes an API endpoint to delete an existing vote.
     """
     if request.id is None and request.anno_id is None:
         raise endpoints.BadRequestException('id or anno_id field is required.')
     if request.id is not None:
         vote = Vote.get_by_id(request.id)
         if vote is None:
             raise endpoints.NotFoundException('No vote entity with the id "%s" exists.' % request.id)
         anno = vote.anno_key.get()
         vote.key.delete()
         anno.vote_count -= 1
         anno.put()
     elif request.anno_id is not None:
         user = User.find_user_by_email(get_endpoints_current_user().email())
         anno = Anno.get_by_id(request.anno_id)
         for key in Vote.query(Vote.anno_key == anno.key, Vote.creator == user.key).iter(keys_only=True):
             key.delete()
             anno.vote_count -= 1
             anno.put()
     return message_types.VoidMessage()
Exemplo n.º 18
0
    def accept(cls, message):
        resp = None
        msg = ""
        invitation = cls.query(cls.invite_hash == message.invite_hash).get()

        if invitation:
            community = invitation.community.get()
            if community:
                if (invitation.email == message.user_email) or message.force:
                    user = User.find_user_by_email(message.user_email)
                    resp = UserRole.insert(user, community, invitation.role)
                    if resp:
                        invitation.key.delete()
                        msg = "Invitation accepted"
                    else:
                        msg = "Error while adding user to community"
                else:
                    msg = "User Mismatch"
            else:
                msg = "Community no longer exist"
        else:
            msg = "Invitation no longer exist"

        return (resp, msg)
Exemplo n.º 19
0
 def update_teamkey(self, request):
     user = User.find_user_by_email(request.email)
     user.account_type = request.account_type
     user.put()
     return message_types.VoidMessage()