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 ''
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'))
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 ''
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 ''
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 ''
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)
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
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)
def _notify_stop(db, storage, registry): global playing broadcast('stop', song(storage, playing.song_id), ts=playing.timestamp) playing = None return ''