auth: Remove AuthomaticBase class.
- Code will be moved to the EE version.
This commit is contained in:
parent
26d1f8ea5c
commit
ce2aa59dea
1 changed files with 0 additions and 115 deletions
|
|
@ -477,121 +477,6 @@ class RhodeCodeExternalAuthPlugin(RhodeCodeAuthPluginBase):
|
||||||
return auth
|
return auth
|
||||||
|
|
||||||
|
|
||||||
class AuthomaticBase(RhodeCodeExternalAuthPlugin):
|
|
||||||
|
|
||||||
# TODO: Think about how to create and store this secret string.
|
|
||||||
# We need the secret for the authomatic library. It needs to be the same
|
|
||||||
# across requests.
|
|
||||||
def _get_authomatic_secret(self, length=40):
|
|
||||||
secret = self.get_setting_by_name('secret')
|
|
||||||
if secret is None or secret == 'None' or secret == '':
|
|
||||||
from Crypto import Random, Hash
|
|
||||||
secret_bytes = Random.new().read(length)
|
|
||||||
secret_hash = Hash.SHA256.new()
|
|
||||||
secret_hash.update(secret_bytes)
|
|
||||||
secret = secret_hash.hexdigest()
|
|
||||||
self.create_or_update_setting('secret', secret)
|
|
||||||
Session.commit()
|
|
||||||
secret = self.get_setting_by_name('secret')
|
|
||||||
return secret
|
|
||||||
|
|
||||||
def get_authomatic(self):
|
|
||||||
scope = []
|
|
||||||
if self.name == 'bitbucket':
|
|
||||||
provider_class = oauth1.Bitbucket
|
|
||||||
scope = ['account', 'email', 'repository', 'issue', 'issue:write']
|
|
||||||
elif self.name == 'github':
|
|
||||||
provider_class = oauth2.GitHub
|
|
||||||
scope = ['repo', 'public_repo', 'user:email']
|
|
||||||
elif self.name == 'google':
|
|
||||||
provider_class = oauth2.Google
|
|
||||||
scope = ['profile', 'email']
|
|
||||||
elif self.name == 'twitter':
|
|
||||||
provider_class = oauth1.Twitter
|
|
||||||
|
|
||||||
authomatic_conf = {
|
|
||||||
self.name: {
|
|
||||||
'class_': provider_class,
|
|
||||||
'consumer_key': self.get_setting_by_name('consumer_key'),
|
|
||||||
'consumer_secret': self.get_setting_by_name('consumer_secret'),
|
|
||||||
'scope': scope,
|
|
||||||
'access_headers': {'User-Agent': 'TestAppAgent'},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
secret = self._get_authomatic_secret()
|
|
||||||
return Authomatic(config=authomatic_conf,
|
|
||||||
secret=secret)
|
|
||||||
|
|
||||||
def get_provider_result(self, request):
|
|
||||||
"""
|
|
||||||
Provides `authomatic.core.LoginResult` for provider and request
|
|
||||||
|
|
||||||
:param provider_name:
|
|
||||||
:param request:
|
|
||||||
:param config:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
response = Response()
|
|
||||||
adapter = WebObAdapter(request, response)
|
|
||||||
authomatic_inst = self.get_authomatic()
|
|
||||||
return authomatic_inst.login(adapter, self.name), response
|
|
||||||
|
|
||||||
def handle_social_data(self, session, user_id, social_data):
|
|
||||||
"""
|
|
||||||
Updates user tokens in database whenever necessary
|
|
||||||
:param request:
|
|
||||||
:param user:
|
|
||||||
:param social_data:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
if not self.is_active():
|
|
||||||
h.flash(_('This provider is currently disabled'),
|
|
||||||
category='warning')
|
|
||||||
return False
|
|
||||||
|
|
||||||
social_data = social_data
|
|
||||||
update_identity = False
|
|
||||||
|
|
||||||
existing_row = ExternalIdentity.by_external_id_and_provider(
|
|
||||||
social_data['user']['id'],
|
|
||||||
social_data['credentials.provider']
|
|
||||||
)
|
|
||||||
|
|
||||||
if existing_row:
|
|
||||||
Session().delete(existing_row)
|
|
||||||
update_identity = True
|
|
||||||
|
|
||||||
if not existing_row or update_identity:
|
|
||||||
if not update_identity:
|
|
||||||
h.flash(_('Your external identity is now '
|
|
||||||
'connected with your account'), category='success')
|
|
||||||
|
|
||||||
if not social_data['user']['id']:
|
|
||||||
h.flash(_('No external user id found? Perhaps permissions'
|
|
||||||
'for authentication are set incorrectly'),
|
|
||||||
category='error')
|
|
||||||
return False
|
|
||||||
|
|
||||||
ex_identity = ExternalIdentity()
|
|
||||||
ex_identity.external_id = social_data['user']['id']
|
|
||||||
ex_identity.external_username = social_data['user']['user_name']
|
|
||||||
ex_identity.provider_name = social_data['credentials.provider']
|
|
||||||
ex_identity.access_token = social_data['credentials.token']
|
|
||||||
ex_identity.token_secret = social_data['credentials.token_secret']
|
|
||||||
ex_identity.alt_token = social_data['credentials.refresh_token']
|
|
||||||
ex_identity.local_user_id = user_id
|
|
||||||
Session().add(ex_identity)
|
|
||||||
session.pop('rhodecode.social_auth', None)
|
|
||||||
return ex_identity
|
|
||||||
|
|
||||||
def callback_url(self):
|
|
||||||
try:
|
|
||||||
return url('social_auth', provider_name=self.name, qualified=True)
|
|
||||||
except TypeError:
|
|
||||||
pass
|
|
||||||
return ''
|
|
||||||
|
|
||||||
|
|
||||||
def loadplugin(plugin_id):
|
def loadplugin(plugin_id):
|
||||||
"""
|
"""
|
||||||
Loads and returns an instantiated authentication plugin.
|
Loads and returns an instantiated authentication plugin.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue