def process_request(self, request):
     if not request.user.is_authenticated():
         return
     urlsModule = __import__(settings.ROOT_URLCONF, {}, {}, [''])
     skipList = getattr(urlsModule, 'ignore_latest_activity', None)
     skippedPath = request.path
     if skippedPath.startswith('/'):
         skippedPath = skippedPath[1:]
     if skipList is not None:
         for expression in skipList:
             compiledVersion = None
             if not compiledLists.has_key(expression):
                 compiledLists[expression] = re.compile(expression)
             compiledVersion = compiledLists[expression]
             if compiledVersion.search(skippedPath):
                 return
     
     activity = None
     try:
         activity = request.user.useractivity
     except:
         activity = UserActivity()
         activity.user = request.user
         activity.latest_activity = datetime.now()
         activity.current_template = request.build_absolute_uri()
         activity.save()
         return
     activity.latest_activity = datetime.now()
     activity.current_template = request.build_absolute_uri()
     activity.save()
示例#2
0
def before_request():
    g.user = current_user
    if g.user is not None and g.user.is_authenticated():
        g.activity = UserActivity.get_activity(UserActivity)
        g.my_activity = UserActivity.get_my_activity(UserActivity, g.user.id)
    else:
        g.activity = None
        g.my_activity = None
示例#3
0
def add_activity():
    """ Add activity to user's list of saved activities """
    try:
        # Gets form data and checks for activity_id
        data = request.form
        if data.get('activity_id'):
            # If user is logged in, check if they already have saved this activity
            if session.get('user_id'):
                user_activity = UserActivity.query.filter_by(activity_id=data['activity_id'], user_id=session['user_id']).first()
                # If it hasn't already been saved, save it
                if user_activity is None:
                    user_activity = UserActivity(activity_id=data['activity_id'], user_id=session['user_id'])
                    activity = Activity.query.get(data['activity_id'])
                    # If the relevant activity does not exist in the DB, create it too
                    if activity is None:
                        activity = Activity(**data)
                        db.session.add(activity)
                        db.session.commit()
                    db.session.add(user_activity)
                    db.session.commit()
            else:
                # If not logged in, store the id of the current activity and redirect to login
                session['temp_activity_id'] = data['activity_id']
                return login()
    except exc.SQLAlchemyError as e:
        # In case of a DB error, roll it back
        db.session.rollback()
    except Exception as e:
        # If an error occurs, returns an error page
        return error(e.args)
    # Go back to home page
    return index()
示例#4
0
  def process_request(self, request):

    # Checks if we need to keep track of this activity...
    request_url = request.META.get('PATH_INFO', '').strip()
    if request_url[0] == '/': request_url = request_url[1:]
    if True in [bool(k.match(request_url)) for k in NOTRACK_REGEXP]:
      self.activity = None
      return

    self.activity = UserActivity(
      user = request.user if request.user.is_authenticated() else None,
      date = datetime.now(),
      request_url = request.META.get('PATH_INFO', ''),
      referer_url = request.META.get('HTTP_REFERER', ''),
      client_address = request.META.get('REMOTE_ADDR', ''),
      client_host = request.META.get('REMOTE_HOST', ''), 
      browser_info = request.META.get('HTTP_USER_AGENT', ''),
      languages = request.META.get('HTTP_ACCEPT_LANGUAGE', ''),
    )

    # Makes 1 database lookup. If the city database is available, prefer that 
    # one, otherwise, mark the city as "Unknown" and perform country lookup.
    try_set_location(self.activity)

    # Makes a second database lookup for decoding the UserAgent string
    try_ua_parsing(self.activity)
示例#5
0
def download_artists(user, username, limit=500, period='overall', page=1):
    """Download artists from a LastFM account into the user's library.

    Period options: overall | 7day | 1month | 3month | 6month | 12month"""

    data = grab_json(
        "http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user={}&limit={}&api_key={}&period={}&page={}&format=json"
        .format(username, limit, app.config.get('LAST_FM_API_KEY'), period,
                page))

    artists_added = 0

    for artist in data.get('topartists').get('artist'):
        found_import = ArtistImport.query.filter_by(
            user_id=user.id, import_name=artist['name']).first()
        if found_import is None:
            new_import = ArtistImport(user_id=user.id,
                                      import_name=artist['name'],
                                      import_mbid=artist['mbid'],
                                      import_method=ImportMethod.LASTFM)
            db.session.add(new_import)
            artists_added += 1

    activity = UserActivity(user_id=user.id,
                            activity=ActivityTypes.LASTFM_IMPORT)
    db.session.add(activity)

    db.session.commit()

    return {'artists_added': artists_added}
