def access(): """Access.""" try: mail = mail_cookie_check_mail_activation(request.values['mailcookie']) u = User.query.filter(User.email == mail).one() u.note = 1 try: db.session.commit() except SQLAlchemyError: db.session.rollback() flash(_('Authorization failled.'), 'error') redirect('/') if current_user.is_authenticated(): current_user.reload() flash(_('Your email address has been validated'), 'success') else: UserInfo(u.id).reload() flash( _('Your email address has been validated, and you can ' 'now proceed to sign-in.'), 'success' ) except Exception: current_app.logger.exception("Authorization failed.") flash(_('The authorization token is invalid.'), 'error') return redirect('/')
def update_profile(self, data): """Update user profile. Sends signal to allow other modules to subscribe to changes. """ changed_attrs = {} for field in self.PROFILE_FIELDS: if field in data and getattr(self, field) != data[field]: changed_attrs[field] = getattr(self, field) setattr(self, field, data[field]) if 'email' in changed_attrs: self.verify_email(force=True) try: db.session.commit() except Exception: db.session.rollback() raise current_user.reload() profile_updated.send( sender=self.id, user=self, changed_attrs=changed_attrs ) return changed_attrs
def update_profile(self, data): """Update user profile. Sends signal to allow other modules to subscribe to changes. """ changed_attrs = {} for field in self.PROFILE_FIELDS: if field in data and getattr(self, field) != data[field]: changed_attrs[field] = getattr(self, field) setattr(self, field, data[field]) if 'email' in changed_attrs: self.verify_email(force=True) try: db.session.commit() except Exception: db.session.rollback() raise current_user.reload() profile_updated.send(sender=self.id, user=self, changed_attrs=changed_attrs) return changed_attrs
def join(id_usergroup, id_user=None, status=None): """Join group.""" group = Usergroup.query.get_or_404(id_usergroup) id_user2join = id_user or current_user.get_id() user2join = User.query.get_or_404(id_user2join) form = UserJoinGroupForm() user_status = None if form.user_status and form.user_status.data: user_status = UserUsergroup.USER_STATUS['ADMIN'] try: group.join(user2join, status=user_status) except AccountSecurityError: flash(_( 'You have not enough right to ' 'add user "%(x_nickname)s" to the group "%(x_groupname)s"', x_nickname=user2join.nickname, x_groupname=group.name), "error") return redirect(url_for('.index')) except SQLAlchemyError: flash(_('User "%(x_nickname)s" can\'t join the group "%(x_groupname)s"', x_nickname=user2join.nickname, x_groupname=group.name), "error") if id_user: return redirect(url_for('.members', id_usergroup=id_usergroup)) else: return redirect(url_for('.index')) current_user.reload() flash(_('%(user)s join the group "%(name)s".', user='******'+user2join.nickname+'"' if id_user else "You", name=group.name), 'success') redirect_url = form.redirect_url.data or url_for('.index') return redirect(redirect_url)
def access(): """Access.""" try: mail = mail_cookie_check_mail_activation(request.values['mailcookie']) u = User.query.filter(User.email == mail).one() u.note = 1 try: db.session.commit() except SQLAlchemyError: db.session.rollback() flash(_('Authorization failled.'), 'error') redirect('/') if current_user.is_authenticated(): current_user.reload() flash(_('Your email address has been validated'), 'success') else: UserInfo(u.id).reload() flash( _('Your email address has been validated, and you can ' 'now proceed to sign-in.'), 'success') except Exception: current_app.logger.exception("Authorization failed.") flash(_('The authorization token is invalid.'), 'error') return redirect('/')
def updateLitSub(lit_id): form = AddLitForm() lit = Lit.objects(id__iexact=lit_id).first() # Update all the fields of the object ( Could possibly be done in a simpler fashion ) if form.validate_on_submit(): lit.update(set__title=form.title.data) lit.update(set__refType=form.refType.data) lit.update(set__author=form.author.data) lit.update(set__primaryField=form.primaryField.data) lit.update(set__yrPublished=form.yrPublished.data) lit.update(set__sourceTitle=form.sourceTitle.data) lit.update(set__editor=form.editor.data) lit.update(set__placePublished=form.placePublished.data) lit.update(set__publisher=form.publisher.data) lit.update(set__volume=form.volume.data) lit.update(set__number=form.number.data) lit.update(set__pages=form.pages.data) lit.update(set__abstract=form.abstract.data) lit.update(set__notes=form.notes.data) lit.update(set__secondaryField=form.secondaryField.data) lit.update(set__link=form.link.data) # Clear the objects keywords lit.update(set__keywords=[]) # Separate the keywords field string by comma keywordslist = (form.keywords.data).split(",") # Push each key into the obj list field for x in range(0, len(keywordslist)): key = str(keywordslist[x].strip()) if key is not None: lit.update(push__keywords=key) # Add new Lit history obj editHist = LitEditRecord(lastUserEdited=current_user.name) lit.update(push__l_edit_record=editHist) lit.update(set__last_edit=editHist) lit.reload() # Add new User edit history obj userHist = UserEditRecord(litEdited=str(lit.id), operation="update", litEditedTitle=lit.title) current_user.update(push__u_edit_record=userHist) current_user.reload() lit = Lit.objects(id__iexact=lit_id).first() flash(lit.title + " has been updated") else: flash(lit.title + " failed to be updated") return render_template('lit.html', lit=lit)
def collect(movie_id): if len(current_user.collections) >= current_app.config['MAX_COLLECTIONS_NUM']: flash('收藏电影数量已达最大,请尽量不要收藏重复的电影', 'warning') return redirect_back() movie_id = ObjectId(movie_id) current_user.update(push__collections=movie_id) current_user.reload() if current_user.not_collect_again(): flash("收藏成功", 'success') else: flash("该电影重复收藏成功,尽量不要有此操作,如需删除请到个人页面", 'warning') return redirect_back()
def edit_profile(): form = EditProfileForm() if form.validate_on_submit(): current_user.update(about_me=form.about_me.data) current_user.reload() flash('Your changes have been saved.') return redirect(url_for('edit_profile')) elif request.method == 'GET': form.about_me.data = current_user.about_me return render_template('edit_profile.html', title='Edit Profile', form=form)
def manage(id_usergroup): """Manage user group.""" ug = Usergroup.query.filter_by(id=id_usergroup).one() form = UsergroupForm(request.form, obj=ug) if form.validate_on_submit(): if not ug.is_admin(current_user.get_id()): # not enough right to modify group flash( _( 'Sorry, you don\'t have enough right to be able ' 'to manage the group "%(name)s"', name=ug.name), 'error') return redirect(url_for(".index")) # get form data ug2form = Usergroup() form.populate_obj(ug2form) # update group oldname = ug.name ug.name = ug2form.name ug.description = ug2form.description ug.join_policy = ug2form.join_policy ug.login_method = ug2form.login_method # update in db try: db.session.merge(ug) db.session.commit() except IntegrityError: db.session.rollback() flash(_('Group properies error'), 'error') # reload form with old values return render_template( "groups/new.html", form=form, action=_('Update'), subtitle=oldname, ) except SQLAlchemyError: db.session.rollback() raise current_user.reload() return redirect(url_for(".index")) return render_template( "groups/new.html", form=form, action=_('Update'), subtitle=ug.name, )
def delete(id_usergroup): """Delete a group.""" group = Usergroup.query.get_or_404(id_usergroup) id_user = current_user.get_id() if group.is_admin(id_user): db.session.delete(group) db.session.commit() current_user.reload() else: flash(_('Sorry, but you are not an admin of the group "%(name)s".', name=group.name), "error") return redirect(url_for(".index"))
def manage(id_usergroup): """Manage user group.""" ug = Usergroup.query.filter_by(id=id_usergroup).one() form = UsergroupForm(request.form, obj=ug) if form.validate_on_submit(): if not ug.is_admin(current_user.get_id()): # not enough right to modify group flash(_('Sorry, you don\'t have enough right to be able ' 'to manage the group "%(name)s"', name=ug.name), 'error') return redirect(url_for(".index")) # get form data ug2form = Usergroup() form.populate_obj(ug2form) # update group oldname = ug.name ug.name = ug2form.name ug.description = ug2form.description ug.join_policy = ug2form.join_policy ug.login_method = ug2form.login_method # update in db try: db.session.merge(ug) db.session.commit() except IntegrityError: db.session.rollback() flash(_('Group properies error'), 'error') # reload form with old values return render_template( "groups/new.html", form=form, action=_('Update'), subtitle=oldname, ) except SQLAlchemyError: db.session.rollback() raise current_user.reload() return redirect(url_for(".index")) return render_template( "groups/new.html", form=form, action=_('Update'), subtitle=ug.name, )
def index(): """List all user groups.""" uid = current_user.get_id() current_user.reload() form = JoinUsergroupForm() form.id_usergroup.set_remote( url_for('webgroup.search_groups', id_user=uid) + "?query=%QUERY") user = User.query.get(uid) uugs = dict(map(lambda uug: (uug.usergroup.name, uug), user.usergroups)) return render_template( 'groups/index.html', uugs=uugs, form=form, )
def myposts(): if request.method == 'POST': i = int(request.form['btn']) - 1 postid = current_user.posts[i][7] remove_post(postid) current_user.reload() posts = [] if current_user.is_authenticated: posts = current_user.posts defaults = getdefaults(current_user.id) else: return redirect(url_for('login')) return render_template('saiddit/myposts.html', title='myposts', posts=posts, defaults=defaults )
def leave(id_usergroup, id_user=None): """Leave user group. :param id_usergroup: Identifier of user group. """ group = Usergroup.query.get_or_404(id_usergroup) id_user2remove = id_user or current_user.get_id() user2remove = User.query.get_or_404(id_user2remove) try: group.leave(user2remove) except AccountSecurityError: flash( _( 'You have not enough right to ' 'remove user "%(x_nickname)s" from group "%(x_groupname)s"', x_nickname=user2remove.nickname, x_groupname=group.name), "error") return redirect(url_for('.index')) except IntegrityUsergroupError: flash( _( 'Sorry, user "%(x_nickname)s" can leave the group ' '"%(x_groupname)s" without admins, please delete the ' 'group if you want to leave.', x_nickname=user2remove.nickname, x_groupname=group.name), "error") return redirect(url_for('.index')) try: db.session.merge(group) db.session.commit() except SQLAlchemyError: db.session.rollback() raise current_user.reload() flash( _('%(user)s left the group "%(name)s".', user='******' + user2remove.nickname + '"' if id_user else "You", name=group.name), 'success') if id_user and id_user != current_user.get_id(): return redirect(url_for('.members', id_usergroup=id_usergroup)) else: return redirect(url_for('.index'))
def account_setup(remote, token): """Perform additional setup after user have been logged in.""" from invenio.ext.sqlalchemy import db response = remote.get(REMOTE_APP_RESOURCE_API_URL) user = token.remote_account.user if response.status == requests.codes.ok: res = get_dict_from_response(response) current_user.info['group'] = fetch_groups(res['Group']) current_user.modified = True current_user.save() if user and not any([user.family_name, user.given_names]): user.family_name = res['Lastname'][0] user.given_names = res['Firstname'][0] db.session.add(user) current_user.reload()
def account_setup(remote, token): """Perform additional setup after user have been logged in.""" from invenio_ext.sqlalchemy import db response = remote.get(REMOTE_APP_RESOURCE_API_URL) user = token.remote_account.user if response.status == requests.codes.ok: res = get_dict_from_response(response) current_user.info['group'] = fetch_groups(res['Group']) current_user.modified = True current_user.save() if user and not any([user.family_name, user.given_names]): user.family_name = res['Lastname'][0] user.given_names = res['Firstname'][0] db.session.add(user) current_user.reload()
def new(): """Create new user group.""" form = UsergroupForm(request.form) if form.validate_on_submit(): ug = Usergroup() id_user = current_user.get_id() user2join = User.query.get_or_404(id_user) form.populate_obj(ug) ug.join(status=UserUsergroup.USER_STATUS['ADMIN'], user=user2join) db.session.add(ug) try: db.session.commit() except IntegrityError: # catch integrity error db.session.rollback() flash(_('Group properies error'), 'error') # reload form with old values return render_template( "groups/new.html", form=form, action=_('Create'), subtitle=_("New group"), ) except Exception: # catch unknown error db.session.rollback() raise # group finally created current_user.reload() flash(_('Group "%(name)s" successfully created', name=ug.name), 'success') return redirect(url_for(".index")) return render_template( "groups/new.html", form=form, action=_('Create'), subtitle=_("New group"), )
def new(): """Create new user group.""" form = UsergroupForm(request.form) if form.validate_on_submit(): ug = Usergroup() id_user = current_user.get_id() user2join = User.query.get_or_404(id_user) form.populate_obj(ug) ug.join(status=UserUsergroup.USER_STATUS['ADMIN'], user=user2join) db.session.add(ug) try: db.session.commit() except IntegrityError: # catch integrity error db.session.rollback() flash(_('Group properies error'), 'error') # reload form with old values return render_template( "groups/new.html", form=form, action=_('Create'), subtitle=_("New group"), ) except: # catch unknown error db.session.rollback() raise # group finally created current_user.reload() flash(_('Group "%(name)s" successfully created', name=ug.name), 'success') return redirect(url_for(".index")) return render_template( "groups/new.html", form=form, action=_('Create'), subtitle=_("New group"), )
def edit_profile(): form = EditProfileForm() if form.validate_on_submit(): # if form.pic.data: # picture_file = save_pic(form.pic.data) # current_user.update(pic=picture_file) # current_user.update(about_me=form.about_me.data) Concrete_Builder = EditProfileBuilder.ConcreteBuilder() director = EditProfileBuilder.Director(form=form) director.construct(Concrete_Builder) user1 = Concrete_Builder.product user = ProfileAdapter.Adapter() user.request(user1) current_user.reload() flash("Your changes have been saved!") return redirect(url_for('user', username=current_user.username)) elif request.method == 'GET': form.about_me.data = current_user.about_me return render_template('edit_profile.html', title="Edit Profile", form=form)
def leave(id_usergroup, id_user=None): """Leave user group. :param id_usergroup: Identifier of user group. """ group = Usergroup.query.get_or_404(id_usergroup) id_user2remove = id_user or current_user.get_id() user2remove = User.query.get_or_404(id_user2remove) try: group.leave(user2remove) except AccountSecurityError: flash(_( 'You have not enough right to ' 'remove user "%(x_nickname)s" from group "%(x_groupname)s"', x_nickname=user2remove.nickname, x_groupname=group.name), "error") return redirect(url_for('.index')) except IntegrityUsergroupError: flash(_( 'Sorry, user "%(x_nickname)s" can leave the group ' '"%(x_groupname)s" without admins, please delete the ' 'group if you want to leave.', x_nickname=user2remove.nickname, x_groupname=group.name), "error") return redirect(url_for('.index')) try: db.session.merge(group) db.session.commit() except SQLAlchemyError: db.session.rollback() raise current_user.reload() flash(_('%(user)s left the group "%(name)s".', user='******'+user2remove.nickname+'"' if id_user else "You", name=group.name), 'success') if id_user and id_user != current_user.get_id(): return redirect(url_for('.members', id_usergroup=id_usergroup)) else: return redirect(url_for('.index'))
def account_setup(remote, token, resp): """Perform additional setup after user have been logged in.""" from invenio.modules.oauthclient.utils import oauth_link_external_id from invenio.ext.sqlalchemy import db # Retrieve ORCID from response. orcid = resp.get("orcid") # Set ORCID in extra_data. token.remote_account.extra_data = {"orcid": orcid} user = token.remote_account.user # Create user <-> external id link. oauth_link_external_id(user, dict(id=orcid, method="orcid")) # Fill user full name if not already set if user and not any([user.given_names, user.family_name]): # Query ORCID to get the real name response = remote.get("{0}/orcid-bio".format(orcid), headers={'Accept': 'application/orcid+json'}, content_type="application/json") if response.status == 200: try: name = response.data["orcid-profile"]["orcid-bio"][ "personal-details"] user.given_names = name["given-names"]["value"] user.family_name = name["family-name"]["value"] except KeyError: current_app.logger.exception( "Unexpected return format from ORCID: {0}".format( repr(response.data))) return db.session.add(user) # Refresh user cache current_user.reload()
def account_setup(remote, token, resp): """Perform additional setup after user have been logged in.""" from invenio_oauthclient.utils import oauth_link_external_id from invenio_ext.sqlalchemy import db # Retrieve ORCID from response. orcid = resp.get("orcid") # Set ORCID in extra_data. token.remote_account.extra_data = {"orcid": orcid} user = token.remote_account.user # Create user <-> external id link. oauth_link_external_id(user, dict(id=orcid, method="orcid")) # Fill user full name if not already set if user and not any([user.given_names, user.family_name]): # Query ORCID to get the real name response = remote.get("{0}/orcid-bio".format(orcid), headers={'Accept': 'application/orcid+json'}, content_type="application/json") if response.status == 200: try: name = response.data["orcid-profile"]["orcid-bio"][ "personal-details"] user.given_names = name["given-names"]["value"] user.family_name = name["family-name"]["value"] except KeyError: current_app.logger.exception( "Unexpected return format from ORCID: {0}".format( repr(response.data))) return db.session.add(user) # Refresh user cache current_user.reload()
def access(): """Access.""" try: email = EmailConfirmationSerializer().load_token(request.values["mailcookie"])["data"]["email"] u = User.query.filter(User.email == email).one() u.note = 1 try: db.session.commit() except SQLAlchemyError: db.session.rollback() flash(_("Authorization failled."), "error") redirect("/") if current_user.is_authenticated(): current_user.reload() flash(_("Your email address has been validated"), "success") else: UserInfo(u.id).reload() flash(_("Your email address has been validated, and you can " "now proceed to sign-in."), "success") except Exception: current_app.logger.exception("Authorization failed.") flash(_("The authorization token is invalid."), "error") return redirect("/")
def before_request(): if current_user.is_authenticated: current_user.update(last_seen=datetime.utcnow()) current_user.reload()
def deleteLit(): default_pref = { "author": True, "yrPublished": True, "title": True, "sourceTitle": True, "primaryField": True, "creator": True, "dateCreatedOn": True, "editor": False, "refType": False, "lastModified": False, "lastModifiedBy": False } preferences = request.cookies.get('preferences') if not preferences: # Return default preferences preferences = default_pref else: # Otherwise convert the cookie to a python object preferences = json.loads(preferences) if current_user.role.name == 'User': lit_stored = Lit.objects( creator__exact=current_user.name).order_by('title') total = lit_stored.count() search = False q = request.args.get('q') if q: search = True page = request.args.get('page', type=int, default=1) start = page * 30 - 30 end = page * 30 lit_showed = lit_stored[start:end] pagination = Pagination(page=page, per_page=30, total=total, record_name='resources') else: total = 0 lit_showed = None page = request.args.get('page', type=int, default=1) pagination = Pagination(page=page, per_page=30, total=total, record_name='resources') form = DeleteLitForm() if form.validate_on_submit(): title = form.title.data.strip() refType = form.refType.data.strip() lit = Lit.objects(title__exact=title, refType__exact=refType).first() if lit is None: flash("No literature like this in the database") elif current_user.role.name == 'User' and lit.creator != current_user.name: flash( 'You did not upload this literature. Please delete a literature you uploaded.' ) else: userHist = UserEditRecord(litEdited=str(lit.id), litEditedTitle=lit.title, operation="delete") current_user.update(push__u_edit_record=userHist) current_user.reload() lit.delete() flash("Literature has been deleted!") return redirect(url_for('lit.deleteLit')) return render_template('deleteLit.html', form=form, lit_showed=lit_showed, pagination=pagination, total=total, preferences=preferences)
def addLit(): total = 0 count = 0 # Add form for file upload formFile = UploadLitFile() # Create new add lit form form = AddLitForm() if formFile.submit.data and formFile.validate_on_submit(): if formFile.file.data.filename == '': flash('No Selected File') else: filename = secure_filename(formFile.file.data.filename) file = formFile.file.data flash('File uploaded. Processed') read = file.readlines() lines = read[0].split('\r') total = len(lines) - 1 print('total', total) count = 0 for line in lines[1:]: if count == total: break entry = line.split('\t') print(len(entry)) lit = Lit.objects(refType__iexact=entry[0], title__iexact=entry[2]).first() if lit is not None: flash("This entry is already in the database.") else: count = count + 1 print(str(entry[12])) for x in range(0, 17): entry[x].strip() lit = Lit(refType=entry[0], author=entry[1], title=entry[2], pages=entry[10], primaryField=entry[14], creator=current_user.name) lit.save() lit.update(set__yrPublished=entry[3]) lit.update(set__sourceTitle=entry[4]) lit.update(set__editor=entry[5]) lit.update(set__placePublished=entry[6]) lit.update(set__publisher=entry[7]) lit.update(set__volume=entry[8]) lit.update(set__number=entry[9]) lit.update(set__abstract=entry[12]) lit.update(set__notes=entry[13]) lit.update(set__secondaryField=entry[15]) lit.update(set__DOI=entry[17]) # If the link field is not empty, save the link too # If statement is done because update fails when attempting to save an empty string if form.link.data is not None: lit.update(set__link=entry[16]) # Add keywords into the db as a listField keywordslist = entry[11].split(",") for x in range(0, len(keywordslist)): key = str(keywordslist[x].strip()) lit.update(push__keywords=key) editHist = LitEditRecord(lastUserEdited=current_user.name) # Update lit history lit.update(push__l_edit_record=editHist) lit.update(set__last_edit=editHist) lit.reload() # Update user edit history userHist = UserEditRecord(litEdited=str(lit.id), operation="add", litEditedTitle=lit.title) current_user.update(push__u_edit_record=userHist) current_user.reload() flash("Successfully added!") return redirect(url_for('lit.addLit')) else: filename = None # On form submission if form.submit.data and form.validate_on_submit(): # If the literature is already in the database, then do not add the material, return lit = Lit.objects(title__iexact=form.title.data, author__iexact=form.author.data, pages__iexact=form.pages.data).first() if lit is not None: flash("This is already in the DB. This is the page") return render_template('lit.html', lit=lit) # Create a new lit object, save to db first, then update fields lit = Lit(refType=form.refType.data, title=form.title.data, pages=form.pages.data, author=form.author.data, primaryField=form.primaryField.data, creator=current_user.name) lit.save() lit.update(set__yrPublished=form.yrPublished.data) lit.update(set__sourceTitle=form.sourceTitle.data) lit.update(set__editor=form.editor.data) lit.update(set__placePublished=form.placePublished.data) lit.update(set__publisher=form.publisher.data) lit.update(set__volume=form.volume.data) lit.update(set__number=form.number.data) lit.update(set__abstract=form.abstract.data) lit.update(set__notes=form.notes.data) lit.update(set__secondaryField=form.secondaryField.data) # Add user's edit in edit history editHist = LitEditRecord(lastUserEdited=current_user.name) # If the link field is not empty, save the link too # If statement is done because update fails when attempting to save an empty string if form.link.data is not None: lit.update(set__link=form.link.data) # Add keywords into the db as a listField keywordslist = (form.keywords.data).split(",") for x in range(0, len(keywordslist)): key = str(keywordslist[x].strip()) lit.update(push__keywords=key) # Update lit history lit.update(push__l_edit_record=editHist) lit.update(set__last_edit=editHist) lit.reload() # Update user edit history userHist = UserEditRecord(litEdited=str(lit.id), operation="add", litEditedTitle=lit.title) current_user.update(push__u_edit_record=userHist) current_user.reload() flash("Successfully added!") return redirect(url_for('lit.lit', lit_id=lit.id)) return render_template('addLit.html', form=form, formFile=formFile, filename=filename, total=total, count=count)