Example #1
0
    def post(self):
        thing_id = self.request.get('thing_id')
        url = 'https://api.flattr.com/rest/v2/things/' + thing_id + '/flattr'
        user = get_current_youtify_user()

        headers = {
            'Authorization': 'Bearer %s' % user.flattr_access_token
        }

        response = urlfetch.fetch(url=url, method=urlfetch.POST, headers=headers, validate_certificate=VALIDATE_CERTIFICATE)

        json = simplejson.loads(response.content)
        if json.get('message') == 'ok' and 'thing' in json:
            click = FlattrClick(
                        youtify_user=user,
                        flattr_user_name=user.flattr_user_name,
                        thing_id=str(json['thing'].get('id')),
                        thing_title=json['thing'].get('title')
                    )
            click.put()
        else:
            logging.error('Error logging flattr click. Response: %s' % response.content)

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(response.content)
Example #2
0
 def get(self):
     redirect_uri = self.request.get('redirect_uri', '/')
     user = get_current_youtify_user()
     user.flattr_access_token = None
     user.flattr_user_name = None
     user.save()
     self.redirect(redirect_uri)
Example #3
0
    def get(self):
        current_user = users.get_current_user()
        user = get_current_youtify_user()
        if (current_user is not None) and (user is None):
            user = create_youtify_user()

        logout_url = ''
        login_url = ''
        my_user_email = ''
        my_flattr_username = ''
        my_youtube_username = ''
        if (user is not None):
            my_user_email = user.google_user.email()
            logout_url = users.create_logout_url('/flattr_submit')
            if user.flattr_user_name:
                my_flattr_username = user.flattr_user_name
            if user.youtube_username:
                my_youtube_username = user.youtube_username
        else:
            login_url = users.create_login_url('/flattr_submit')

        path = os.path.join(os.path.dirname(__file__), 'html', 'flattr_submit.html')
        self.response.headers['Content-Type'] = 'text/html; charset=utf-8'
        self.response.out.write(template.render(path, {
            'my_user_email': my_user_email,
            'my_flattr_username': my_flattr_username,
            'my_youtube_username': my_youtube_username,
            'logout_url': logout_url,
            'nr_of_submitted_vides':  SubmittedVideo.all().count(),
            'flattr_connect_url': '/flattrconnect?redirect_uri=%s' % urllib.quote(self.request.url),
            'flattr_disconnect_url': '/flattrdisconnect?redirect_uri=' + urllib.quote(self.request.url),
            'login_url': login_url,
        }))
Example #4
0
    def post(self):
        """Update playlist"""
        youtify_user = get_current_youtify_user()
        if youtify_user == 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.key():
            if youtify_user.device != device:
                self.error(409)
                self.response.out.write('wrong_device')
                return
            else:
                playlist_model.json = json
                playlist_model.save()
                self.response.out.write(str(playlist_model.key().id()))
        else:
            self.error(403)
Example #5
0
    def get(self):
        current_user = users.get_current_user()
        youtify_user = get_current_youtify_user()
        if youtify_user is not None:
            youtify_user.device = str(random.random())
            youtify_user.save()

        if (current_user is not None) and (youtify_user is None):
            youtify_user = create_youtify_user()

        ON_PRODUCTION = os.environ['SERVER_SOFTWARE'].startswith('Google App Engine') # http://stackoverflow.com/questions/1916579/in-python-how-can-i-test-if-im-in-google-app-engine-sdk

        path = os.path.join(os.path.dirname(__file__), 'html', 'index.html')
        self.response.headers['Content-Type'] = 'text/html; charset=utf-8';
        self.response.out.write(template.render(path, {
            'user': current_user,
            'youtify_user': youtify_user,
            'accept_language_header': self.request.headers.get('Accept-Language', ''),
            'logged_in': int(current_user is not None),
            'login_url': users.create_login_url('/'),
            'logout_url': users.create_logout_url('/'),
            'toplist': toplist.get_or_create_toplist_json(),
            'ON_PRODUCTION': ON_PRODUCTION,
            'ON_DEV': ON_PRODUCTION is False,
			'url': self.request.url,
        }))
Example #6
0
    def post(self):
        username = self.request.get('username')

        user = get_current_youtify_user()
        user.youtube_username = username 
        user.save()

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('ok')
Example #7
0
    def delete(self):
        """Delete playlist"""
        youtify_user = get_current_youtify_user()
        if youtify_user == 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.key():
            playlist_model.delete()
        else:
            self.error(403)
Example #8
0
 def get(self):
     current_user = users.get_current_user()
     user = get_current_youtify_user()
     if (current_user is not None) and (user is None):
         user = create_youtify_user()
     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_user.nickname().split('@')[0],
         'my_user_email': user.google_user.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']],
     }))