示例#6
0
def problem_submit():
    params = utils.flat_multi(request.form)
    pid = params.get("pid")
    flag = params.get("flag")
    tid = session.get("tid")
    _user = user.get_user().first()
    username = _user.username

    problem = Problems.query.filter_by(pid=pid).first()
    team = Teams.query.filter_by(tid=tid).first()
    solved = Solves.query.filter_by(pid=pid, tid=tid, correct=1).first()
    if solved:
        raise WebException("You already solved this problem.")

    flag_tried = Solves.query.filter_by(pid=pid, flag=flag).first()
    if flag_tried:
        raise WebException("Your team has already tried this solution.")

    if problem:
        if problem.category == "Programming":
            raise WebException(
                "Please submit programming problems using the Programming interface."
            )
        grader = imp.load_source("grader", problem.grader)
        random = None
        if problem.autogen:
            random = autogen.get_random(pid, tid)
        correct, response = grader.grade(random, flag)

        solve = Solves(pid, _user.uid, tid, flag, correct)
        db.session.add(solve)
        db.session.commit()

        if correct:
            # Wait until after the solve has been added to the database before adding bonus
            solves = get_solves(pid)
            solve.bonus = [-1, solves][solves < 4]

            cache.invalidate_memoization(get_solves, pid)

            if _user:
                activity = UserActivity(_user.uid, 3, tid=tid, pid=pid)
                db.session.add(activity)

            db.session.commit()
            logger.log(__name__,
                       "%s has solved %s by submitting %s" %
                       (team.teamname, problem.title, flag),
                       level=logger.WARNING)
            return {"success": 1, "message": response}
        else:
            logger.log(__name__,
                       "%s has incorrectly submitted %s to %s" %
                       (team.teamname, flag, problem.title),
                       level=logger.WARNING)
            raise WebException(response)

    else:
        raise WebException("Problem does not exist!")
示例#7
0
 def post(self):
     request_data=request.get_json()
     list_data=list(request_data)
     for data in list_data:
         useractivity=UserActivity(record_id=data['record_id'],user_email=data['user_email'],post_id=data['post_id'],contributed_date=data['contributed_date'],activity_category=data['activity_category'])
         db_session.add(useractivity)
         db_session.commit()
     return {'Message':'Success'}
示例#8
0
def register_user(name, username, email, password, utype, admin=False):
    user = Users(name, username, email, password, utype=utype, admin=admin)
    token = utils.generate_string(length=64)
    user.email_token = token
    with app.app_context():
        db.session.add(user)
        db.session.commit()
        join_activity = UserActivity(user.uid, 0)
        db.session.add(join_activity)
        db.session.commit()
        db.session.close()
    return True
示例#9
0
def login():
    form = LoginForm()

    if flask.request.method == "POST":
        if form.validate_on_submit():
            user = User.query.filter_by(username=form.username.data).first()
            if user is None:
                return render_template(
                    "login.html",
                    title="Login",
                    form=form,
                    form_title="Login",
                    login_failure=True,
                )

            if not check_password_hash(user.password, form.password.data):
                abort(403)

            user.create_session()
            user = user.save()
            login_user(user)
            user_activity = UserActivity(activity_name="login", user=user)
            user_activity.save()
            return redirect(url_for("spell_checker"))
        else:
            return render_template(
                "login.html",
                title="Login",
                form=form,
                form_title="Login",
                login_failure=True,
            )

    # default is a GET request
    return render_template("login.html",
                           title="Login",
                           form=form,
                           form_title="David's Spell Checker")
示例#10
0
def team_create():
    params = utils.flat_multi(request.form)
    _user = user.get_user().first()
    if (_user.tid is not None and _user.tid >= 0) or get_team(
            owner=_user.uid).first() is not None:
        raise WebException("You're already in a team!")

    verify_to_schema(TeamSchema, params)
    teamname = params.get("teamname")
    school = params.get("school")

    team = Teams(teamname, school, _user.uid, _user.utype != 1)
    with app.app_context():
        db.session.add(team)
        db.session.commit()
        Users.query.filter_by(uid=_user.uid).update({"tid": team.tid})
        team_activity = UserActivity(_user.uid, 1, tid=team.tid)
        db.session.add(team_activity)
        db.session.commit()

        session["tid"] = team.tid
    return {"success": 1, "message": "Success!"}
示例#11
0
def submit_program():
    params = utils.flat_multi(request.form)

    pid = params.get("pid")
    tid = session.get("tid")
    _user = user.get_user().first()

    language = params.get("language")
    submission_contents = params.get("submission")

    _problem = problem.get_problem(pid=pid).first()
    if _problem is None:
        raise WebException("Problem does not exist.")

    if _problem.category != "Programming":
        raise WebException("Can't judge this problem.")

    if language not in extensions:
        raise WebException("Language not supported.")

    solved = Solves.query.filter_by(pid=pid, tid=tid, correct=1).first()
    if solved:
        raise WebException("You already solved this problem.")

    judge_folder = os.path.join(app.config["GRADER_FOLDER"], pid)
    if not os.path.exists(judge_folder):
        os.makedirs(judge_folder)

    submission_folder = os.path.join(judge_folder, utils.generate_string())
    while os.path.exists(submission_folder):
        submission_folder = os.path.join(judge_folder, utils.generate_string())

    os.makedirs(submission_folder)

    submission_path = os.path.join(submission_folder,
                                   "program.%s" % extensions[language])

    open(submission_path, "w").write(submission_contents)
    message, log, duration = judge(submission_path, language, pid)

    number = ProgrammingSubmissions.query.filter_by(tid=tid).with_entities(
        ProgrammingSubmissions.number).order_by(
            ProgrammingSubmissions.number.desc()).first()

    if number is None:
        number = 1
    else:
        number = number[0] + 1

    submission = ProgrammingSubmissions(pid, tid, submission_path, message,
                                        log, number, duration)

    correct = message == "Correct!"

    with app.app_context():
        solve = Solves(pid, _user.uid, tid, submission_path, correct)
        db.session.add(solve)
        db.session.add(submission)
        db.session.commit()

        if correct:
            # Wait until after the solve has been added to the database before adding bonus
            solves = problem.get_solves(pid=pid)
            solve.bonus = [-1, solves][solves < 3]
            db.session.add(solve)
            cache.invalidate_memoization(problem.get_solves, pid)

            if _user:
                activity = UserActivity(_user.uid, 3, tid=tid, pid=pid)
                db.session.add(activity)

            db.session.commit()
        new = {
            "psid": submission.psid,
            "title": _problem.title,
            "message": submission.message,
            "log": submission.log,
            "date": utils.isoformat(submission.date),
            "number": submission.number
        }

    shutil.rmtree(submission_folder)

    return {
        "success": message == "Correct!",
        "message": message,
        "new_submission": new
    }
示例#12
0
def logout():
    user_id = current_user.id
    logout_user()
    user_activity = UserActivity(activity_name="logout", user_id=user_id)
    user_activity.save()
    return redirect(url_for("login"))
    def process_request(self, request):
        if not request.user.is_authenticated():
            return
        urlsModule = __import__(settings.ROOT_URLCONF, {}, {}, [''])
        skipList = getattr(urlsModule, 'ignore_latest_activity', None)
        skippedPath = request.path
        if skippedPath.startswith('/'):
            skippedPath = skippedPath[1:]
        if skipList is not None:
            for expression in skipList:
                compiledVersion = None
                if not compiledLists.has_key(expression):
                    compiledLists[expression] = re.compile(expression)
                compiledVersion = compiledLists[expression]
                if compiledVersion.search(skippedPath):
                    return

        activity = None
        try:
            activity = request.user.useractivity
        except:
            activity = UserActivity()
            activity.user = request.user
            activity.latest_activity = datetime.now()
            activity.current_template = request.build_absolute_uri()
            activity.save()
            return
        activity.latest_activity = datetime.now()
        activity.current_template = request.build_absolute_uri()
        activity.save()