Example #1
0
def _vote_up(db, storage, registry, uid, ts_add):
    user_id = session['user_id']
    db.session.add(Vote(user_id=user_id, timestamp=int(ts_add), song_id=uid))
    db.session.commit()
    broadcast('vote_up', {
        'uid': uid,
        'ts_add': int(ts_add),
        'user_id': user_id
        })

    return ''
Example #2
0
def oauth_authorized():

    remote_app = current_app.auth['app']

    # ripped off from Flask-OAuth
    # since `remote_app` should be defined in app start time
    if 'oauth_verifier' in request.args:
        data = remote_app.handle_oauth1_response()
    elif 'code' in request.args:
        data = remote_app.handle_oauth2_response()
    else:
        data = remote_app.handle_unknown_response()
    remote_app.free_request_token()
    # ---

    if data is None:
        return 'Access denied: reason=%s error=%s' % (
            request.args['error_reason'],
            request.args['error_description']
        )

    db = NodeIndex(current_app.config)

    session['oauth_token'] = (data['access_token'], '')

    user = current_app.auth['authenticator'].get_user_data()
    identity = current_app.auth['provider'] + ':' + str(user['id'])
    user_id = hashlib.sha1(identity).hexdigest()

    user_db = User.get(db.session, user_id)

    session['user_id'] = user_id
    session['user'] = user

    if not user_db:
        user_db = User(user_id=user_id, identity=identity,
                    secret_key=os.urandom(10).encode('hex'))
        db.add(user_db)

    db.query(User).filter_by(user_id=user_id).update({
        'name': user['name'],
        'picture': user['picture']
    })

    db.session.commit()

    broadcast('login', user_db.dict(private=False))

    next_page = request.args.get('next')

    if next_page:
        return redirect(next_page)
    else:
        return redirect(url_for('index'))
Example #3
0
def node_attach(db, storage, registry, user):
    """
    Attach to a node
    """
    node_id = request.form.get('node_id')

    registry.attach(node_id, request.form.get('address'), user.user_id)
    broadcast('attach', {
        'node_id': node_id,
        'owner': user.dict()
        })
    return ''
Example #4
0
def node_detach(db, storage, registry, user):
    """
    Detach from a node
    """
    node_id = request.form.get('node_id')

    registry.detach(node_id)
    broadcast('detach', {
        'node_id': node_id,
        'owner': user.dict()
        })

    return ''
Example #5
0
def _vote_undo(db, storage, registry, uid, ts_add):
    user_id = session['user_id']

    vote = db.session.query(Vote).filter_by(song_id=uid,
                                            timestamp=int(ts_add),
                                            user_id=user_id).first()
    if vote:
        db.session.delete(vote)
    db.session.commit()

    broadcast('vote_undo', {
        'uid': uid,
        'ts_add': int(ts_add),
        })

    return ''
Example #6
0
def _notify_start(db, storage, registry):
    global playing
    playing = db.session.query(QueueEntry).filter_by(waiting=True).\
      order_by(QueueEntry.timestamp).first()

    if playing:
        playing.waiting = False
        db.session.commit()

        broadcast('play', {
            'song': song(storage, playing.song_id),
            'user': User.get(db, playing.user_id).dict()
            }, ts=playing.timestamp)
        return ''
    else:
        return Response(jsonify(result='ERR_NO_NEXT').data,
                        mimetype='application/json', status=404)
Example #7
0
def enqueue(db, storage, registry, uid):
    if uid in storage:
        ts = int(time.time())
        user_id = session['user_id']
        db.session.add(QueueEntry(timestamp=ts, user_id=user_id, song_id=uid))
        db.session.commit()
        broadcast('add', {
            'song': song(storage, uid),
            'user': User.get(db, user_id).dict(),
            'self_vote': False,
            'num_votes': 0
        }, ts=ts)
        return jsonify({'id': uid})
    else:
        return Response(jsonify(result='ERR_NO_SUCH_SONG', id=uid).data,
                        mimetype='application/json', status=404)
        return jsonify(), 404
Example #8
0
def _search(db, storage, registry, term):
    term = unquote(term)

    res = list(storage.search(term, limit=10))

    if len(res) > 1:
        return json.dumps(res)
    elif len(res) == 1:
        ts = int(time.time())
        meta = res[0]
        db.session.add(QueueEntry(timestamp=ts, user_id=session['user_id'],
                                  song_id=meta['uid']))
        db.session.commit()
        broadcast('add', {
            'song': song(storage, meta['uid']),
            'user': User.get(storage.db, session['user_id']).dict(),
            'self_vote': False,
            'num_votes': 0
            }, ts=ts)
        meta['time'] = ts
        return jsonify(meta)
    else:
        return Response(jsonify(result='ERR_NO_RESULTS').data,
                        mimetype='application/json', status=404)
Example #9
0
def _notify_stop(db, storage, registry):
    global playing
    broadcast('stop', song(storage, playing.song_id), ts=playing.timestamp)
    playing = None
    return ''