Example #9
0
    def get(self):
        current_user = users.get_current_user()
        youtify_user = get_current_youtify_user()

        playlists = '[]';

        if youtify_user is not None:
            playlists = get_playlists_json_for_user(youtify_user)
            youtify_user.device = str(random.random())
            youtify_user.save()

        if (current_user is not None) and (youtify_user is None):
            youtify_user = create_youtify_user()

        ON_PRODUCTION = os.environ['SERVER_SOFTWARE'].startswith('Google App Engine') # http://stackoverflow.com/questions/1916579/in-python-how-can-i-test-if-im-in-google-app-engine-sdk
        
        # Find videotag and generate open graph meta tags
        match = re.compile(r'videos/(.*)').search(self.request.url)
        if match: 
            og_tag = '<meta property="og:video" content="http://www.youtube.com/v/' + match.groups()[0] + '?version=3&amp;autohide=1"/><meta property="og:video:type" content="application/x-shockwave-flash"/><meta property="og:video:width" content="396"/><meta property="og:video:height" content="297"/>'
        else:
            og_tag = ''

        lang = auto_detect_language(self.request)

        path = os.path.join(os.path.dirname(__file__), 'html', 'index.html')
        self.response.headers['Content-Type'] = 'text/html; charset=utf-8';
        self.response.out.write(template.render(path, {
            'user': current_user,
            'is_admin': int(users.is_current_user_admin()),
            'youtify_user': youtify_user,
            'playlistsFromServer': playlists,
            'autoDetectedLanguageByServer': lang,
            'autoDetectedTranslations': get_deployed_translations_json(lang),
            'accept_language_header': self.request.headers.get('Accept-Language', ''), # todo remove
            'logged_in': int(current_user is not None),
            'has_flattr_access_token': int(youtify_user is not None and youtify_user.flattr_access_token is not None),
            'flattr_user_name': youtify_user is not None and youtify_user.flattr_user_name,
            'login_url': users.create_login_url('/'),
            'logout_url': users.create_logout_url('/'),
            'toplist': get_or_create_toplist_json(),
            'flattr_toplist': flattr_toplist.get_or_create_toplist_json(),
            'ON_PRODUCTION': ON_PRODUCTION,
            'ON_DEV': ON_PRODUCTION is False,
            'USE_PRODUCTION_JAVASCRIPT': ON_PRODUCTION,
            'languages': [lang for lang in get_languages() if lang['enabled_on_site']],
            #'USE_PRODUCTION_JAVASCRIPT': True, # Uncomment to try out production settings. Remember to build production.js with localhost:8080/minimizer
			'url': self.request.url,
            'og_tag': og_tag,
        }))
Example #10
0
    def get(self):
        """Get playlists for logged in user"""
        youtify_user = get_current_youtify_user()

        playlists = []
        for playlist in Playlist.all().filter('owner =', youtify_user):
            if playlist.json is None:
                logging.error("Playlist " + str(playlist.key().id()) + " has invalid JSON, skipping...")
            else:
                playlists.append(playlist.json)

        output = '[' + ','.join(playlists) + ']'

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(output)
Example #11
0
    def post(self):
        code = self.request.path.split('/')[-2]
        original = self.request.get('original')
        suggestion = self.request.get('suggestion')

        if not code in translations:
            raise Exception('Unknown language code')

        current_user = get_current_youtify_user()
        translation = Translation(text=suggestion, user=current_user)
        phrase = Phrase.all().filter(original=original)
        if phrase is None and users.is_current_user_admin():
            phrase = Phrase(original=original)

        suggestions = getattr(phrase, code)
        suggestions.append(suggestion)
        phrase.save()
Example #12
0
    def get(self):
        current_user = users.get_current_user()
        user = get_current_youtify_user()
        if (current_user is not None) and (user is None):
            user = create_youtify_user()

        logout_url = ''
        login_url = ''
        my_user_email = ''
        my_flattr_username = ''
        my_youtube_username = ''
        if (user is not None):
            my_user_email = user.google_user2.email()
            logout_url = users.create_logout_url('/flattr_submit')
            if user.flattr_user_name:
                my_flattr_username = user.flattr_user_name
            if user.youtube_username:
                my_youtube_username = user.youtube_username
        else:
            login_url = users.create_login_url('/flattr_submit')

        path = os.path.join(os.path.dirname(__file__), 'html',
                            'flattr_submit.html')
        self.response.headers['Content-Type'] = 'text/html; charset=utf-8'
        self.response.out.write(
            template.render(
                path, {
                    'my_user_email':
                    my_user_email,
                    'my_flattr_username':
                    my_flattr_username,
                    'my_youtube_username':
                    my_youtube_username,
                    'logout_url':
                    logout_url,
                    'nr_of_submitted_vides':
                    SubmittedVideo.all().count(),
                    'flattr_connect_url':
                    '/flattrconnect?redirect_uri=%s' %
                    urllib.quote(self.request.url),
                    'flattr_disconnect_url':
                    '/flattrdisconnect?redirect_uri=' +
                    urllib.quote(self.request.url),
                    'login_url':
                    login_url,
                }))
