예제 #1
0
    def get(self, username):
        """display profile of user with username, if None, display logged in user
        """
        mode = self.request.get('mode')
        upload_url = ""

        if mode != 'edit':
            template = 'profile/profile.html'
        else:
            if self.username != username:
                return self.abort(403)
            template = 'profile/edit.html'

        if self.user:
            user = User.get_by_id(long(self.user_id))
        else:
            user = None

        if user:
            if username != user.username:
                profile = User.get_user(username)
                if not profile or \
                   (profile.public == False and \
                    profile.username != user.username and \
                    profile.username not in user.friends):

                    #TODO: redirect to profile forbidden page
                    return self.abort(404)
            else:
                profile = user

            self.form.process(obj=profile)
            all, ic, cc = self.organize_courses_for(profile)

            projects = Project.get_projects_by_ids(profile.projects)

            context = {'profile': profile,
                       'user': user,
                       'username': username,
                       'gravatar': profile.gravatar,
                       'friend_btn': username != user.username and username not in user.friends,
                       'courses_all': Course.courses_to_dict(),
                       'courses_completed': cc,
                       'courses_incomplete': ic,
                       'projects': projects,
                       'upload_url': upload_url,
            }

            self.render_template(template, **context)
        else:
            self.redirect(self.uri_for('login'))
예제 #2
0
    def post(self, username):
        if self.username != username:
            return self.abort(403)
        mode = self.request.get('mode')

        if mode == 'edit':
            if not self.form.validate():
                return self.get(username)
#                self.redirect('/'+username)

            fields = self.get_params_dict((
                'short_about',
                'tools',
                ))

            iclasses = self.request.get_all('classes_inprog')
            cclasses = self.request.get_all('classes_completed')
            fields['iclasses'] = iclasses
            fields['cclasses'] = cclasses
            fields['username'] = username

            user = User.get_user(username)

            user.update(self.form, **fields)

        self.redirect('/{}'.format(username))
예제 #3
0
 def notify_user(self, sender, conv_id, msg):
     #TODO: use boilerplate/task queue
     conv = Conversation.get_by_id(int(conv_id))
     for uname in conv.receivers_list_norm:
         if uname != sender:
             user = User.get_user(uname)
             if user.notify_on_msg:
                 new_message_notify(user.email, conv_id, msg)
예제 #4
0
    def edit_project(self, username):
        blob_info = None
        screenshot = None
        screenshot_url = None
        fileerror = ''

        upload_files = self.get_uploads('screenshot')
        if upload_files:
            blob_info = upload_files[0]
            if 'image' in blob_info.content_type:
                screenshot = blob_info.key()
                screenshot_url = images.get_serving_url(screenshot)
            else:
                # uploaded file wasn't an images, hence remove from the blobstore
                blobstore.delete(blob_info.key())
                fileerror = 'Invalid image type'

        project_id = self.request.get('projects_dropdown')

        title = self.request.get('title').strip()
        titleerror = validate_project_title(title)

        url = self.request.get('proj_url').strip()
        urlerror = validate_project_url(url)

        short_description = self.request.get('short_description').strip()
        sderror = validate_project_short_description(short_description)

        if titleerror or urlerror or sderror or fileerror:
            if blob_info and not fileerror:
                # same as above
                Project.remove_screenshot_blob(blob_info.key())

            user = User.get_user(username)
            projects = Project.get_projects_by_ids(user.projects)
            upload_url = blobstore.create_upload_url(
                self.uri_for('project-add', username=username),
                max_bytes_per_blob=MAX_IMG_SIZE)
            template = 'profile/edit_project.html'
            context = { 'user': user,
                        'username': username,
                        'title': title,
                        'proj_url': url,
                        'short_description': short_description,
                        'projects': projects,
                        'upload_url': upload_url,
                        'titleerror': titleerror,
                        'urlerror': urlerror,
                        'sderror': sderror,
                        'fileerror': fileerror }
            self.render_template(template, context)
            return
        else:
            Project.update_project(project_id, title=title, screenshot=screenshot,
                screenshot_url=screenshot_url, url=url, short_description=short_description)

            self.redirect(self.uri_for('profile', username=username))
예제 #5
0
def register():
    username = request.form['r_username']
    password = bcrypt.generate_password_hash(request.form['r_password'])
    email = request.form['email']
    user = User(username, password, email)
    db.session.add(user)
    db.session.commit()
    flash('User successfully registered')
    return redirect(url_for('login'))
예제 #6
0
    def post(self):
        """Edit settings
        """
        if not self.form.validate():
            return self.get()

        user = User.get_by_id(long(self.user_id))

        self.form.populate_obj(user)
        user.put()

        message = _("Settings saved")
        self.add_message(message, 'info')

        self.redirect(self.request.url)
예제 #7
0
    def post(self, conv_id=None, msg_id=None):
        if not self.form.validate():
            return self.show_form_for_new_message()

        # Adds a new message to conversation
        if conv_id and msg_id and conv_id.isdigit() and msg_id.isdigit():

            msg = Conversation.add_new_message(self.form.sender.data, self.form.content.data, conv_id=conv_id)
            self.notify_user(self.form.sender.data, conv_id, msg)

        # new conversation: adds a new conversation with first message
        elif self.form.receiver.data and self.form.title.data and self.form.content.data:
            data = [self.form.data.get(i) for i in ('sender', 'receiver', 'title', 'content')]
            (conv, msg) = User.add_new_conversation(*data)
            self.notify_user(self.form.sender.data, conv.key.id(), msg)
        else:
            self.response.out.write("Error in Messages.post()")

        self.redirect(self.request.referer)
