Exemple #1
0
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
Exemple #2
0
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
Exemple #4
0
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()