def create_new_user(input_data): try: username = input_data.get('username') password = input_data.get('password') email = input_data.get('email') if username is None or password is None or email is None: resp = make_response("", 400) resp.headers["custom-message"] = 'Incomplete Data' return resp hash_pass = hashlib.sha256(password.encode()).hexdigest() new_user = dm.User() new_user.password = hash_pass new_user.user_name = username new_user.email = email dm.db.session.add(new_user) dm.db.session.commit() user_id = new_user.query.with_entities(dm.User.user_id).order_by( dm.User.user_id.desc()).first()[0] access_token = create_access_token(identity=username) refresh_token = create_refresh_token(identity=username) resp_data = json.dumps({ 'user_id': user_id, 'access_token': access_token, 'refresh_token': refresh_token }) resp = make_response(resp_data, 200) return resp except (KeyError, TypeError): dm.db.session.rollback() resp = make_response("", 400) resp.headers["custom-message"] = 'Could not create user' return resp
def callback(institute=""): """ Handle the Auth0 callback after login. """ # Handles response from token endpoint last_page = request.args.get("last_page", "") data = {"errors": [], "last_page": last_page, "form": []} try: # Look for the current user current_app.auth0.authorize_access_token() resp = current_app.auth0.get('userinfo') userinfo = resp.json() db = datamodels.get_session() user = datamodels.get_user_by_auth0_id(userinfo['sub']) if user is None: user = datamodels.get_user_by_email(userinfo['email']) if user is not None: # User is registered with email, but hasn't signed in w/ Auth0 yet user.auth0_id = userinfo['sub'] db.commit() elif user is None: # Register a new user. try: user = datamodels.User() user.email = user.username = userinfo['email'] user.first_name = userinfo['given_name'] user.last_name = userinfo['family_name'] user.auth0_id = userinfo['sub'] db.add(user) db.commit() except Exception as e: data["errors"].append("{}".format(e)) return render_template("welcome.html", **data) if "enrollments" in session: d = get_session_data(session, "enrollments") for course_id in d: course = datamodels.Course.find_by_id(int(course_id)) if course: course.enroll(user) if "anon_progress" in session: d = get_session_data(session, "anon_progress") merge_anonymous_data(user.id, d) session.pop("anon_progress") if "anon_surveys" in session: d = get_session_data(session, "anon_surveys") merge_anonymous_surveys_data(user.id, d) session.pop("anon_surveys") session["user_id"] = user.id session['jwt_payload'] = userinfo session['profile'] = { 'user_id': userinfo['sub'], 'name': userinfo['name'], 'picture': userinfo['picture'] } except Exception as e: data["errors"].append("{}".format(e)) return render_template("welcome.html", **data) return redirect(last_page or "/")
def makeUser( id=1, first_name="Homer", last_name="Simpson", email="*****@*****.**", username="******", password="******", phone_number="555-444-1234", dob=None, ): dob = dob or datetime.datetime.now() u = datamodels.User( id=id, first_name=first_name, last_name=last_name, email=email, username=username, phone_number=phone_number, dob=dob, ) u.password = password return u
def reseed(): session = datamodels.get_session() for student in stubs.students: user = copy.deepcopy(student) password = user.pop("password") u = datamodels.User(**user) u.password = password session.add(u) session.commit() c = datamodels.Course( title="Into to Social Enterprise", slug="fitzroy-academy", course_code="abc123", target_audience="Super early stage social enterprise founders, starting your first business or a new project from scratch.", skill_level="Introduction.", visibility="public", info="Start here! Basic business models and customer discovery, to pitching for investment. тЭдя╕П ЁЯЪА", workload_summary="This course will take 20-30 hours on average, and is best done in teams.", summary_html=""" <p><strong>Go from zero to one:</strong> From a basic idea to early customers, business models and getting the numbers right.</p> <p>We don't need any previous business experience, but by the end you'll cover quite complex topics like financial modelling, </p> <p><strong>On the social impact</strong> side of things, you'll define your impact model, look into creating behaviour change that lasts, and maybe even think about partnering with another organisation to create impact.</p> """, cover_image="/static/assets/images/lessons/customer-interviews.jpg", guest_access=True, draft=False, workload_title="", workload_subtitle="", ) session.add(c) session.commit() c.add_instructor(datamodels.get_user(1)) # Homer c.add_instructor(datamodels.get_user(2)) # Marge c.enroll(datamodels.get_user(3)) # Bart c.enroll(datamodels.get_user(4)) # Lisa c.enroll(datamodels.get_user(5)) # Maggie session.add(c) session.commit() for i, lesson in enumerate(stubs.lessons): lesson = copy.deepcopy(lesson) resources = lesson.pop("resources") segments = lesson.pop("segments") lesson.pop("id") lesson.pop("course_id") lesson["language"] = "en" new_lesson = datamodels.Lesson(**lesson) new_lesson.course = c c.lessons.append(new_lesson) session.add(new_lesson) session.commit() for j, segment in enumerate(segments): segment = copy.deepcopy(segment) segment["duration_seconds"] = get_seconds(segment.pop("duration")) segment.pop("lesson_id") segment.pop("course_id") segment.pop("template") # ultimately derived from external URL segment["slug"] = segment.pop("id") segment["language"] = "en" segment["type"] = SegmentType.video s = datamodels.Segment(**segment) new_lesson.segments.append(s) s.lesson = new_lesson session.add(s) for j, resource in enumerate(resources): resource = copy.deepcopy(resource) resource["language"] = resource.pop("lang") resource["slug"] = resource.pop("id") resource["order"] = j r = datamodels.Resource(**resource) r.lesson = new_lesson new_lesson.resources.append(r) session.add(r) session.commit() for user_progress in stubs.user_segment_progress: user = datamodels.User.find_by_email(user_progress["email"]) for lesson in user_progress["lessons"]: for slug, progress in lesson["progress"].items(): # we can search segments by slug because in stubs segments slugs are unique segment = ( datamodels.Segment.objects() .filter(datamodels.Segment.slug == slug) .first() ) datamodels.SegmentUserProgress.save_user_progress( segment.id, user.id, progress ) # default institute, whitout subdomain fitz_institute = datamodels.Institute(name="Fitzroyacademy", logo="", slug="") session.add(fitz_institute) session.commit() fitz_institute.add_admin(datamodels.get_user(1)) # Homer institute1 = datamodels.Institute(name="Jedi Temple", logo="", slug="jeditemple") session.add(institute1) session.commit() institute1.add_admin(datamodels.get_user(3)) # Bart session.commit()