mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
Merge pull request #23042 from cro/rest_eauth
Add simple eauth via REST
This commit is contained in:
commit
16a7639519
67
salt/auth/rest.py
Normal file
67
salt/auth/rest.py
Normal file
@ -0,0 +1,67 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
'''
|
||||
Provide authentication using a REST call
|
||||
|
||||
Django auth can be defined like any other eauth module:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
external_auth:
|
||||
rest:
|
||||
^url: https://url/for/rest/call
|
||||
fred:
|
||||
- .*
|
||||
- '@runner'
|
||||
|
||||
If there are entries underneath the ^url entry then they are merged with any responses
|
||||
from the REST call. In the above example, assuming the REST call does not return
|
||||
any additional ACLs, this will authenticate Fred via a REST call and allow him to
|
||||
run any execution module and all runners.
|
||||
|
||||
The REST call should return a JSON object that maps to a regular eauth YAML structure
|
||||
as above.
|
||||
|
||||
'''
|
||||
|
||||
# Import python libs
|
||||
from __future__ import absolute_import
|
||||
import logging
|
||||
|
||||
# Import salt libs
|
||||
import salt.utils.http
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
__virtualname__ = 'django'
|
||||
|
||||
def __virtual__():
|
||||
return __virtualname__
|
||||
|
||||
|
||||
def rest_auth_setup():
|
||||
|
||||
if '^url' in __opts__['external_auth']['rest']:
|
||||
return __opts__['external_auth']['rest']['^url']
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def auth(username, password):
|
||||
'''
|
||||
REST authentication
|
||||
'''
|
||||
|
||||
url = rest_auth_setup()
|
||||
|
||||
data = { 'username': username, 'password': password }
|
||||
|
||||
# Post to the API endpoint. If 200 is returned then the result will be the ACLs
|
||||
# for this user
|
||||
result = salt.utils.http.query(url, method='POST', data=data)
|
||||
if result['status'] == 200:
|
||||
log.debug('eauth REST call returned 200: {0}'.format(result))
|
||||
__opts__['external_auth']['rest'][username] = result['dict']
|
||||
return True
|
||||
else:
|
||||
log.debug('eauth REST call failed: {0}'.format(result))
|
||||
return False
|
Loading…
Reference in New Issue
Block a user