Example #13
0
    def delete(self):
        """Delete playlist"""
        youtify_user = get_current_youtify_user()
        if youtify_user == None:
            self.error(403)
            return
        
        playlist_id = self.request.path.split('/')[-1]
        playlist_model = Playlist.get_by_id(int(playlist_id))
        device = self.request.get('device')

        if playlist_model.owner.key() == youtify_user.key():
            if youtify_user.device != device:
                self.error(409)
                self.response.out.write('wrong_device')
                return
            else:
                playlist_model.delete()
        else:
            self.error(403)
Example #14
0
    def post(self):
        """Create new playlist"""
        youtify_user = get_current_youtify_user()
        json = simplejson.loads(self.request.get('json'))

        if json is None:
            self.error(500)

        playlist_model = Playlist(owner=youtify_user, json=None)
        playlist_model.put()

        json['remoteId'] = playlist_model.key().id()
        json['owner'] = {
            'id': youtify_user.key().id(),
            'name': youtify_user.google_user.nickname().split('@')[0], # don't leak users email
        }
        playlist_model.json = simplejson.dumps(json)
        playlist_model.save()

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(playlist_model.json)
Example #15
0
    def post(self):
        url_to_submit = self.request.get('url')
        url = 'https://api.flattr.com/rest/v2/flattr'
        user = get_current_youtify_user()

        headers = {
            'Authorization': 'Bearer %s' % user.flattr_access_token,
            'Content-Type': 'application/json',
        }

        data = {
            #'url': 'http://flattr.com/submit/auto?' + urllib.urlencode({'url': url_to_submit}),
            #'url': urllib.quote(url_to_submit),
            'url': url_to_submit,
        }

        logging.info(url_to_submit)
        logging.info(data['url'])

        #data = urllib.urlencode(data)
        data = simplejson.dumps(data)

        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:
            click = FlattrClick(
                        youtify_user=user,
                        flattr_user_name=user.flattr_user_name,
                        thing_id=str(json['thing'].get('id')),
                        thing_title=json['thing'].get('title')
                    )
            click.put()
        else:
            logging.error('Error logging flattr click. Response: %s' % response.content)

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(response.content)
Example #16
0
    def post(self):
        video_id = self.request.get('video_id')
        title = self.request.get('title')
        description = self.request.get('description')

        url = 'https://api.flattr.com/rest/v2/things/'
        user = get_current_youtify_user()

        headers = {
            'Authorization': 'Bearer %s' % user.flattr_access_token,
            'Content-Type': 'application/json',
        }

        data = simplejson.dumps({
            'url': 'http://www.youtube.com/watch?v=' + video_id,
            'title': title,
            'description': description,
            'tags': 'music',
            'category': 'audio',
        })

        response = urlfetch.fetch(url=url,
                                  payload=data,
                                  method=urlfetch.POST,
                                  headers=headers)

        if response.status_code == 201:
            json = simplejson.loads(response.content)
            log_entry = SubmittedVideo(youtify_user=user,
                                       flattr_user_name=user.flattr_user_name,
                                       title=title,
                                       thing_id=str(json['id']),
                                       video_id=video_id)
            log_entry.put()

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(response.content)
Example #17
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()

        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")
Example #18
0
    def post(self):
        video_id = self.request.get('video_id')
        title = self.request.get('title')
        description = self.request.get('description')

        url = 'https://api.flattr.com/rest/v2/things/'
        user = get_current_youtify_user()

        headers = {
            'Authorization': 'Bearer %s' % user.flattr_access_token,
            'Content-Type': 'application/json',
        }

        data = simplejson.dumps({
            'url': 'http://www.youtube.com/watch?v=' + video_id,
            'title': title,
            'description': description,
            'tags': 'music',
            'category': 'audio',
        })

        response = urlfetch.fetch(url=url, payload=data, method=urlfetch.POST, headers=headers)

        if response.status_code == 201:
            json = simplejson.loads(response.content)
            log_entry = SubmittedVideo(
                youtify_user=user,
                flattr_user_name=user.flattr_user_name,
                title=title,
                thing_id=str(json['id']),
                video_id=video_id
            )
            log_entry.put()

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(response.content)
Example #19
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,
            '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()
            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')
Example #20
0
    def get(self):
        """Get playlists for logged in user"""
        youtify_user = get_current_youtify_user()

        self.response.headers['Content-Type'] = 'application/json'
        self.response.out.write(get_playlists_json_for_user(youtify_user))
Example #21
0
 def get(self):
     user = get_current_youtify_user()
     self.response.headers['Content-Type'] = 'text/plain'
     self.response.out.write(user.youtube_username)