summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerenaFeng <feng.xiaowei@zte.com.cn>2017-05-17 18:31:26 +0800
committerSerena Feng <feng.xiaowei@zte.com.cn>2017-05-18 01:01:05 +0000
commitd57892f46ca4864f2188d0e4fccb97d3987c10d1 (patch)
treecaafd5d32898992591f9eb68a5e3d078ddd167c0
parentbd392ea5ac1797d97348a8f98f254d0fff1241aa (diff)
add signin web to TestAPI
Change-Id: I4d39a8561c8ebd3238a495e5799fd43fb1a508b9 Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
-rw-r--r--testapi/3rd_party/static/testapi-ui/components/home/home.html2
-rw-r--r--testapi/3rd_party/static/testapi-ui/config.json2
-rw-r--r--testapi/3rd_party/static/testapi-ui/shared/header/header.html2
-rw-r--r--testapi/etc/config.ini50
-rw-r--r--testapi/opnfv_testapi/router/url_mappings.py10
-rw-r--r--testapi/opnfv_testapi/ui/__init__.py0
-rw-r--r--testapi/opnfv_testapi/ui/auth/__init__.py0
-rw-r--r--testapi/opnfv_testapi/ui/auth/constants.py14
-rw-r--r--testapi/opnfv_testapi/ui/auth/handlers.py37
-rw-r--r--testapi/opnfv_testapi/ui/auth/utils.py23
-rw-r--r--testapi/opnfv_testapi/ui/root.py (renamed from testapi/opnfv_testapi/resources/ui_handlers.py)3
-rw-r--r--testapi/requirements.txt1
12 files changed, 136 insertions, 8 deletions
diff --git a/testapi/3rd_party/static/testapi-ui/components/home/home.html b/testapi/3rd_party/static/testapi-ui/components/home/home.html
index 04f64d5..47d747f 100644
--- a/testapi/3rd_party/static/testapi-ui/components/home/home.html
+++ b/testapi/3rd_party/static/testapi-ui/components/home/home.html
@@ -1,6 +1,6 @@
<div class="jumbotron openstack-intro">
<div class="pull-right right openstack-intro__logo">
- <img src="swagger/testapi-ui/assets/img/opnfv-logo.png" alt="OPNFV">
+ <img src="testapi-ui/assets/img/opnfv-logo.png" alt="OPNFV">
</div>
<div class="pull-left left openstack-intro__content">
<h1>Results Collection</h1>
diff --git a/testapi/3rd_party/static/testapi-ui/config.json b/testapi/3rd_party/static/testapi-ui/config.json
index c88d46c..5d48c7b 100644
--- a/testapi/3rd_party/static/testapi-ui/config.json
+++ b/testapi/3rd_party/static/testapi-ui/config.json
@@ -1 +1 @@
-{"testapiApiUrl": "http://10.62.105.17:9711"}
+{"testapiApiUrl": "http://localhost:8000/api/v1"}
diff --git a/testapi/3rd_party/static/testapi-ui/shared/header/header.html b/testapi/3rd_party/static/testapi-ui/shared/header/header.html
index 78361b8..f2c49e8 100644
--- a/testapi/3rd_party/static/testapi-ui/shared/header/header.html
+++ b/testapi/3rd_party/static/testapi-ui/shared/header/header.html
@@ -1,4 +1,4 @@
-<div class="heading"><a ui-sref="home"><img src="swagger/testapi-ui/assets/img/testapi-logo.png" alt="TestAPI"></a>
+<div class="heading"><a ui-sref="home"><img src="testapi-ui/assets/img/testapi-logo.png" alt="TestAPI"></a>
TestAPI
</div>
<nav class="navbar navbar-default" role="navigation" ng-controller="HeaderController as header">
diff --git a/testapi/etc/config.ini b/testapi/etc/config.ini
index 77cc6c6..692e488 100644
--- a/testapi/etc/config.ini
+++ b/testapi/etc/config.ini
@@ -8,6 +8,7 @@ dbname = test_results_collection
[api]
# Listening port
+url = http://localhost:8000/api/v1
port = 8000
# With debug_on set to true, error traces will be shown in HTTP responses
debug = True
@@ -15,3 +16,52 @@ authenticate = False
[swagger]
base_url = http://localhost:8000
+
+[ui]
+url = http://localhost:8000
+
+[osid]
+
+# OpenStackID Auth Server URI. (string value)
+openstack_openid_endpoint = https://openstackid.org/accounts/openid2
+
+# OpenStackID logout URI. (string value)
+openid_logout_endpoint = https://openstackid.org/accounts/user/logout
+
+# Interaction mode. Specifies whether Openstack Id IdP may interact
+# with the user to determine the outcome of the request. (string
+# value)
+openid_mode = checkid_setup
+
+# Protocol version. Value identifying the OpenID protocol version
+# being used. This value should be "http://specs.openid.net/auth/2.0".
+# (string value)
+openid_ns = http://specs.openid.net/auth/2.0
+
+# Return endpoint in Refstack's API. Value indicating the endpoint
+# where the user should be returned to after signing in. Openstack Id
+# Idp only supports HTTPS address types. (string value)
+openid_return_to = /api/v1/auth/signin_return
+
+# Claimed identifier. This value must be set to
+# "http://specs.openid.net/auth/2.0/identifier_select". or to user
+# claimed identity (user local identifier or user owned identity [ex:
+# custom html hosted on a owned domain set to html discover]). (string
+# value)
+openid_claimed_id = http://specs.openid.net/auth/2.0/identifier_select
+
+# Alternate identifier. This value must be set to
+# http://specs.openid.net/auth/2.0/identifier_select. (string value)
+openid_identity = http://specs.openid.net/auth/2.0/identifier_select
+
+# Indicates request for user attribute information. This value must be
+# set to "http://openid.net/extensions/sreg/1.1". (string value)
+openid_ns_sreg = http://openid.net/extensions/sreg/1.1
+
+# Comma-separated list of field names which, if absent from the
+# response, will prevent the Consumer from completing the registration
+# without End User interation. The field names are those that are
+# specified in the Response Format, with the "openid.sreg." prefix
+# removed. Valid values include: "country", "email", "firstname",
+# "language", "lastname" (string value)
+openid_sreg_required = email,fullname
diff --git a/testapi/opnfv_testapi/router/url_mappings.py b/testapi/opnfv_testapi/router/url_mappings.py
index ebe5994..7bd3430 100644
--- a/testapi/opnfv_testapi/router/url_mappings.py
+++ b/testapi/opnfv_testapi/router/url_mappings.py
@@ -15,11 +15,11 @@ from opnfv_testapi.resources import project_handlers
from opnfv_testapi.resources import result_handlers
from opnfv_testapi.resources import scenario_handlers
from opnfv_testapi.resources import testcase_handlers
-import opnfv_testapi.resources.ui_handlers
+from opnfv_testapi.ui import root
+from opnfv_testapi.ui.auth import handlers as auth_handlers
mappings = [
# GET /versions => GET API version
- (r'/', opnfv_testapi.resources.ui_handlers.UIHandler),
(r"/versions", handlers.VersionHandler),
# few examples:
@@ -54,7 +54,11 @@ mappings = [
(r"/api/v1/scenarios/([^/]+)", scenario_handlers.ScenarioGURHandler),
# static path
- (r'/(.*\.(css|png|gif|js|html|json))',
+ (r'/(.*\.(css|png|gif|js|html|json|map))',
tornado.web.StaticFileHandler,
{'path': config.Config().static_path}),
+
+ (r'/', root.RootHandler),
+ (r'/api/v1/auth/signin', auth_handlers.SigninHandler),
+ (r'/api/v1/auth/signin_return', auth_handlers.SigninReturnHandler),
]
diff --git a/testapi/opnfv_testapi/ui/__init__.py b/testapi/opnfv_testapi/ui/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/testapi/opnfv_testapi/ui/__init__.py
diff --git a/testapi/opnfv_testapi/ui/auth/__init__.py b/testapi/opnfv_testapi/ui/auth/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/testapi/opnfv_testapi/ui/auth/__init__.py
diff --git a/testapi/opnfv_testapi/ui/auth/constants.py b/testapi/opnfv_testapi/ui/auth/constants.py
new file mode 100644
index 0000000..ec59751
--- /dev/null
+++ b/testapi/opnfv_testapi/ui/auth/constants.py
@@ -0,0 +1,14 @@
+# OpenID parameters
+OPENID_MODE = 'openid.mode'
+OPENID_NS = 'openid.ns'
+OPENID_RETURN_TO = 'openid.return_to'
+OPENID_CLAIMED_ID = 'openid.claimed_id'
+OPENID_IDENTITY = 'openid.identity'
+OPENID_REALM = 'openid.realm'
+OPENID_NS_SREG = 'openid.ns.sreg'
+OPENID_NS_SREG_REQUIRED = 'openid.sreg.required'
+OPENID_NS_SREG_EMAIL = 'openid.sreg.email'
+OPENID_NS_SREG_FULLNAME = 'openid.sreg.fullname'
+OPENID_ERROR = 'openid.error'
+
+CSRF_TOKEN = 'csrf_token'
diff --git a/testapi/opnfv_testapi/ui/auth/handlers.py b/testapi/opnfv_testapi/ui/auth/handlers.py
new file mode 100644
index 0000000..511952d
--- /dev/null
+++ b/testapi/opnfv_testapi/ui/auth/handlers.py
@@ -0,0 +1,37 @@
+from six.moves.urllib import parse
+
+from opnfv_testapi.common import config
+from opnfv_testapi.resources import handlers
+from opnfv_testapi.ui.auth import constants as const
+from opnfv_testapi.ui.auth import utils
+
+
+CONF = config.Config()
+
+
+class SigninHandler(handlers.GenericApiHandler):
+ def get(self):
+ csrf_token = utils.get_token()
+ return_endpoint = parse.urljoin(CONF.api_url,
+ CONF.osid_openid_return_to)
+ return_to = utils.set_query_params(return_endpoint,
+ {const.CSRF_TOKEN: csrf_token})
+
+ params = {
+ const.OPENID_MODE: CONF.osid_openid_mode,
+ const.OPENID_NS: CONF.osid_openid_ns,
+ const.OPENID_RETURN_TO: return_to,
+ const.OPENID_CLAIMED_ID: CONF.osid_openid_claimed_id,
+ const.OPENID_IDENTITY: CONF.osid_openid_identity,
+ const.OPENID_REALM: CONF.api_url,
+ const.OPENID_NS_SREG: CONF.osid_openid_ns_sreg,
+ const.OPENID_NS_SREG_REQUIRED: CONF.osid_openid_sreg_required,
+ }
+ url = CONF.osid_openstack_openid_endpoint
+ url = utils.set_query_params(url, params)
+ self.redirect(url=url, permanent=False)
+
+
+class SigninReturnHandler(handlers.GenericApiHandler):
+ def get(self):
+ self.redirect(url=CONF.ui_url)
diff --git a/testapi/opnfv_testapi/ui/auth/utils.py b/testapi/opnfv_testapi/ui/auth/utils.py
new file mode 100644
index 0000000..c3912ad
--- /dev/null
+++ b/testapi/opnfv_testapi/ui/auth/utils.py
@@ -0,0 +1,23 @@
+import random
+import string
+
+from six.moves.urllib import parse
+
+
+def get_token(length=30):
+ """Get random token."""
+ return ''.join(random.choice(string.ascii_lowercase)
+ for i in range(length))
+
+
+def set_query_params(url, params):
+ """Set params in given query."""
+ url_parts = parse.urlparse(url)
+ url = parse.urlunparse((
+ url_parts.scheme,
+ url_parts.netloc,
+ url_parts.path,
+ url_parts.params,
+ parse.urlencode(params),
+ url_parts.fragment))
+ return url
diff --git a/testapi/opnfv_testapi/resources/ui_handlers.py b/testapi/opnfv_testapi/ui/root.py
index 4c14802..bba7a86 100644
--- a/testapi/opnfv_testapi/resources/ui_handlers.py
+++ b/testapi/opnfv_testapi/ui/root.py
@@ -2,8 +2,7 @@ from opnfv_testapi.resources.handlers import GenericApiHandler
from opnfv_testapi.common import config
-class UIHandler(GenericApiHandler):
-
+class RootHandler(GenericApiHandler):
def get_template_path(self):
return config.Config().static_path
diff --git a/testapi/requirements.txt b/testapi/requirements.txt
index ee144d2..955ffc8 100644
--- a/testapi/requirements.txt
+++ b/testapi/requirements.txt
@@ -6,4 +6,5 @@ pbr>=1.6
setuptools>=16.0
tornado>=3.1,<=4.3
epydoc>=0.3.1
+six>=1.9.0
motor