Esempio n. 1
0
    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')
Esempio n. 2
0
 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']
                 ],
             }))
Esempio n. 3
0
    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')
Esempio n. 4
0
    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)
Esempio n. 5
0
    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')
Esempio n. 6
0
 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)
Esempio n. 7
0
    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")
Esempio n. 8
0
    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")
Esempio n. 9
0
    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)
Esempio n. 10
0
    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')
Esempio n. 11
0
    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))
Esempio n. 12
0
    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))
Esempio n. 13
0
    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')
Esempio n. 14
0
    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')
Esempio n. 15
0
 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)))
Esempio n. 16
0
    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)
Esempio n. 17
0
    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)))
Esempio n. 18
0
    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)
Esempio n. 19
0
    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')
Esempio n. 20
0
    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')
Esempio n. 21
0
    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))
Esempio n. 22
0
 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))
Esempio n. 23
0
    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)
Esempio n. 24
0
    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')
Esempio n. 25
0
    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)
Esempio n. 26
0
 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)
Esempio n. 27
0
    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')
Esempio n. 28
0
 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}))
Esempio n. 29
0
    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")
Esempio n. 30
0
 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))
Esempio n. 31
0
 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))
Esempio n. 32
0
 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))
Esempio n. 33
0
 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))
Esempio n. 34
0
 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))
Esempio n. 35
0
    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")
Esempio n. 36
0
    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')
Esempio n. 37
0
 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))
Esempio n. 38
0
 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))
Esempio n. 39
0
    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')
Esempio n. 40
0
    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))
Esempio n. 41
0
    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)
Esempio n. 42
0
    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('/')
Esempio n. 43
0
    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('/')
Esempio n. 44
0
 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')    
Esempio n. 45
0
 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']],
     }))
Esempio n. 46
0
    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))
Esempio n. 47
0
    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));
Esempio n. 48
0
    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))
Esempio n. 49
0
    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 }))
Esempio n. 50
0
 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))
Esempio n. 51
0
    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)
Esempio n. 52
0
    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))
Esempio n. 53
0
    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
            }))
Esempio n. 54
0
 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))
Esempio n. 55
0
    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)
Esempio n. 56
0
    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')
Esempio n. 57
0
    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('/')
Esempio n. 58
0
    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')