class FlickrService(object): def __init__(self, app=None): self.app = app self.client = None if app is not None: # pragma: no cover self.init_app(app) def init_app(self, app): # pragma: no cover from flask import session from pybossa.core import importer self.client = OAuth().remote_app( 'flickr', request_token_url='https://www.flickr.com/services/oauth/request_token', access_token_url='https://www.flickr.com/services/oauth/access_token', authorize_url='https://www.flickr.com/services/oauth/authorize', consumer_key=app.config['FLICKR_API_KEY'], consumer_secret=app.config['FLICKR_SHARED_SECRET']) tokengetter = functools.partial(self.get_flickr_token, session) self.client.tokengetter(tokengetter) importer_params = {'api_key': app.config['FLICKR_API_KEY']} importer.register_flickr_importer(importer_params) def get_user_albums(self, session): if (session.get('flickr_user') is not None and session.get('flickr_token') is not None): url = ('https://api.flickr.com/services/rest/?' 'method=flickr.photosets.getList&user_id=%s' '&primary_photo_extras=url_q' '&format=json&nojsoncallback=1' % session.get('flickr_user').get('user_nsid')) res = self.client.get(url) if res.status == 200 and res.data.get('stat') == 'ok': albums = res.data['photosets']['photoset'] return [self._extract_album_info(album) for album in albums] else: msg = ("Bad response from Flickr:\nStatus: %s, Content: %s" % (res.status, res.data)) self.app.logger.error(msg) return [] def authorize(self, *args, **kwargs): return self.client.authorize(*args, **kwargs) def authorized_response(self): return self.client.authorized_response() def get_oauth_client(self): return self.client def get_flickr_token(self, session): return session.get('flickr_token') def _extract_album_info(self, album): info = {'title': album['title']['_content'], 'photos': album['photos'], 'id': album['id'], 'thumbnail_url': album['primary_photo_extras']['url_q']} return info
class GithubAuthenticator(Authenticator): is_oauth = True session_key = "github_token" def __init__(self, app): self.gh = OAuth(app).remote_app( "github", consumer_key=settings.auth_github_key, consumer_secret=settings.auth_github_secret, access_token_method="POST", access_token_url="https://github.com/login/oauth/access_token", authorize_url="https://github.com/login/oauth/authorize", base_url="https://api.github.com/", request_token_params={"scope": "read:org"}, request_token_url=None, ) self.gh.tokengetter(self.get_github_oauth_token) def get_github_oauth_token(self): return flask.session.get(self.session_key) def is_logged_in(self): return bool(flask.session.get(self.session_key)) def is_allowed(self): if settings.auth_github_orgs not in ("all", "*"): org_names = {o["login"] for o in self.gh.get("user/orgs").data} if not _matches_conf(org_names, settings.auth_github_orgs): return False if settings.auth_github_teams not in ("all", "*"): team_names = {o["name"] for o in self.gh.get("user/teams").data} if not _matches_conf(team_names, settings.auth_github_teams): return False return True def login(self): return self.gh.authorize(callback=flask.url_for("authorized", _external=True)) def oauth_authorize(self): resp = self.gh.authorized_response() if not resp or not resp.get("access_token"): flask.abort( 403, "<br>".join( ( "Access denied! Reason: %s" % flask.request.args["error"], "Description: %s" % flask.request.args["error_description"], flask.request.args["error_uri"], ) ), ) flask.session[self.session_key] = (resp["access_token"], "") def logout(self): flask.session.pop(self.session_key, None)
class FlickrService(object): """Class for Flickr integration.""" def __init__(self, app=None): """Init method.""" self.app = app self.client = None if app is not None: # pragma: no cover self.init_app(app) def init_app(self, app): # pragma: no cover """Method to init object following factories pattern.""" from flask import session from pybossa.core import importer self.app = app self.client = OAuth().remote_app( 'flickr', request_token_url='https://www.flickr.com/services/oauth/request_token', access_token_url='https://www.flickr.com/services/oauth/access_token', authorize_url='https://www.flickr.com/services/oauth/authorize', consumer_key=app.config['FLICKR_API_KEY'], consumer_secret=app.config['FLICKR_SHARED_SECRET'], access_token_method='GET') tokengetter = functools.partial(self.get_token, session) self.client.tokengetter(tokengetter) importer_params = {'api_key': app.config['FLICKR_API_KEY']} importer.register_flickr_importer(importer_params) def get_user_albums(self, session): """Get user albums from Flickr.""" if (session.get('flickr_user') is not None and session.get('flickr_token') is not None): url = ('https://api.flickr.com/services/rest/?' 'method=flickr.photosets.getList&user_id=%s' '&primary_photo_extras=url_q' '&format=json&nojsoncallback=1' % self._get_user_nsid(session)) res = self.client.get(url, token='') if res.status == 200 and res.data.get('stat') == 'ok': albums = res.data['photosets']['photoset'] return [self._extract_album_info(album) for album in albums] if self.app is not None: msg = ("Bad response from Flickr:\nStatus: %s, Content: %s" % (res.status, res.data)) self.app.logger.error(msg) return [] def authorize(self, *args, **kwargs): """Authorize method.""" return self.client.authorize(*args, **kwargs) def authorized_response(self): """Authorized response.""" return self.client.authorized_response() def get_oauth_client(self): """Get OAuth client.""" return self.client def get_token(self, session): """Get token from session.""" token = session.get('flickr_token') if token is not None: token = (token['oauth_token'], token['oauth_token_secret']) return token def save_credentials(self, session, token, user): """Save credentials of user in session.""" session['flickr_token'] = token session['flickr_user'] = user def remove_credentials(self, session): """Remove user credentials from session.""" session.pop('flickr_token', None) session.pop('flickr_user', None) def _get_user_nsid(self, session): """Get session ID.""" return session.get('flickr_user').get('user_nsid') def _extract_album_info(self, album): """Extract album information.""" info = {'title': album['title']['_content'], 'photos': album['photos'], 'id': album['id'], 'thumbnail_url': album['primary_photo_extras']['url_q']} return info
class FlickrClient(object): """Class for Flickr integration.""" def __init__(self, app=None): """Init method.""" self.app = app self.oauth_client = None if app is not None: # pragma: no cover self.init_app(app) def init_app(self, app): # pragma: no cover """Method to init object following factories pattern.""" from flask import session self.app = app self.oauth_client = OAuth().remote_app( 'flickr', request_token_url='https://www.flickr.com/services/oauth/request_token', access_token_url='https://www.flickr.com/services/oauth/access_token', authorize_url='https://www.flickr.com/services/oauth/authorize', consumer_key=app.config['FLICKR_API_KEY'], consumer_secret=app.config['FLICKR_SHARED_SECRET'], access_token_method='GET') tokengetter = functools.partial(self.get_token, session) self.oauth_client.tokengetter(tokengetter) def get_user_albums(self, session): """Get user albums from Flickr.""" if (session.get('flickr_user') is not None and session.get('flickr_token') is not None): url = ('https://api.flickr.com/services/rest/?' 'method=flickr.photosets.getList&user_id=%s' '&primary_photo_extras=url_q' '&format=json&nojsoncallback=1' % self._get_user_nsid(session)) res = self.oauth_client.get(url, token='') if res.status == 200 and res.data.get('stat') == 'ok': albums = res.data['photosets']['photoset'] return [self._extract_album_info(album) for album in albums] if self.app is not None: msg = ("Bad response from Flickr:\nStatus: %s, Content: %s" % (res.status, res.data)) self.app.logger.error(msg) return [] def authorize(self, *args, **kwargs): """Authorize method.""" return self.oauth_client.authorize(*args, **kwargs) def authorized_response(self): """Authorized response.""" return self.oauth_client.authorized_response() def get_oauth_client(self): """Get OAuth client.""" return self.oauth_client def get_token(self, session): """Get token from session.""" token = session.get('flickr_token') if token is not None: token = (token['oauth_token'], token['oauth_token_secret']) return token def save_credentials(self, session, token, user): """Save credentials of user in session.""" session['flickr_token'] = token session['flickr_user'] = user def remove_credentials(self, session): """Remove user credentials from session.""" session.pop('flickr_token', None) session.pop('flickr_user', None) def _get_user_nsid(self, session): """Get session ID.""" return session.get('flickr_user').get('user_nsid') def _extract_album_info(self, album): """Extract album information.""" info = {'title': album['title']['_content'], 'photos': album['photos'], 'id': album['id'], 'thumbnail_url': album['primary_photo_extras']['url_q']} return info