summaryrefslogtreecommitdiffstats
path: root/newton/newton/proxy/views/identityV3.py
diff options
context:
space:
mode:
Diffstat (limited to 'newton/newton/proxy/views/identityV3.py')
-rw-r--r--newton/newton/proxy/views/identityV3.py215
1 files changed, 6 insertions, 209 deletions
diff --git a/newton/newton/proxy/views/identityV3.py b/newton/newton/proxy/views/identityV3.py
index 9707726c..dd280314 100644
--- a/newton/newton/proxy/views/identityV3.py
+++ b/newton/newton/proxy/views/identityV3.py
@@ -13,225 +13,22 @@
# limitations under the License.
import logging
-import json
-import traceback
-from django.core.cache import cache
-
-from keystoneauth1 import access
-from keystoneauth1.access import service_catalog
-from keystoneauth1.exceptions import HttpError
-from rest_framework import status
-from rest_framework.response import Response
-from rest_framework.views import APIView
-
-from newton.pub.config import config
-from newton.pub.exceptions import VimDriverNewtonException
-from newton.requests.views.util import VimDriverUtils
-from newton.proxy.views.proxy_utils import ProxyUtils
+from django.conf import settings
+from newton_base.proxy import identityV3 as newton_identityV3
logger = logging.getLogger(__name__)
DEBUG=True
-v3_version_detail = {
- "version": {
- "status": "stable",
- "updated": "2014-04-17T00:00:00Z",
- "media-types": [
- {
- "base": "application/json",
- "type": "application/vnd.openstack.identity-v3+json"
- }
- ],
- "id": "v3",
- "links": [
- ]
- }
-}
-
-class Tokens(APIView):
- service = {'service_type': 'identity',
- 'interface': 'public'}
+class Tokens(newton_identityV3.Tokens):
def __init__(self):
- self.proxy_prefix = config.MULTICLOUD_PREFIX
+ self.proxy_prefix = settings.MULTICLOUD_PREFIX
self._logger = logger
- def get(self, request, vimid=""):
- self._logger.debug("identityV3--get::META> %s" % request.META)
-
- return Response(data=v3_version_detail, status=status.HTTP_200_OK)
-
- def post(self, request, vimid=""):
- self._logger.debug("identityV3--post::META> %s" % request.META)
- self._logger.debug("identityV3--post::data> %s" % request.data)
- self._logger.debug("identityV3--post::vimid> %s" % (vimid))
- sess = None
- resp = None
- resp_body = None
- try:
- tenant_name = request.data.get("tenant_name")
- tenant_id = request.data.get("tenant_id")
-
- #backward support for keystone v2.0 API
- if not tenant_name and request.data.get("auth"):
- tenant_name = request.data["auth"].get("tenantName")
- tenant_id = request.data["auth"].get("tenantId")
-
- #keystone v3 API
- if not tenant_name and request.data.get("auth") \
- and request.data["auth"].get("scope")\
- and request.data["auth"]["scope"].get("project"):
- if request.data["auth"]["scope"]["project"].get("name"):
- tenant_name = request.data["auth"]["scope"]["project"].get("name")
- else:
- tenant_id = request.data["auth"]["scope"]["project"].get("id")
-
-
-
- # prepare request resource to vim instance
- vim = VimDriverUtils.get_vim_info(vimid)
- sess = VimDriverUtils.get_session(
- vim, tenant_name=tenant_name, tenant_id=tenant_id)
-
- tmp_auth_state = VimDriverUtils.get_auth_state(sess)
- tmp_auth_info = json.loads(tmp_auth_state)
- tmp_auth_token = tmp_auth_info['auth_token']
- tmp_auth_data = tmp_auth_info['body']
-
- #store the auth_state, redis/memcached
- #set expiring in 1 hour
-
- #update the catalog
- tmp_auth_data['token']['catalog'], tmp_metadata_catalog = ProxyUtils.update_catalog(
- vimid, tmp_auth_data['token']['catalog'], self.proxy_prefix)
-
- VimDriverUtils.update_token_cache(
- tmp_auth_token, tmp_auth_state,
- json.dumps(tmp_metadata_catalog))
-
- tmp_auth_data['token']['catalog'] = ProxyUtils.update_catalog_dnsaas(
- vimid,tmp_auth_data['token']['catalog'], self.proxy_prefix, vim)
-
- resp = Response(headers={'X-Subject-Token': tmp_auth_token},
- data=tmp_auth_data, status=status.HTTP_201_CREATED)
- return resp
- except VimDriverNewtonException as e:
-
- return Response(data={'error': e.content}, status=e.status_code)
- except HttpError as e:
- self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
- return Response(data=e.response.json(), status=e.http_status)
- except Exception as e:
- self._logger.error(traceback.format_exc())
-
- return Response(data={'error': str(e)},
- status=status.HTTP_500_INTERNAL_SERVER_ERROR)
-
-v2_version_detail = {
- "version": {
- "status": "stable",
- "updated": "2014-04-17T00:00:00Z",
- "media-types": [
- {
- "base": "application/json",
- "type": "application/vnd.openstack.identity-v2.0+json"
- }
- ],
- "id": "v2.0",
- "links": [
- ]
- }
-}
-
-class TokensV2(Tokens):
- '''
- Backward compatible API for /v2.0/tokens
- '''
+class TokensV2(newton_identityV3.TokensV2):
def __init__(self):
- self.proxy_prefix = config.MULTICLOUD_PREFIX
+ self.proxy_prefix = settings.MULTICLOUD_PREFIX
self._logger = logger
-
- def get(self, request, vimid=""):
- self._logger.debug("TokensV2--get::META> %s" % request.META)
-
- return Response(data=v2_version_detail, status=status.HTTP_200_OK)
-
- def post(self, request, vimid=""):
- self._logger.debug("TokensV2--post::META> %s" % request.META)
- self._logger.debug("TokensV2--post::data> %s" % request.data)
- self._logger.debug("TokensV2--post::vimid > %s" % (vimid))
-
- try:
- resp = super(TokensV2,self).post(request, vimid)
- self._logger.debug("TokensV2--resp:: headers:%s, data:%s" % (resp._headers, resp.data))
- if resp.status_code == status.HTTP_201_CREATED:
- v3_content = resp.data
- v3_token = v3_content['token']
-
- #convert catalog
- v2_catalog = []
- for v3_catalog in v3_token['catalog']:
- v2_catalog1 = {
- "type": v3_catalog["type"],
- "name": v3_catalog["name"],
- "endpoints": []
- }
-
- #convert endpoints
- v2_catalog1_endpoints = None
- for v3_endpoint in v3_catalog['endpoints']:
- v2_catalog1_endpoints = {
- "id": v3_endpoint['id'],
- "region":v3_endpoint['region'],
- "region_id": v3_endpoint['region_id'],
- 'interface':v3_endpoint['interface']
- }
- if v3_endpoint['interface'] == 'public':
- v2_catalog1_endpoints['publicURL'] = v3_endpoint['url']
- elif v3_endpoint['interface'] == 'admin':
- v2_catalog1_endpoints['adminURL'] = v3_endpoint['url']
- elif v3_endpoint['interface'] == 'internal':
- v2_catalog1_endpoints['internalURL'] = v3_endpoint['url']
-
- if v2_catalog1_endpoints:
- v2_catalog1['endpoints'].append(v2_catalog1_endpoints)
-
- v2_catalog.append(v2_catalog1)
-
-
- #conversion between v3 tokens response and v2.0 tokens response
- v3_token["project"]['enabled'] = 'true'
- v2_content = {
- "access": {
- "token": {
- "id" : resp.get('X-Subject-Token', None),
- "issued_at": v3_token["issued_at"],
- "expires" : v3_token["expires_at"],
- "tenant" : v3_token["project"],
- },
- "serviceCatalog": v2_catalog,
- "user": v3_token["user"],
- }
- }
-
- return Response(data=v2_content,
- status=status.HTTP_200_OK \
- if resp.status_code==status.HTTP_201_CREATED \
- else resp.status_code)
-
- else:
- return resp
- except VimDriverNewtonException as e:
-
- return Response(data={'error': e.content}, status=e.status_code)
- except HttpError as e:
- self._logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
- return Response(data=e.response.json(), status=e.http_status)
- except Exception as e:
- self._logger.error(traceback.format_exc())
-
- return Response(data={'error': str(e)},
- status=status.HTTP_500_INTERNAL_SERVER_ERROR)