100 lines
3.2 KiB
Python
100 lines
3.2 KiB
Python
class Openstack_Auth:
|
|
|
|
import os
|
|
import exceptions
|
|
import requests
|
|
import json
|
|
import redis
|
|
import ng_openstack.settings as settings
|
|
|
|
|
|
appDebug = True
|
|
|
|
def getToken(username, password, authDomain, scopeDomain, scopeProject):
|
|
|
|
try:
|
|
return lookupTokenFromRedis(username, authDomain, scopeDomain, scopeProject)
|
|
except exceptions.ItemNotFoundError:
|
|
|
|
url = os.getenv("OS_AUTH_URL") + '/auth/tokens'
|
|
xdata = {
|
|
"auth": {
|
|
"scope": {
|
|
"project": {
|
|
"domain": {
|
|
"name": scopeDomain
|
|
},
|
|
"id": scopeProject
|
|
}
|
|
},
|
|
"identity": {
|
|
"password": {
|
|
"user": {
|
|
"domain": {
|
|
"name": authDomain
|
|
},
|
|
"password": password,
|
|
"name": username
|
|
}
|
|
},
|
|
"methods": [
|
|
"password"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
response = requests.post(url)
|
|
#print(xdata)
|
|
headers = {'Content-type': 'application/json'}
|
|
#if appDebug: print(url)
|
|
|
|
response = requests.post(url, headers=headers,
|
|
data=json.dumps(xdata),
|
|
verify=False,
|
|
timeout=4)
|
|
|
|
if response.status_code == 201:
|
|
saveTokenToRedis(username, authDomain, scopeDomain, scopeProject, response.headers['X-Subject-Token'])
|
|
return response.headers['X-Subject-Token']
|
|
else:
|
|
raise ValueError("Error in token response to token request:"+response.text)
|
|
|
|
def lookupTokenFromRedis(username, authDomain, scopeDomain, scopeProject):
|
|
|
|
REDIS=redis.Redis()
|
|
|
|
REDIS = redis.Redis(
|
|
host=os.getenv("REDIS_HOST"),
|
|
port=6379,
|
|
password="")
|
|
RedisKey= "OpenstackToken_" + username + "_" + authDomain + "_" + scopeDomain + "_" + scopeProject
|
|
try:
|
|
if REDIS.exists(RedisKey):
|
|
#print("Got token from redis")
|
|
token=REDIS.get(RedisKey).decode("utf-8")
|
|
return token
|
|
else:
|
|
raise exceptions.ItemNotFoundError("OpenstackToken not found in redis")
|
|
except:
|
|
raise exceptions.ItemNotFoundError("OpenstackToken not found in redis")
|
|
|
|
def saveTokenToRedis(username, authDomain, scopeDomain, scopeProject,token):
|
|
|
|
REDIS=redis.Redis()
|
|
|
|
REDIS = redis.Redis(
|
|
host=os.getenv("REDIS_HOST"),
|
|
port=6379,
|
|
password="")
|
|
RedisKey = "OpenstackToken_" + username + "_" + authDomain + "_" + scopeDomain + "_" + scopeProject
|
|
Token_CacheTimeout=150
|
|
# print("Saving Token to redis with a {} second timeout".format(Token_CacheTimeout))
|
|
try:
|
|
REDIS.set(RedisKey,token)
|
|
REDIS.expire(RedisKey, Token_CacheTimeout)
|
|
return
|
|
except:
|
|
raise exceptions.ItemNotFoundError("OpenstackToken not saved in redis")
|
|
|