def delete(self, type, external_user_id): """Unsubscribes from an external user""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return external_user_model = ExternalUser.all().filter('type =', type).filter( 'external_user_id =', external_user_id).get() youtify_user_model.external_user_subscriptions.remove( external_user_model.key()) youtify_user_model.save() external_user_model.subscribers.remove(youtify_user_model.key()) external_user_model.nr_of_subscribers = len( external_user_model.subscribers) if external_user_model.nr_of_subscribers > 0: external_user_model.get_last_updated = True else: external_user_model.get_last_updated = False external_user_model.save() self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def get(self): current_user = users.get_current_user() youtify_user = get_current_youtify_user_model() if (current_user is not None) and (youtify_user is None): youtify_user = create_youtify_user_model() path = os.path.join(os.path.dirname(__file__), 'html', 'translations.html') self.response.headers['Content-Type'] = 'text/html; charset=utf-8' self.response.out.write( template.render( path, { 'is_admin': simplejson.dumps(users.is_current_user_admin()), 'my_langs': simplejson.dumps(get_leader_langs_for_user(youtify_user)), 'my_user_email': current_user.email(), 'my_user_name': current_user.nickname().split('@')[0], 'my_user_id': youtify_user.key().id(), 'logout_url': users.create_logout_url('/'), 'languages': [ lang for lang in get_languages() if lang['enabled_in_tool'] ], }))
def post(self): """Follows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model is None: self.error(404) return if playlist_model.owner.key().id() == youtify_user_model.key().id(): self.error(400) self.response.out.write('You can not subscribe to your own playlists') return youtify_user_model.playlist_subscriptions.append(playlist_model.key()) youtify_user_model.save() playlist_model.followers.append(youtify_user_model.key()) playlist_model.save() create_subscribe_activity(youtify_user_model, playlist_model) send_new_subscriber_email(youtify_user_model, playlist_model) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def post(self): url_to_submit = self.request.get("url") video_title = self.request.get("videoTitle") url = "https://api.flattr.com/rest/v2/flattr" user = get_current_youtify_user_model() headers = {"Authorization": "Bearer %s" % user.flattr_access_token, "Content-Type": "application/json"} data = simplejson.dumps({"url": url_to_submit}) response = urlfetch.fetch( url=url, payload=data, method=urlfetch.POST, headers=headers, validate_certificate=VALIDATE_CERTIFICATE ) json = simplejson.loads(response.content) if json.get("message") == "ok" and "thing" in json: thing_id = str(json["thing"].get("id")) create_flattr_activity(user, thing_id, video_title) user.nr_of_flattrs += 1 user.save() elif json.get("error") == "flattr_once": pass else: logging.error("Error creating flattr click. Response: %s" % response.content) self.response.headers["Content-Type"] = "application/json" self.response.out.write(response.content)
def post(self, type, external_user_id): """Marks the external user as viewed""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.response.out.write('user not logged in') logging.info('user not logged in') self.error(403) return external_user_model = ExternalUser.all().filter('type =', type).filter( 'external_user_id =', external_user_id).get() if external_user_model == None: logging.info('external user ' + external_user_id + ' not found') self.response.out.write('external user ' + external_user_id + ' not found') self.error(404) return external_user_timestamp = ExternalUserTimestamp.all().filter( 'external_user ='******'user ='******'ok')
def get(self): redirect_uri = self.request.get("redirect_uri", "/") user = get_current_youtify_user_model() user.flattr_access_token = None user.flattr_user_name = None user.save() self.redirect(redirect_uri)
def post(self, type, external_user_id): """Marks the external user as viewed""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.response.out.write("user not logged in") logging.info("user not logged in") self.error(403) return external_user_model = ( ExternalUser.all().filter("type =", type).filter("external_user_id =", external_user_id).get() ) if external_user_model == None: logging.info("external user " + external_user_id + " not found") self.response.out.write("external user " + external_user_id + " not found") self.error(404) return external_user_timestamp = ( ExternalUserTimestamp.all() .filter("external_user ="******"user ="******"ok")
def delete(self, type, external_user_id): """Unsubscribes from an external user""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return external_user_model = ( ExternalUser.all().filter("type =", type).filter("external_user_id =", external_user_id).get() ) youtify_user_model.external_user_subscriptions.remove(external_user_model.key()) youtify_user_model.save() external_user_model.subscribers.remove(youtify_user_model.key()) external_user_model.nr_of_subscribers = len(external_user_model.subscribers) if external_user_model.nr_of_subscribers > 0: external_user_model.get_last_updated = True else: external_user_model.get_last_updated = False external_user_model.save() self.response.headers["Content-Type"] = "text/plain" self.response.out.write("ok")
def post(self): """Add a track to the favorite list""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) json = self.request.get('json', None) device = self.request.get('device') if json is None: self.error(400) return if playlist_model.owner.key() == youtify_user_model.key(): if youtify_user_model.device != device: self.error(409) self.response.out.write('wrong_device') return else: old_playlist = simplejson.loads(json) playlist_model.private = old_playlist.get('isPrivate', False) playlist_model.tracks_json = simplejson.dumps(old_playlist['videos']) playlist_model.owner = youtify_user_model playlist_model.title = old_playlist['title'] playlist_model.remote_id = old_playlist['remoteId'] playlist_model.json = None playlist_model.save() self.response.out.write(str(playlist_model.key().id())) else: self.error(403)
def post(self, uid): other_user = YoutifyUser.get_by_id(int(uid)) me = get_current_youtify_user_model() if other_user is None: self.error(400) self.response.out.write('Other user not found') return if me.key().id() == other_user.key().id(): self.error(400) self.response.out.write('You can not follow yourself') return if FollowRelation.all().filter('user1 =', me).filter('user2 =', other_user).get(): self.error(400) self.response.out.write('You already follow that user') return me.nr_of_followings += 1 other_user.nr_of_followers += 1 me.save() other_user.save() m = FollowRelation(user1=me.key().id(), user2=other_user.key().id()) m.put() create_follow_activity(me, other_user) send_new_follower_email(me, other_user) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def post(self): user = get_current_youtify_user_model() nickname = self.request.get('nickname', user.nickname) first_name = self.request.get('first_name', user.first_name) last_name = self.request.get('last_name', user.first_name) tagline = self.request.get('tagline', user.tagline) if nickname and not re.match('^[A-Za-z0-9_]{1,36}$', nickname): self.error(400) self.response.out.write('Nickname must be 1-36 alphanumerical characters (no whitespace)') return if nickname and nickname in BLOCKED_NICKNAMES: self.error(400) self.response.out.write('That nickname is not allowed.') return for u in YoutifyUser.all().filter('nickname_lower = ', nickname.lower()): if str(u.key().id()) != str(user.key().id()): self.error(409) self.response.out.write('Nickname is already taken') return user.nickname = nickname user.nickname_lower = nickname.lower() user.first_name = first_name user.last_name = last_name user.tagline = tagline user.save() self.response.headers['Content-Type'] = 'text/plain' self.response.out.write(get_display_name_for_youtify_user_model(user))
def get(self): user = get_current_youtify_user_model() cursor = self.request.get('cursor') response = urlfetch.fetch( url= 'http://api.soundcloud.com/me/activities/all?limit=30&oauth_token=' + user.soundcloud_access_token + '&cursor=' + cursor, method='GET', deadline=10, validate_certificate=True, headers={"Accept": "application/json"}) streamJson = yaml.load(response.content) stream = {'tracks': []} parsed = urlparse.urlparse(streamJson['next_href']) stream['cursor'] = urlparse.parse_qs(parsed.query)['cursor'] for item in streamJson['collection']: if item['type'] == 'track': track = { 'id': item['origin']['id'], 'title': item['origin']['title'], 'type': 'soundcloud' } stream['tracks'].append(track) self.response.write(simplejson.dumps(stream))
def post(self): """Post new suggestion""" lang_code = self.request.path.split('/')[-3] language = Language.all().filter('code =', lang_code).get() if language is None: self.error(404) user = get_current_youtify_user_model() if not (users.is_current_user_admin() or user.key() in language.leaders): self.error(403) translation_id = self.request.path.split('/')[-1] translation = Translation.get_by_id(int(translation_id)) if translation is None: self.error(404) translation.text = self.request.get('text') translation.save() self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('success')
def get(self): user = get_current_youtify_user_model() self.response.headers['Content-Type'] = 'application/json' self.response.out.write( simplejson.dumps( get_external_user_subscriptions_struct_for_youtify_user_model( user)))
def post(self): url_to_submit = self.request.get('url') video_title = self.request.get('videoTitle') url = 'https://api.flattr.com/rest/v2/flattr' user = get_current_youtify_user_model() headers = { 'Authorization': 'Bearer %s' % user.flattr_access_token, 'Content-Type': 'application/json', } data = simplejson.dumps({ 'url': url_to_submit, }) response = urlfetch.fetch(url=url, payload=data, method=urlfetch.POST, headers=headers, validate_certificate=VALIDATE_CERTIFICATE) json = simplejson.loads(response.content) if json.get('message') == 'ok' and 'thing' in json: thing_id = str(json['thing'].get('id')) create_flattr_activity(user, thing_id, video_title) user.nr_of_flattrs += 1 user.save() else: logging.error('Error creating flattr click. Response: %s' % response.content) self.response.headers['Content-Type'] = 'application/json' self.response.out.write(response.content)
def post(self): """Create new playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return json_playlist = simplejson.loads(self.request.get('json')) if json_playlist is None: self.error(500) playlist_model = Playlist(owner=youtify_user_model, json=None) playlist_model.private = json_playlist.get('isPrivate', False) playlist_model.tracks_json = simplejson.dumps(json_playlist['videos']) playlist_model.title = json_playlist['title'] playlist_model.put() youtify_user_model.playlists.append(playlist_model.key()) youtify_user_model.save() self.response.headers['Content-Type'] = 'application/json' self.response.out.write( simplejson.dumps( get_playlist_struct_from_playlist_model(playlist_model)))
def post(self): """Update playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split("/")[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) json = self.request.get("json", None) device = self.request.get("device") if json is None: self.error(400) return if playlist_model.owner.key() == youtify_user_model.key(): if youtify_user_model.device != device: self.error(409) self.response.out.write("wrong_device") return else: old_playlist = simplejson.loads(json) playlist_model.private = old_playlist.get("isPrivate", False) playlist_model.tracks_json = simplejson.dumps(old_playlist["videos"]) playlist_model.owner = youtify_user_model playlist_model.title = old_playlist["title"] playlist_model.remote_id = old_playlist["remoteId"] playlist_model.json = None playlist_model.save() self.response.out.write(str(playlist_model.key().id())) else: self.error(403)
def post(self, playlist_id): """Follows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model is None: self.error(404) return if playlist_model.owner.key().id() == youtify_user_model.key().id(): self.error(400) self.response.out.write( 'You can not subscribe to your own playlists') return if playlist_model.key() in youtify_user_model.playlist_subscriptions: self.error(400) self.response.out.write('You already subscribe to this playlist') return youtify_user_model.playlist_subscriptions.append(playlist_model.key()) youtify_user_model.save() playlist_model.followers.append(youtify_user_model.key()) playlist_model.nr_of_followers = len(playlist_model.followers) playlist_model.save() create_subscribe_activity(youtify_user_model, playlist_model) send_new_subscriber_email(youtify_user_model, playlist_model) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def post(self, type, external_user_id): """Subscribes to an external user""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return external_user_model = ExternalUser.all().filter('type =', type).filter('external_user_id =', external_user_id).get() if external_user_model is None: external_user_model = ExternalUser(type=type, external_user_id=external_user_id) # @XXX should not trust client with this information, fetch from server instead external_user_model.username = self.request.get('username') external_user_model.avatar_url = self.request.get('avatar_url') external_user_model.get_last_updated = True external_user_model.save() if external_user_model.key() in youtify_user_model.external_user_subscriptions: self.error(400) self.response.out.write('You already subscribe to this external user') return youtify_user_model.external_user_subscriptions.append(external_user_model.key()) youtify_user_model.save() external_user_model.subscribers.append(youtify_user_model.key()) external_user_model.nr_of_subscribers = len(external_user_model.subscribers) external_user_model.get_last_updated = True external_user_model.save() create_external_subscribe_activity(youtify_user_model, external_user_model) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def get(self): session = lastfm_request('auth.getSession', 'GET', {'token': self.request.get('token')}) if 'session' in session: user = get_current_youtify_user_model() user.lastfm_user_name = session['session']['name'] user.lastfm_access_token = session['session']['key'] user.save() redirect_uri = self.request.cookies.get('redirect_uri') or '/' self.response.headers[ 'Set-Cookie'] = 'redirect_uri=deleted; expires=Thu, 01 Jan 1970 00:00:00 GMT' self.redirect('/') else: self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Last.fm connection failed') self.response.out.write('\n\n') self.response.out.write(str(session))
def post(self): user = get_current_youtify_user_model() user.send_new_follower_email = self.request.get('send_new_follower_email') == 'true' user.send_new_subscriber_email = self.request.get('send_new_subscriber_email') == 'true' user.save() settings = get_settings_struct_for_youtify_user_model(user) self.response.out.write(simplejson.dumps(settings))
def post(self): """Add a track to the favorite list""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) json = self.request.get('json', None) device = self.request.get('device') if json is None: self.error(400) return if playlist_model.owner.key() == youtify_user_model.key(): if youtify_user_model.device != device: self.error(409) self.response.out.write('wrong_device') return else: old_playlist = simplejson.loads(json) playlist_model.private = old_playlist.get('isPrivate', False) playlist_model.tracks_json = simplejson.dumps( old_playlist['videos']) playlist_model.owner = youtify_user_model playlist_model.title = old_playlist['title'] playlist_model.remote_id = old_playlist['remoteId'] playlist_model.json = None playlist_model.save() self.response.out.write(str(playlist_model.key().id())) else: self.error(403)
def get(self): # Maybe the user pressed cancel if self.request.path.lower().find('not_approved=true') > 0: self.redirect('/') return session = dropbox.session.DropboxSession(config.DROPBOX_APP_KEY, config.DROPBOX_APP_SECRET, config.DROPBOX_ACCESS_TYPE) user = get_current_youtify_user_model() if user: # get access token request_token = OAuthToken.from_string(user.dropbox_access_token) session.request_token = request_token access_token = session.obtain_access_token(request_token) user.dropbox_access_token = access_token.to_string() # get user name session.token = access_token client = dropbox.client.DropboxClient(session) info = client.account_info() user.dropbox_user_name = info['display_name'] user.save() self.redirect('/') else: self.error(403) self.response.out.write('User not logged in')
def get(self): redirect_uri = self.request.get('redirect_uri', '/') user = get_current_youtify_user_model() user.flattr_access_token = None user.flattr_user_name = None user.save() self.redirect(redirect_uri)
def get(self, path): """List content in path""" filetypes = ['.mp3', '.mp4', '.ogg', '.wav'] user = get_current_youtify_user_model() if user is None: self.error(403) self.response.out.write('User not logged in') return access_token = OAuthToken.from_string(user.dropbox_access_token) session = dropbox.session.DropboxSession(config.DROPBOX_APP_KEY, config.DROPBOX_APP_SECRET, config.DROPBOX_ACCESS_TYPE) session.token = access_token client = dropbox.client.DropboxClient(session) path = '/' + path dirs = [] mediafiles = [] try: metadata = client.metadata(path) if 'contents' in metadata: for item in metadata['contents']: if item['is_dir']: dirs.append(item['path']) else: for filetype in filetypes: if item['path'].lower().endswith(filetype): # all currently supported filetypes are 4 chars long title = ' - '.join(item['path'].split('/'))[3:-4] track = { 'videoId': item['path'], 'title': title, 'type': 'dropbox' } mediafiles.append(track) break except: pass self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps({'dirs': dirs, 'media': mediafiles}))
def post(self, playlist_id): """Follows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model is None: self.error(404) return if playlist_model.owner.key().id() == youtify_user_model.key().id(): self.error(400) self.response.out.write("You can not subscribe to your own playlists") return if playlist_model.key() in youtify_user_model.playlist_subscriptions: self.error(400) self.response.out.write("You already subscribe to this playlist") return youtify_user_model.playlist_subscriptions.append(playlist_model.key()) youtify_user_model.save() playlist_model.followers.append(youtify_user_model.key()) playlist_model.nr_of_followers = len(playlist_model.followers) playlist_model.save() create_subscribe_activity(youtify_user_model, playlist_model) send_new_subscriber_email(youtify_user_model, playlist_model) self.response.headers["Content-Type"] = "text/plain" self.response.out.write("ok")
def get(self): """Set a new device token for the user""" user = get_current_youtify_user_model() user.device = generate_device_token() user.save() json = {'device': user.device} self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(json))
def get(self): """Set a new device token for the user""" user = get_current_youtify_user_model() user.device = generate_device_token() user.save() json = {"device": user.device} self.response.headers["Content-Type"] = "application/json" self.response.out.write(simplejson.dumps(json))
def get(self): """Get the users playlists, including private ones""" user = get_current_youtify_user_model() if user: json = get_playlist_structs_for_youtify_user_model(user, include_private_playlists=True) else: json = [] self.response.headers["Content-Type"] = "application/json" self.response.out.write(simplejson.dumps(json))
def get(self): """Get the currnet user, incuding private data""" user = get_current_youtify_user_model() if user: json = get_youtify_user_struct(user, include_private_data=True) else: json = {} self.response.headers["Content-Type"] = "application/json" self.response.out.write(simplejson.dumps(json))
def get(self): """Get the users playlists, including private ones""" user = get_current_youtify_user_model() if user: json = get_playlist_overview_structs(user, True) else: json = [] self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(json))
def post(self): username = self.request.get("username") user = get_current_youtify_user_model() user.youtube_username = username user.save() self.response.headers["Content-Type"] = "text/plain" self.response.out.write("ok")
def post(self): username = self.request.get('username') user = get_current_youtify_user_model() user.youtube_username = username user.save() self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')
def get(self): """Get the currnet user, incuding private data""" user = get_current_youtify_user_model() if user: json = get_youtify_user_struct(user, include_private_data=True) else: json = {} self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(json))
def post(self): user = get_current_youtify_user_model() user.send_new_follower_email = self.request.get('send_new_follower_email') == 'true' user.send_new_subscriber_email = self.request.get('send_new_subscriber_email') == 'true' user.lastfm_scrobble_automatically = self.request.get('lastfm_scrobble_automatically') == 'true' user.save() logging.info(self.request) settings = get_settings_struct_for_youtify_user_model(user) self.response.out.write(simplejson.dumps(settings))
def get(self): redirect_uri = self.request.get('redirect_uri', '/') user = get_current_youtify_user_model() user.lastfm_user_name = None user.lastfm_subscriber = None user.lastfm_access_token = None user.save() self.redirect(redirect_uri)
def get(self): """Delete a dropbox connection""" user = get_current_youtify_user_model() if user: user.dropbox_access_token = None user.dropbox_user_name = None user.save() else: self.error(403) self.response.out.write('User not logged in') return self.redirect('/')
def get(self): """Callback for connecting to a dropbox account""" sess = dropbox.session.DropboxSession(config.DROPBOX_APP_KEY, config.DROPBOX_APP_SECRET, config.DROPBOX_ACCESS_TYPE) request_token = sess.obtain_request_token() url = sess.build_authorize_url(request_token, config.DROPBOX_CALLBACK_URL) user = get_current_youtify_user_model() if user: user.dropbox_access_token = request_token.to_string() user.save() self.redirect(url) else: self.error(403) self.response.out.write('User not logged in')
def get(self): current_user = users.get_current_user() user = get_current_youtify_user_model() if (current_user is not None) and (user is None): user = create_youtify_user_model() path = os.path.join(os.path.dirname(__file__), 'html', 'admin.html') self.response.headers['Content-Type'] = 'text/html; charset=utf-8' self.response.out.write(template.render(path, { 'my_user_name': user.google_user2.nickname().split('@')[0], 'my_user_email': user.google_user2.email(), 'my_user_id': user.key().id(), 'logout_url': users.create_logout_url('/'), 'languages': [lang for lang in get_languages() if lang['enabled_in_tool']], }))
def post(self): user = get_current_youtify_user_model() user.send_new_follower_email = self.request.get( 'send_new_follower_email') == 'true' user.send_new_subscriber_email = self.request.get( 'send_new_subscriber_email') == 'true' user.lastfm_scrobble_automatically = self.request.get( 'lastfm_scrobble_automatically') == 'true' user.save() logging.info(self.request) settings = get_settings_struct_for_youtify_user_model(user) self.response.out.write(simplejson.dumps(settings))
def get(self): my_followers_struct = [] my_followings_struct = [] settings_struct = {} youtify_user_struct = None current_user = users.get_current_user() youtify_user_model = get_current_youtify_user_model() if (current_user is not None) and (youtify_user_model is None): youtify_user_model = create_youtify_user_model() if youtify_user_model is not None: youtify_user_model.device = generate_device_token() youtify_user_model.last_login = datetime.now() youtify_user_struct = get_youtify_user_struct(youtify_user_model, include_private_data=True) # https://developers.google.com/appengine/docs/python/runtime#Request_Headers youtify_user_model.country = self.request.headers.get('X-AppEngine-Country', None) youtify_user_model.reqion = self.request.headers.get('X-AppEngine-Region', None) youtify_user_model.city = self.request.headers.get('X-AppEngine-City', None) youtify_user_model.latlon = self.request.headers.get('X-AppEngine-CityLatLong', None) youtify_user_model.save() my_followers_struct = get_followers_for_youtify_user_model(youtify_user_model) my_followings_struct = get_followings_for_youtify_user_model(youtify_user_model) settings_struct = get_settings_struct_for_youtify_user_model(youtify_user_model) lang_code = auto_detect_language(self.request) json = { 'ON_PRODUCTION': config.ON_PRODUCTION, 'SEARCH_STATS_URL': config.SEARCH_STATS_URL, 'languagesFromServer': [lang for lang in get_languages() if lang['enabled_on_site']], 'device': youtify_user_model is not None and youtify_user_model.device, 'user': youtify_user_struct, 'lastNotificationSeenTimestamp': youtify_user_model is not None and youtify_user_model.last_notification_seen_timestamp, 'myFollowers': my_followers_struct, 'myFollowings': my_followings_struct, 'settingsFromServer': settings_struct, 'autoDetectedLanguageByServer': lang_code, 'autoDetectedTranslations': get_deployed_translations_struct(lang_code), 'loginUrl': users.create_login_url('/'), 'logoutUrl': users.create_logout_url('/'), } self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(json));
def get(self): url = 'http://api.soundcloud.com/oauth2/token' http_method = 'POST' params = { 'client_id': config.SOUNDCLOUD_CLIENTID, 'client_secret': config.SOUNDCLOUD_CLIENT_SECRECT, 'redirect_uri': config.SOUNDCLOUD_REDIRECT_URL, 'grant_type': "authorization_code", 'code': self.request.get('code') } payload = urllib.urlencode(params) response = urlfetch.fetch(url=url, payload=payload, method=http_method, deadline=10, validate_certificate=True) session = yaml.load(response.content) if 'access_token' in session: response = urlfetch.fetch( url='http://api.soundcloud.com/me.json?oauth_token=' + session['access_token'], method='GET', deadline=10, validate_certificate=True, headers={"Accept": "application/json"}) me = yaml.load(response.content) user = get_current_youtify_user_model() user.soundcloud_user_name = me['username'] user.soundcloud_access_token = session['access_token'] user.save() redirect_uri = self.request.cookies.get('redirect_uri') or '/' self.response.headers[ 'Set-Cookie'] = 'redirect_uri=deleted; expires=Thu, 01 Jan 1970 00:00:00 GMT' self.redirect(redirect_uri) else: self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Soundcloud connection failed') self.response.out.write('\n\n') self.response.out.write(str(session))
def post(self): options = { 'artist': self.request.get('artist'), 'track': self.request.get('track'), 'timestamp': self.request.get('timestamp') } session = lastfm_request('track.scrobble', 'POST', options, get_current_youtify_user_model()) self.response.headers['Content-Type'] = 'application/json' if 'scrobbles' in session: self.response.out.write(simplejson.dumps({ 'success': True, 'result': session['scrobbles']['scrobble'] })) else: self.response.out.write(simplejson.dumps({ 'success': False }))
def post(self): user = get_current_youtify_user_model() val = self.request.get("val") json = {"message": ""} if user: if val > user.last_notification_seen_timestamp: user.last_notification_seen_timestamp = val user.save() json["message"] = "timestamp updated" else: json["message"] = "newer timestamp already set" else: json["message"] = "no user found" self.response.headers["Content-Type"] = "application/json" self.response.out.write(simplejson.dumps(json))
def get(self): """Get playlist""" playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) playlist_struct = get_playlist_struct_from_playlist_model(playlist_model) if playlist_model.private and playlist_model.owner.key() != get_current_youtify_user_model().key(): self.error(403) return if playlist_struct: self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(playlist_struct)) else: self.error(404)
def get(self): code = self.request.get('code') url = 'https://flattr.com/oauth/token' headers = { 'Authorization': 'Basic %s' % base64.b64encode(config.CLIENT_ID + ":" + config.CLIENT_SECRET), 'Content-Type': 'application/json', } data = simplejson.dumps({ 'code': code, 'redirect_uri': config.REDIRECT_URL, 'grant_type': 'authorization_code', }) response = urlfetch.fetch(url=url, payload=data, method=urlfetch.POST, headers=headers, validate_certificate=VALIDATE_CERTIFICATE) response = simplejson.loads(response.content) if 'access_token' in response: user = get_current_youtify_user_model() user.flattr_access_token = response['access_token'] user.flattr_scope = FLATTR_SCOPE update_fattr_user_info(user) user.save() redirect_uri = self.request.cookies.get('redirect_uri') if redirect_uri: self.response.headers[ 'Set-Cookie'] = 'redirect_uri=deleted; expires=Thu, 01 Jan 1970 00:00:00 GMT' self.redirect(redirect_uri) else: self.redirect('/') else: self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Flattr connection failed') self.response.out.write('\n\n') self.response.out.write(str(response))
def get(self, path): """List content in path""" filetypes = ['.mp3', '.mp4', '.ogg', '.wav'] user = get_current_youtify_user_model() if user is None: self.error(403) self.response.out.write('User not logged in') return access_token = OAuthToken.from_string(user.dropbox_access_token) session = dropbox.session.DropboxSession(config.DROPBOX_APP_KEY, config.DROPBOX_APP_SECRET, config.DROPBOX_ACCESS_TYPE) session.token = access_token client = dropbox.client.DropboxClient(session) path = '/' + path dirs = [] mediafiles = [] try: metadata = client.metadata(path) if 'contents' in metadata: for item in metadata['contents']: if item['is_dir']: dirs.append(item['path']) else: for filetype in filetypes: if item['path'].lower().endswith(filetype): # all currently supported filetypes are 4 chars long title = ' - '.join( item['path'].split('/'))[3:-4] track = { 'videoId': item['path'], 'title': title, 'type': 'dropbox' } mediafiles.append(track) break except: pass self.response.headers['Content-Type'] = 'application/json' self.response.out.write( simplejson.dumps({ 'dirs': dirs, 'media': mediafiles }))
def post(self): user = get_current_youtify_user_model() val = self.request.get('val') json = { 'message': '', } if user: if val > user.last_notification_seen_timestamp: user.last_notification_seen_timestamp = val user.save() json['message'] = 'timestamp updated' else: json['message'] = 'newer timestamp already set' else: json['message'] = 'no user found' self.response.headers['Content-Type'] = 'application/json' self.response.out.write(simplejson.dumps(json))
def delete(self): """Remove a track from favorites""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_id = self.request.path.split('/')[-1] playlist_model = Playlist.get_by_id(int(playlist_id)) if playlist_model.owner.key() == youtify_user_model.key(): youtify_user_model.playlists.remove(playlist_model.key()) youtify_user_model.save() playlist_model.delete() else: self.error(403)
def get(self): user = get_current_youtify_user_model() if ON_PRODUCTION: return for type, username in EXTERNAL_USERS: url = 'http://soundcloud.com/' + username response = urlfetch.fetch( 'https://api.soundcloud.com/resolve.json?consumer_key=206f38d9623048d6de0ef3a89fea1c4d&url=' + url) response = simplejson.loads(response.content) external_user_model = ExternalUser( type=type, external_user_id=str(response['id']), username=username, avatar_url=response['avatar_url']) external_user_model.save() user.external_user_subscriptions.append(external_user_model.key()) user.save() external_user_model.subscribers.append(user.key()) external_user_model.save() self.redirect('/') return for i in range(0, 50): tracks_json = [] for j in range(0, 100): tracks_json.append({ "videoId": 27985183, "title": "Oceanic Crust", "duration": 106331, "type": "soundcloud" }) m = Playlist(owner=user, title="Mosaik " + str(i), tracks_json=simplejson.dumps(tracks_json), json=None) m.put() user.playlists.append(m.key()) user.save() self.redirect('/')
def delete(self, playlist_id): """Unfollows a playlist""" youtify_user_model = get_current_youtify_user_model() if youtify_user_model == None: self.error(403) return playlist_model = Playlist.get_by_id(int(playlist_id)) youtify_user_model.playlist_subscriptions.remove(playlist_model.key()) youtify_user_model.save() playlist_model.followers.remove(youtify_user_model.key()) playlist_model.nr_of_followers = len(playlist_model.followers) playlist_model.save() self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('ok')