oauth work
This commit is contained in:
parent
e9709b6c8f
commit
a0124baf1d
4 changed files with 66 additions and 28 deletions
|
@ -1,5 +1,6 @@
|
|||
from flask import render_template
|
||||
from flask_login import login_user
|
||||
from flask_oauthlib.client import OAuth
|
||||
|
||||
from realms import config
|
||||
from ..models import BaseUser
|
||||
|
||||
|
@ -10,23 +11,66 @@ users = {}
|
|||
providers = {
|
||||
'twitter': {
|
||||
'oauth': dict(
|
||||
base_url='https://api.twitter.com/1/',
|
||||
base_url='https://api.twitter.com/1.1/',
|
||||
request_token_url='https://api.twitter.com/oauth/request_token',
|
||||
access_token_url='https://api.twitter.com/oauth/access_token',
|
||||
authorize_url='https://api.twitter.com/oauth/authenticate')
|
||||
authorize_url='https://api.twitter.com/oauth/authenticate',
|
||||
access_token_method='GET'),
|
||||
'button': '<a href="/login/oauth/twitter" class="btn btn-default"><i class="fa fa-twitter"></i> Twitter</a>'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class User(BaseUser):
|
||||
type = 'oauth'
|
||||
provider = None
|
||||
|
||||
def __init__(self, provider, username, token):
|
||||
self.provider = provider
|
||||
self.username = username
|
||||
self.id = username
|
||||
self.token = token
|
||||
|
||||
@property
|
||||
def auth_token_id(self):
|
||||
return self.token
|
||||
|
||||
@staticmethod
|
||||
def load_user(*args, **kwargs):
|
||||
return User.get_by_id(args[0])
|
||||
|
||||
@staticmethod
|
||||
def get_by_id(user_id):
|
||||
return users.get(user_id)
|
||||
|
||||
@staticmethod
|
||||
def auth(username, provider, token):
|
||||
user = User(provider, username, User.hash_password(token))
|
||||
users[user.id] = user
|
||||
if user:
|
||||
login_user(user, remember=True)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def get_app(cls, provider):
|
||||
return oauth.remote_app(provider,
|
||||
consumer_key=config.OAUTH.get(provider, {}).get('key'),
|
||||
consumer_secret=config.OAUTH.get(provider, {}).get('secret'),
|
||||
**providers[provider]['oauth'])
|
||||
if oauth.remote_apps.get(provider):
|
||||
return oauth.remote_apps.get(provider)
|
||||
return oauth.remote_app(
|
||||
provider,
|
||||
consumer_key=config.OAUTH.get(provider, {}).get('key'),
|
||||
consumer_secret=config.OAUTH.get(provider, {}).get(
|
||||
'secret'),
|
||||
**providers[provider]['oauth'])
|
||||
|
||||
def get_id(self):
|
||||
return unicode("%s/%s/%s" % (self.type, self.provider, self.id))
|
||||
|
||||
@staticmethod
|
||||
def login_form():
|
||||
pass
|
||||
buttons = ''
|
||||
for k, v in providers.items():
|
||||
buttons += v.get('button')
|
||||
|
||||
return buttons
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue