def characters(self): try: key_id = session.get('key_id') vcode = session.get('vcode') registration_type = session.get('registration_type') except KeyError: flash('No API Key found in session.', 'danger') return redirect(url_for('RegisterView:index')) api_key = APIKey(key_id=key_id, vcode=vcode) try: api_key.get_characters() except Exception as e: current_app.logger.exception(e) flash('Could not fetch Character list: {}'.format(e.message)) return redirect(url_for('RegisterView:api')) acceptable_characters = set() for character in api_key.characters: status = character.get_status() if status == CharacterStatus.internal or status == CharacterStatus.ally: acceptable_characters.add(character) if not acceptable_characters: flash('We could not find any acceptable characters for you to register with.', 'danger') return redirect(url_for('RegisterView:index')) elif len(acceptable_characters) == 1: session['character'] = next(iter(acceptable_characters)).id return redirect(url_for('RegisterView:password')) else: return render_template('register/characters.html', api_key=api_key)
def password(self): character_id = session['character'] key_id = session['key_id'] vcode = session['vcode'] api_key = APIKey(key_id=key_id, vcode=vcode) api_key.update_api_key() for character in api_key.get_characters(): if character.id == character_id: break else: flash('Character #{} not found in API Key #{}, aborting.'.format(character_id, key_id), 'danger') return redirect(url_for('RegisterView:index')) form = RegisterForm() form.user_id.data = slugify(character.name, to_lower=True, separator='_') if form.validate_on_submit(): user = User( user_id=form.user_id.data, name=character.name, email=form.email.data, main_character_id=character.id ) user.update_password(form.password.data) user.api_keys.append(api_key) for character in api_key.get_characters(): user.characters.append(character) db.session.add(user) try: db.session.commit() except Exception as e: db.session.rollback() current_app.logger.exception(e) flash("Could not save user to database.", "danger") else: User.password_updated.send(user, form.password.data) session.clear() flash("Account created! Login now with {} and get started!".format(user.user_id), 'success') return redirect(url_for('AccountView:login')) return render_template('register/password.html', form=form, character=character)