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'))
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))
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)
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))
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'))
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)
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)
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
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))
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))
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))
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))
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)
def checkEmailAvailability(self, email): emails = User.gql("WHERE email=:1", email).get() self.response.out.write(emails != None)
def checkUsernameAvailability(self, username): users = User.get_user(username) self.response.out.write(users != None)
def get(self): profile = User.get_by_id(long(self.user_id)) self.form.process(obj=profile) self.render_template('usersettings.html')