예제 #8
0
파일: home.py 프로젝트: joshz/udacityplus
    def get(self, **kwargs):
        user_session = self.user
        user_session_object = self.auth.store.get_session(self.request)
        if self.user_id:
            user_info = User.get_by_id(long( self.user_id ))
            user_info_object = self.auth.store.user_model.get_by_auth_token(
                user_session['user_id'], user_session['token'])

            try:
                params = {
                    "user_session" : user_session,
                    "user_session_object" : user_session_object,
                    "user_info" : user_info,
                    "user_info_object" : user_info_object,
                    "userinfo_logout-url" : self.auth_config['logout_url'],
                    "friends": user_info.get_friends()
                    }
                return self.render_template('userhome.html', **params)
            except (AttributeError, KeyError), e:
                return "Secure zone error:" + " %s." % e
예제 #9
0
    def view_project(self, mode, username):
        if mode in ('add', 'edit'):
            upload_url = blobstore.create_upload_url(
                self.uri_for('project-%s' % mode, username=username),
                max_bytes_per_blob=MAX_IMG_SIZE)
            template = 'profile/{}_project.html'.format(mode)

            if self.user:
                user = User.get_by_id(long(self.user_id))

                projects = Project.get_projects_by_ids(user.projects)

                context = {
                    'user': user,
                    'gravatar': user.gravatar,
                    'projects': projects,
                    'upload_url': upload_url,
                    }

                return self.render_template(template, **context)
        self.redirect(self.uri_for('login', continue_url=self.request.path))
예제 #10
0
파일: chat.py 프로젝트: joshz/udacityplus
    def post(self, channelname):
        '''Displays chat UI'''
        username = self.username

#        if chat.get_user(username):
#            message = _("Username already in use")
#            self.add_message(message, 'error')
#            return self.redirect(self.request.url)
        available_channels = set(Course.available_course_ids())
        available_channels.add('Global')
        if channelname not in available_channels:
            #TODO: doesn't return info
            message = _("Channel not available")
            self.add_message(message, 'error')
            return self.redirect_to(self.request.url)


        channelname = "#{}".format(channelname)

        token = chat.channel_api.create_channel(username) # Expires after 120 minutes
        logging.info("%s is a token. type of token: %s"%(token,type(token)))
        identifier = os.urandom(16).encode('hex')
        user = ChatUser(user=User.get_by_id(self.user_id),
            id=username,
            username=username,
            identifier=identifier,
            startingchannel=channelname,
            connected=True,
            contacts=json.dumps([ ]),
            channels=json.dumps([ ]))
        user.store()
        self.response.out.write(self.render_template("chat/chat.html", token=token,
            username=username,
            identifier=identifier,
            server="!AwesomeServer",
            room=channelname))
예제 #11
0
    def add_project(self, username):
        blob_info = None
        fileerror = 'Screenshot is mandatory'
        try:
            upload_files = self.get_uploads('screenshot')
        except:
            upload_files = None
        if upload_files:
            blob_info = upload_files[0]
            if 'image' in blob_info.content_type:
                screenshot = blob_info.key()
                screenshot_url = images.get_serving_url(screenshot)
                fileerror = ''
            else:
                # uploaded file wasn't an images, hence remove from the blobstore
                blobstore.delete(blob_info.key())
                fileerror = 'Invalid image type'
        else:
            fileerror = 'Please provide a screenshot of your project (max size: 1MB)'

        title = self.request.get('title').strip()
        titleerror = validate_project_title(title)

        url = self.request.get('proj_url').strip()
        urlerror = validate_project_url(url)

        short_description = self.request.get('short_description').strip()
        sderror = validate_project_short_description(short_description)

        if titleerror or urlerror or sderror or fileerror:
            if blob_info and not fileerror:
                # blob was okay but validation of some other field failed
                # hence remove it to avoid orphaned entry
                # also remove the serving url
                Project.remove_screenshot_blob(blob_info.key())

            user = User.get_user(username)
            template = 'profile/add_project.html'
            upload_url = blobstore.create_upload_url(
                self.uri_for('project-add', username=username),
                max_bytes_per_blob=MAX_IMG_SIZE)
            context = { 'user': user,
                        'username': username,
                        'title': title,
                        'proj_url': url,
                        'short_description': short_description,
                        'upload_url': upload_url,
                        'titleerror': titleerror,
                        'urlerror': urlerror,
                        'sderror': sderror,
                        'fileerror': fileerror}

            self.render_template(template, **context)
            return
        else:
            user = User.get_user(username)
            project_id = Project.add_project(title=title, screenshot=screenshot,
                screenshot_url=screenshot_url, url=url, short_description=short_description,
                author=user.key)

            User.add_project(username, project_id)

            self.redirect(self.uri_for('profile', username=username))
예제 #12
0
    def delete_project(self, username):
        project_id = self.request.get('project_id')
        Project.remove_project(project_id)
        User.remove_project(username, project_id)

        self.redirect(self.uri_for('profile', username=username))
예제 #13
0
    def display_messages(self, username, start, end):
        conv = User.get_conversations_for(username, start, end)

        template_values = { "conversations" : conv, "username": username}
        self.render_template("messages/messages.html", **template_values)
예제 #14
0
파일: RPC.py 프로젝트: joshz/udacityplus
	def checkEmailAvailability(self, email):
		emails = User.gql("WHERE email=:1", email).get()
		self.response.out.write(emails != None)
예제 #15
0
파일: RPC.py 프로젝트: joshz/udacityplus
	def checkUsernameAvailability(self, username):
		users = User.get_user(username)
		self.response.out.write(users != None)
예제 #16
0
 def get(self):
     profile = User.get_by_id(long(self.user_id))
     self.form.process(obj=profile)
     self.render_template('usersettings.html')