aboutsummaryrefslogtreecommitdiffstats
path: root/openo-portal
diff options
context:
space:
mode:
authorjin xin <j00101220@huawei.com>2016-09-19 03:12:11 +0000
committerGerrit Code Review <gerrit@open-o.org>2016-09-19 03:12:11 +0000
commitd72d6805ae03018254edb6608f9b193915495880 (patch)
treecfe0afa65acd6e2bfbe8574531ad47bf136cca8f /openo-portal
parent043f605643e9de8c1bc2d6ae7719a518b05e6ec0 (diff)
parentaaa5c732eb7094e1bd832ffc27f3d7ffd86e1f90 (diff)
Merge "added auth UI code"
Diffstat (limited to 'openo-portal')
-rw-r--r--openo-portal/portal-auth/pom.xml32
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/changePassword.html125
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/createUser.html141
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/css/component.css247
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/css/user.css95
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/images/add.pngbin0 -> 1104 bytes
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/images/delete.pngbin0 -> 1100 bytes
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/images/edit.bak.pngbin0 -> 3045 bytes
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/images/edit.pngbin0 -> 3045 bytes
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/images/reset.bak.pngbin0 -> 2898 bytes
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/images/reset.pngbin0 -> 2863 bytes
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/js/changePassword.js193
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/js/createUser.js189
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/js/modifyUser.js78
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/js/user.js109
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/js/userTools.js88
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/modifyUser.html77
-rw-r--r--openo-portal/portal-auth/src/main/webapp/user/user.html41
18 files changed, 1415 insertions, 0 deletions
diff --git a/openo-portal/portal-auth/pom.xml b/openo-portal/portal-auth/pom.xml
new file mode 100644
index 00000000..5f7c8b2b
--- /dev/null
+++ b/openo-portal/portal-auth/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (C) 2015 ZTE, Inc. and others. All rights reserved. (ZTE)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>openo-portal</groupId>
+ <artifactId>openo-portal</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>openo-portal.module.auth</groupId>
+ <artifactId>module-auth</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+</project>
diff --git a/openo-portal/portal-auth/src/main/webapp/user/changePassword.html b/openo-portal/portal-auth/src/main/webapp/user/changePassword.html
new file mode 100644
index 00000000..3b987033
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/changePassword.html
@@ -0,0 +1,125 @@
+<!--
+ Copyright 2016 Huawei Technologies Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!doctype html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/component.css">
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/user.css">
+ <script type="text/javascript" src="/openoui/auth/v1/user/3rd_lib/jquery-1.11.1.min.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/userTools.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/changePassword.js"></script>
+</head>
+
+<body class="hw_body">
+ <div class="mt20" id="progress">
+ <div class="progress_charater">Enter the Password Information</div>
+ <div class="progress_bar"></div>
+ </div>
+ <div id="create_content">
+ <div id="info_content">
+ <table>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>User Name</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="userName" class="fwk_input" disabled="disabled" />
+ </div>
+ </td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>Old Password</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="oldPassword" class="fwk_input" type="password" />
+ </div>
+ </td>
+ <td>
+ <div id="oldPasswordError" class="errorTip" style="visibility: hidden;">error</div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>New Password</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="password" class="fwk_input" type="password" />
+ </div>
+ </td>
+ <td>
+ <div id="passwordError" class="errorTip" style="visibility: hidden;">error.</div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>Confirm Password</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="cfPassword" class="fwk_input" type="password" />
+ </div>
+ </td>
+ <td>
+ <div id="cfPsdError" class="errorTip" style="visibility: hidden;">The password is not the same.</div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="role_content" class="suggestion_tip">
+ <div><span class="rule_label">Password Rule:</span></div>
+ <table>
+ <tr>
+ <td><span>1. Contains a minimum of 8 characters and a maximum of 32;</span></td>
+ </tr>
+ <tr>
+ <td><span>2. At least contains: one uppercase letter(A-Z), one lowercase letter(a-z), and one digit(0-9), one special character: ~`@#$%^&*-_=+|?/()<>[]{}",.;'!</span></td>
+ </tr>
+ <tr>
+ <td><span>3. Can not contain any the user name or user name in reverse order;</span></td>
+ </tr>
+ <tr>
+ <td><span>4. Can not contain space.</span></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="button_Group">
+ <button class="fk_button" id="confirm">Confirm</button>
+ <button class="fk_button" id="cancel">Cancel</button>
+ </div>
+</body>
+
+</html>
diff --git a/openo-portal/portal-auth/src/main/webapp/user/createUser.html b/openo-portal/portal-auth/src/main/webapp/user/createUser.html
new file mode 100644
index 00000000..ff12593c
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/createUser.html
@@ -0,0 +1,141 @@
+<!--
+ Copyright 2016 Huawei Technologies Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!doctype html>
+<html>
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/component.css">
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/user.css">
+ <script type="text/javascript" src="/openoui/auth/v1/user/3rd_lib/jquery-1.11.1.min.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/userTools.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/createUser.js"></script>
+</head>
+
+<body class="hw_body">
+ <div class="mt20" id="progress">
+ <div class="progress_charater">Enter Basic Information</div>
+ <div class="progress_bar"></div>
+ </div>
+ <div id="create_content">
+ <div id="info_content">
+ <table>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>User Name</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="userName" class="fwk_input" />
+ </div>
+ </td>
+ <td>
+ <div id="userNameError" class="errorTip" style="visibility: hidden;">error.</div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>Password</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="password" class="fwk_input" type="password" />
+ </div>
+ </td>
+ <td>
+ <div id="passwordError" class="errorTip" style="visibility: hidden;">error.</div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>Confirm Password</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="cfPassword" class="fwk_input" type="password" />
+ </div>
+ </td>
+ <td>
+ <div id="cfPsdError" class="errorTip" style="visibility: hidden;">error.</div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="mandatory"></span>
+ </td>
+ <td class="row_interval">
+ <span>Description</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <textarea id="description" class="fwk_textarea"></textarea>
+ </div>
+ </td>
+ <td>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="role_content" class="suggestion_tip">
+ <div><span class="rule_label">User Name Rule:</span></div>
+ <table>
+ <tr>
+ <td><span>1. Contains a minimum of 5 characters and a maximum of 30;</span></td>
+ </tr>
+ <tr>
+ <td><span>2. Contains only alphanumeric characters(a-z\,A-Z\,0-9);</span></td>
+ </tr>
+ <tr>
+ <td><span>3. Can not contain any special characters except "_", which only in the middle of the user name;</span></td>
+ </tr>
+ <tr>
+ <td><span>4. Can not contain space.</span></td>
+ </tr>
+ </table>
+ <div><span class="rule_label">Password Rule:</span></div>
+ <table>
+ <tr>
+ <td><span>1. Contains a minimum of 8 characters and a maximum of 32;</span></td>
+ </tr>
+ <tr>
+ <td><span>2. At least contains: one uppercase letter(A-Z), one lowercase letter(a-z), and one digit(0-9), one special character: ~`@#$%^&*-_=+|?/()<>[]{}",.;'!</span></td>
+ </tr>
+ <tr>
+ <td><span>3. Can not contain any the user name or user name in reverse order;</span></td>
+ </tr>
+ <tr>
+ <td><span>4. Can not contain space.</span></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="button_Group">
+ <button class="fk_button" id="confirm">Confirm</button>
+ <button class="fk_button" id="cancel">Cancel</button>
+ </div>
+</body>
+
+</html>
diff --git a/openo-portal/portal-auth/src/main/webapp/user/css/component.css b/openo-portal/portal-auth/src/main/webapp/user/css/component.css
new file mode 100644
index 00000000..9c81d666
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/css/component.css
@@ -0,0 +1,247 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.button_Group {
+ margin: 15px 0;
+ overflow: hidden;
+}
+
+.fk_button {
+ padding: 0 14px;
+ height: 24px;
+ float: left;
+ cursor: pointer;
+ text-decoration: none;
+ outline: 0;
+ border: 1px solid #d3d3d3;
+ text-align: center;
+ box-shadow: 0 1px 1px rgba(0,0,0,.05);
+ background: #fafafa;
+ background: -moz-linear-gradient(top,#fff,#fafafa);
+ background: -webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(100%,#fafafa));
+ background: -webkit-linear-gradient(top,#fff,#fafafa);
+ background: linear-gradient(to bottom,#fff,#fafafa);
+ border-radius: 6px;
+}
+.fk_button:hover {
+ color: #009ae7;
+ border: 1px solid #4AC9FF
+}
+.fk_button:active {
+ color: #0000;
+ border: 1px solid #4AC9FF
+}
+
+.button_Group > button {
+ margin-right: 10px;
+}
+.add_imag {
+ background-image: url(/openoui/auth/v1/user/images/add.png);
+}
+.delete_imag {
+ background-image: url(/openoui/auth/v1/user/images/delete.png);
+}
+.button_imag {
+ padding-left: 25px;
+ background-repeat: no-repeat;
+ background-position: 5px center;
+}
+
+
+/*table style*/
+table.dataTable thead th {
+ padding: 0!important;
+ height: 22px!important;
+ padding: 1px 10px 0 5px;
+ overflow: visible;
+ white-space: nowrap;
+ background: #f0f0f0!important;
+ border: 1px solid #ddd;
+ border-top: 1px solid #e3e3e3!important;
+ border-left: 1px dotted transparent!important;
+ border-bottom: 1px solid #e3e3e3!important;
+ box-sizing: content-box;
+ text-align: left;
+ font-weight:
+}
+table.dataTable tr td {
+ padding: 0 10px 0 5px!important;
+ height: 30px!important;
+ color: #000!important;
+ border: none!important;
+ border-left: 1px solid transparent!important;
+ border-bottom: 1px solid #e3e3e3!important;
+ overflow: hidden!important;
+ white-space: nowrap!important;
+ text-align: left;
+}
+
+table.dataTable th, table.dataTable td {
+ font-size: 12px!important;
+ color: #000!important;
+ max-width: 95%!important;
+ font-weight: 400!important;
+}
+
+.paginate_button {
+ color: #666!important;
+ font-size: 12px!important;
+ font-family: Lucida Grande,Verdana,Arial,Helvetica,sans-serif!important;
+ line-height: 24px!important;
+ text-align: center!important;
+ border: 1px solid #e0e0e0!important;
+ text-decoration: none!important;
+ padding: 0 7px!important;
+ border-radius: 3px!important;
+ background: #fff!important;
+}
+.paginate_button:hover {
+ color: #666!important;
+ border: 1px solid #4ac9ff!important;
+ cursor: pointer!important;
+}
+.current {
+ text-decoration: none!important;
+ color: #fff!important;
+ border: 1px solid #00adf5!important;
+ background: #4ad2ff!important;
+}
+
+/*over write the jquery dataTable*/
+.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
+ color: #666!important;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
+ color: #fff!important;
+}
+table.dataTable tr.odd, table.dataTable tr.odd>.sorting_1 {
+ background-color: #f9f9f9!important;
+}
+table.dataTable tr.even, table.dataTable tr.even>.sorting_1 {
+ background-color: #f7f7f7!important;
+}
+table.dataTable tbody tr:hover, tbody tr.odd>.sorting_1:hover, tbody tr.even>.sorting_1:hover {
+ background-color: #E6FBE0!important;
+}
+table.dataTable.no-footer {
+ border-bottom: none!important;
+}
+
+/*the length information step style*/
+.dataTables_length, .dataTables_info {
+ display: inline-block!important;
+ float: left!important;
+}
+.left {
+ display: inline-block;
+ float: left;
+ overflow: hidden;
+ margin: 10px 20px 10px 5px;
+}
+ .right {
+ display: inline-block;
+ float: right;
+ overflow: hidden;
+ margin-top: 10px;
+}
+.dataTables_length, .dataTables_info {
+ display: inline-block;!important;
+ float: left!important;
+ clear: none!important;
+ padding-top: 0!important;
+}
+.dataTables_length label {
+ font-size: 0;
+}
+
+/*page select style*/
+.dataTables_length select {
+ height: 22px;
+ line-height: 22px;
+ text-align: center;
+ margin-right: 5px;
+ border: 1px solid #e0e0e0;
+ color: #000;
+ padding: 1px;
+}
+.dataTables_length select:active {
+ text-align: center;
+ margin-right: 5px;
+ border: 1px solid #e0e0e0;
+ color: #000;
+ padding: 1px;
+ border-radius: 5px;
+}
+
+/* input style overwrite*/
+.fwk_input {
+ border: 1px solid #c3c3c3;
+ background-color: #fff;
+ padding: 0 0 0 6px;
+ border-radius: 4px;
+ color: #000;
+ display: inline-block;
+ outline: 0;
+ box-shadow: 1px 1px #f6f6f6 inset;
+ font-size: 12px;
+ background: #fff;
+ height: 24px;
+ width: 300px;
+}
+
+.fwk_input:hover, .fwk_input:focus {
+ border-color: #4ac9ff;
+ box-shadow: 1px 1px rgba(74,201,255,.2) inset;
+}
+.fwk_input[type=password] {
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ user-select: none;
+}
+
+.fwk_input:disabled {
+ background-color: #ededed!important;
+ color: #666;
+ box-shadow: 1px 1px #ededed inset!important;
+ border: 1px solid #e0e0e0!important;
+ resize: none;
+}
+
+/* input style textarea*/
+.fwk_textarea {
+ border: 1px solid #c3c3c3;
+ background-color: #fff;
+ padding: 0 0 0 6px;
+ border-radius: 4px;
+ color: #000;
+ display: inline-block;
+ outline: 0;
+ box-shadow: 1px 1px #f6f6f6 inset;
+ font-size: 12px;
+ background: #fff;
+ height: 72px;
+ width: 300px;
+}
+
+.fwk_textarea:hover, .fwk_textarea:focus {
+ border-color: #4ac9ff;
+ box-shadow: 1px 1px rgba(74,201,255,.2) inset;
+}
+
+
+
+
+
+
diff --git a/openo-portal/portal-auth/src/main/webapp/user/css/user.css b/openo-portal/portal-auth/src/main/webapp/user/css/user.css
new file mode 100644
index 00000000..b5060e9a
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/css/user.css
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+* {
+ font-family: Microsoft Yahei!important;
+ font-size: 12px;
+ color: #333;
+}
+
+.hw_body {
+ background-color: #fafafa!important;
+ padding-left: 15px;
+}
+
+.delete, .changePsd, .edit {
+ padding: 0 10px;
+ cursor: pointer;
+}
+
+.mt20 {
+ margin: 20px;
+}
+
+#progress {
+ position: relative;;
+ display: inline-block;
+}
+
+#serverError {
+ margin-left: 18px;
+}
+
+.mandatory {
+ color: #F00;
+ width: 7px;
+ padding-right: 10px 5px 10px 0;
+}
+
+.row_interval {
+ padding: 10px 10px 10px 0;
+}
+
+.progress_bar {
+ height: 4px;
+ border-radius: 2px;
+ width: 420px;
+ background: -webkit-linear-gradient(left, #6fd330, #29b6eb);
+ background: -o-linear-gradient(right, #6fd330, #29b6eb);
+ background: -moz-linear-gradient(right, #6fd330, #29b6eb);
+ background: linear-gradient(to right, #6fd330, #29b6eb);
+}
+
+.progress_charater {
+ display: block;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ color: #1fbe5c;
+ text-align: center;
+ margin-bottom: 20px;
+}
+
+.errorTip {
+ color: red;
+}
+
+.suggestion_tip {
+ height: auto;
+ background-color: #FFF5EA;
+ border: 1px solid #F9DFC5;
+ padding: 8px 10px;
+ margin: 3px 0;
+ color: #333;
+ line-height: 20px;
+ overflow: auto;
+}
+
+.rule_label {
+ font-weight: 600;
+}
+#role_content table {
+ margin-left: 20px;
+} \ No newline at end of file
diff --git a/openo-portal/portal-auth/src/main/webapp/user/images/add.png b/openo-portal/portal-auth/src/main/webapp/user/images/add.png
new file mode 100644
index 00000000..d1f82993
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/images/add.png
Binary files differ
diff --git a/openo-portal/portal-auth/src/main/webapp/user/images/delete.png b/openo-portal/portal-auth/src/main/webapp/user/images/delete.png
new file mode 100644
index 00000000..737f8797
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/images/delete.png
Binary files differ
diff --git a/openo-portal/portal-auth/src/main/webapp/user/images/edit.bak.png b/openo-portal/portal-auth/src/main/webapp/user/images/edit.bak.png
new file mode 100644
index 00000000..68d76257
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/images/edit.bak.png
Binary files differ
diff --git a/openo-portal/portal-auth/src/main/webapp/user/images/edit.png b/openo-portal/portal-auth/src/main/webapp/user/images/edit.png
new file mode 100644
index 00000000..68d76257
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/images/edit.png
Binary files differ
diff --git a/openo-portal/portal-auth/src/main/webapp/user/images/reset.bak.png b/openo-portal/portal-auth/src/main/webapp/user/images/reset.bak.png
new file mode 100644
index 00000000..778b9c0c
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/images/reset.bak.png
Binary files differ
diff --git a/openo-portal/portal-auth/src/main/webapp/user/images/reset.png b/openo-portal/portal-auth/src/main/webapp/user/images/reset.png
new file mode 100644
index 00000000..d57e9b39
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/images/reset.png
Binary files differ
diff --git a/openo-portal/portal-auth/src/main/webapp/user/js/changePassword.js b/openo-portal/portal-auth/src/main/webapp/user/js/changePassword.js
new file mode 100644
index 00000000..afe96b3d
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/js/changePassword.js
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+$(document).ready(function() {
+ var USER_SERVICE = "/openoapi/auth/v1/users";
+ var userId;
+ var $userName = $("#userName");
+ var $oldPassword = $("#oldPassword");
+ var $oldPasswordError = $("#oldPasswordError");
+ var $password = $("#password");
+ var $passwordError = $("#passwordError")
+
+ var $cfPsdError = $("#cfPsdError");
+
+ function initialPage() {
+ userId = getId();
+ getUserDetails(userId).done(function(data) {
+ listUserDetails(data);
+ });
+
+ /*initial the event*/
+ $("#confirm").click(function(e) {
+ if (!checkPassword()) {
+ return;
+ }
+ var data = getModifyUser();
+ changePsd(data).done(function() {
+ top.bootbox.alert("Password change successfully.", function(e) {
+ Rest.turn2URI("/openoui/auth/v1/user/html/user.html");
+ })
+ }).fail(function(e) {
+ if (e.statusText == "Unauthorized") {
+ showError($oldPasswordError, "The old password is wrong.");
+ } else {
+ showError($oldPasswordError, e.statusText);
+ }
+ })
+ })
+ $("#cancel").click(function(e) {
+ window.document.location = "/openoui/auth/v1/user/html/user.html";
+ })
+ }
+
+ function checkPassword() {
+ if (!checkMandatory()) {
+ return false;
+ }
+
+ if (!checkCfPassword()) {
+ showError($cfPsdError, "The password is not the same.");
+ return false;
+ }
+
+ if (!checkPasswordRule()) {
+ return false;
+ }
+ return true;
+ }
+
+ function checkMandatory() {
+ if ($password.val() == "") {
+ showError($passwordError, "Mandatory.");
+ return false;
+ }
+
+ if ($oldPassword.val() == "") {
+ showError($oldPasswordError, "Mandatory.");
+ return false;
+ }
+ return true;
+ }
+
+ function checkCfPassword() {
+ return $("#password").val() == $("#cfPassword").val();
+ }
+
+ function checkPasswordRule() {
+ var password = $password.val();
+
+ if (!checkLength(8, 32, password)) {
+ showError($passwordError, "The password length should between 8 and 32.");
+ return false
+ }
+
+ if (!checkCotainSpecial(password)) {
+ showError($passwordError, "At least contain: one uppercase letter, one lowercase letter, and one digit, one special character;");
+ return false
+ }
+
+ if (!checkNoContainAndReverse(password, $userName.val())) {
+ showError($passwordError, "The password should not contain the user name or reverse.");
+ return false
+ }
+
+ if (!checkNoSpace(password)) {
+ showError($passwordError, "The password should not contain space.");
+ return false
+ }
+ return true
+ }
+
+ function checkLength(min, max, str) {
+ return str.length >= min && str.length <= max;
+ }
+
+ function checkOnlySpecials(str, reg) {
+ return str.match(reg) && str.match(reg).length == str.length
+ }
+
+ function checkCotainSpecial(password) {
+ return password.match(/\~|\`|\@|\#|\$|\%|\^|\&|\*|\-|\_|\=|\+|\||\?|\/|\(|\)|\<|\>|\[|\]|\{|\}|\"|\,|\.|\;|\'|\!/g) != null
+ && password.match(/[0-9]/g) != null && password.match(/[a-z]/g) != null && password.match(/[A-Z]/g) != null;
+ }
+
+ function checkUderScore(str) {
+ return str.indexOf("_") != 0 && str.lastIndexOf("_") != str.length - 1;
+ }
+
+ function checkNoSpace(str) {
+ return str.indexOf(" ") == -1;
+ }
+
+ function checkNoContainAndReverse(str, str2) {
+ return str.indexOf(str2) == -1 && str.indexOf(str2.split("").reverse().join("")) == -1;
+ }
+
+ function getModifyUser() {
+ var data = {};
+ data["original_password"] = $("#oldPassword").val();
+ data.password = $("#password").val();
+ return data;
+ }
+
+ function getUserDetails(id) {
+ return Rest.http({
+ url: USER_SERVICE + "/" + id + "?=" + new Date().getTime(),
+ type: "GET",
+ async: false,
+ contentType: 'application/json',
+ dataType: "json"
+ })
+ }
+
+ function listUserDetails(data) {
+ $("#userName").val(data.name);
+ }
+
+
+ function changePsd(data) {
+ return Rest.http({
+ url: USER_SERVICE + "/" + userId + "/password" + "?=" + new Date().getTime(),
+ type: "POST",
+ async: false,
+ contentType: 'application/json',
+ dataType: "json",
+ data: JSON.stringify(data)
+ })
+ }
+
+ function getId() {
+ var qs = location.search;
+ qs = qs.indexOf("?") === 0 ? qs : ("?" + qs);
+ var start = qs.indexOf("id=") + 3;
+ var end = qs.indexOf("&") === -1 ? qs.length : qs.indexOf("&") - start;
+ return qs.substr(start, end);
+ }
+
+ function showError($Obj, message) {
+ $Obj.text(message);
+ $Obj.css("visibility", "visible");
+ setTimeout(function() {
+ hideError($Obj);
+ }, 5000)
+ }
+
+ function hideError($Obj) {
+ $Obj.css("visibility", "hidden");
+ }
+
+ initialPage();
+})
diff --git a/openo-portal/portal-auth/src/main/webapp/user/js/createUser.js b/openo-portal/portal-auth/src/main/webapp/user/js/createUser.js
new file mode 100644
index 00000000..7a95a8ee
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/js/createUser.js
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+$(document).ready(function() {
+
+ var USER_SERVICE = "/openoapi/auth/v1/users";
+ var $userName = $("#userName");
+ var $password = $("#password");
+ var $cfPsdError = $("#cfPsdError");
+ var $userNameError = $("#userNameError");
+ var $passwordError = $("#passwordError");
+
+ function initialPage() {
+ /*initial the event*/
+ $("#confirm").click(function(e) {
+ if (!checkUserRules()) {
+ return;
+ }
+ var data = getCreateUser();
+ createUser(data).done(function() {
+ window.document.location = "/openoui/auth/v1/user/html/user.html";
+ })
+ })
+ $("#cancel").click(function(e) {
+ window.document.location = "/openoui/auth/v1/user/html/user.html";
+ })
+ }
+
+ function getCreateUser() {
+ var data = {};
+ data.userName = $userName.val();
+ data.password = $password.val();
+ data.description = $("#description").val();
+ data.email = "xxxx@xxxx.com";
+ return data;
+ }
+
+ function createUser(data) {
+ return Rest.http({
+ url: USER_SERVICE + "?=" + new Date().getTime(),
+ type: "POST",
+ async: false,
+ contentType: 'application/json',
+ dataType: "json",
+ data: JSON.stringify(data)
+ })
+ }
+
+ function checkUserRules() {
+ if (!checkMandatory()) {
+ return false;
+ }
+
+ if (!checkCfPassword()) {
+ return false;
+ }
+
+ if (!checkUserNameRule()) {
+ return false;
+ }
+
+ if (!checkPasswordRule()) {
+ return false;
+ }
+ return true;
+ }
+
+ function checkMandatory() {
+ if ($userName.val() == "") {
+ showError($userNameError, "Mandatory.");
+ return false;
+ }
+
+ if ($password.val() == "") {
+ showError($passwordError, "Mandatory.");
+ return false;
+ }
+ return true;
+ }
+
+ function checkUserNameRule() {
+ var username = $userName.val();
+ if (!checkLength(5, 30, username)) {
+ showError($userNameError, "The user name length should between 5 and 30.");
+ return false
+ }
+
+ if (!checkOnlySpecials(username, /[0-9]|[a-z]|[A-Z]|_/g)) {
+ showError($userNameError, "Only Character(a-z\,A-Z\,0-9,_) is allowed.");
+ return false
+ }
+
+ if(!checkUderScore(username)) {
+ showError($userNameError, 'The character "_" is only allowed in the middle of the user name.');
+ return false
+ }
+
+ if (!checkNoSpace(username)) {
+ showError($userNameError, "The user name should not contain space.");
+ return false
+ }
+
+ return true
+ }
+
+ function checkPasswordRule() {
+ var password = $password.val();
+
+ if (!checkLength(8, 32, password)) {
+ showError($passwordError, "The password length should between 8 and 32.");
+ return false
+ }
+
+ if (!checkCotainSpecial(password)) {
+ showError($passwordError, "At least contain: one uppercase letter, one lowercase letter, and one digit, one special character;");
+ return false
+ }
+
+ if (!checkNoContainAndReverse(password, $userName.val())) {
+ showError($passwordError, "The password should not contain the user name or reverse.");
+ return false
+ }
+
+ if (!checkNoSpace(password)) {
+ showError($passwordError, "The password should not contain space.");
+ return false
+ }
+ return true
+ }
+
+ function checkLength(min, max, str) {
+ return str.length >= min && str.length <= max;
+ }
+
+ function checkOnlySpecials(str, reg) {
+ return str.match(reg) && str.match(reg).length == str.length
+ }
+
+ function checkCotainSpecial(password) {
+ return password.match(/\~|\`|\@|\#|\$|\%|\^|\&|\*|\-|\_|\=|\+|\||\?|\/|\(|\)|\<|\>|\[|\]|\{|\}|\"|\,|\.|\;|\'|\!/g) != null
+ && password.match(/[0-9]/g) != null && password.match(/[a-z]/g) != null && password.match(/[A-Z]/g) != null;
+ }
+
+ function checkUderScore(str) {
+ return str.indexOf("_") != 0 && str.lastIndexOf("_") != str.length - 1;
+ }
+
+ function checkNoContainAndReverse(str, str2) {
+ return str.indexOf(str2) == -1 && str.indexOf(str2.split("").reverse().join("")) == -1;
+ }
+
+ function checkNoSpace(str) {
+ return str.indexOf(" ") == -1;
+ }
+
+ function checkCfPassword() {
+ if ($password.val() == $("#cfPassword").val()) {
+ return true;
+ }
+ showError($cfPsdError, "The password is not the same.");
+ return false;
+ }
+
+ function showError($Obj, message) {
+ $Obj.text(message);
+ $Obj.css("visibility", "visible");
+ setTimeout(function() {
+ hideError($Obj);
+ }, 5000)
+ }
+
+ function hideError($Obj) {
+ $Obj.css("visibility", "hidden");
+ }
+
+ initialPage();
+})
diff --git a/openo-portal/portal-auth/src/main/webapp/user/js/modifyUser.js b/openo-portal/portal-auth/src/main/webapp/user/js/modifyUser.js
new file mode 100644
index 00000000..b01cebe4
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/js/modifyUser.js
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+$(document).ready(function() {
+ var USER_SERVICE = "/openoapi/auth/v1/users";
+ var userId;
+ function initialPage() {
+ userId = getId();
+ getUserDetails(userId).done(function(data) {
+ listUserDetails(data);
+ });
+
+ /*initial the event*/
+ $("#confirm").click(function(e) {
+ var data = getModifyUser();
+ modifyUser(data).done(function() {
+ window.document.location = "/openoui/auth/v1/user/html/user.html";
+ })
+ })
+ $("#cancel").click(function(e) {
+ window.document.location = "/openoui/auth/v1/user/html/user.html";
+ })
+ }
+
+ function getModifyUser() {
+ var data = {};
+ data.description = $("#description").val();
+ data.email = "xxxx@xxxx.com";
+ return data;
+ }
+ function getUserDetails(id) {
+ return Rest.http({
+ url: USER_SERVICE + "/" + id + "?=" + new Date().getTime(),
+ type: "GET",
+ async: false,
+ contentType: 'application/json',
+ dataType: "json"
+ })
+ }
+
+ function listUserDetails(data) {
+ $("#userName").val(data.name);
+ $("#description").val(data.description);
+ }
+
+ function modifyUser(data) {
+ return Rest.http({
+ url: USER_SERVICE + "/" + userId + "?=" + new Date().getTime(),
+ type: "PATCH",
+ async: false,
+ contentType: 'application/json',
+ dataType: "json",
+ data: JSON.stringify(data)
+ })
+ }
+
+ function getId() {
+ var qs = location.search;
+ qs = qs.indexOf("?") === 0 ? qs : ("?" + qs);
+ var start = qs.indexOf("id=") + 3;
+ var end = qs.indexOf("&") === -1 ? qs.length : qs.indexOf("&") - start;
+ return qs.substr(start, end);
+ }
+
+ initialPage();
+}) \ No newline at end of file
diff --git a/openo-portal/portal-auth/src/main/webapp/user/js/user.js b/openo-portal/portal-auth/src/main/webapp/user/js/user.js
new file mode 100644
index 00000000..bc442616
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/js/user.js
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+$(document).ready(function() {
+ var USER_SERVICE = "/openoapi/auth/v1/users";
+ var deleteEditOpt = "<img class='edit' title='edit' src='/openoui/auth/v1/user/images/edit.png'><img class='changePsd' title='Change Password' src='/openoui/auth/v1/user/images/reset.png'><img class='delete' title='delete' src='/openoui/auth/v1/user/images/delete.png'>";
+ var editOpt = "<img class='edit' title='edit' src='/openoui/auth/v1/user/images/edit.png'><img class='changePsd' title='Change Password' src='/openoui/auth/v1/user/images/reset.png'>";
+
+ var userListHeader = [
+ { title: "User", data: "User",width: "20%"},
+ { title: "Description", data: "Description",width: "60%"},
+ { title: "Operations", data: "Operations",width: "20%"}
+ ];
+ function initialPage() {
+ /*get the user list data;*/
+ getUserList().done(function(data) {
+ var data = formatUsers(data);
+ Table.create(data, "table_id", userListHeader);
+ $(".hw_body").css("visibility", "visible");
+ }).error(function(data) {
+ if (data.status == 403) {
+ $(".hw_body").html("<span style='font-size:20px;'>" + JSON.parse(data.responseText).error.message + "</span>");
+ }
+ });
+
+ /*add the listener*/
+ $("#table_id tbody").on("click", "td", function(e) {
+ var classname = e.target.className;
+ var id = $("#table_id").DataTable().row(this).data().rowid;
+ if (classname == "delete") {
+ top.bootbox.confirm("Are you sure to delete this user?", function(result) {
+ if (result) {
+ deleteUser(id).done(function() {
+ getUserList().done(function(data) {
+ var data = formatUsers(data);
+ var datatable = $("#table_id").dataTable().api();
+ datatable.clear();
+ datatable.rows.add(data);
+ datatable.draw();
+ })
+ })
+ }
+ })
+ } else if (classname == "edit") {
+ window.document.location = "/openoui/auth/v1/user/html/modifyUser.html" + "?id=" + id;
+ } else if (classname == "changePsd") {
+ window.document.location = "/openoui/auth/v1/user/html/changePassword.html" + "?id=" + id;
+ }
+ })
+
+ $("#create").click(function(e) {
+ window.document.location = "/openoui/auth/v1/user/html/createUser.html";
+ })
+ }
+
+ function getUserList() {
+ return Rest.http({
+ url: USER_SERVICE + "?=" + new Date().getTime(),
+ type: "GET",
+ async: false,
+ contentType: 'application/json',
+ dataType: "json"
+ })
+ }
+
+ function deleteUser(id) {
+ return Rest.http({
+ url: USER_SERVICE + "/" + id + "?=" + new Date().getTime(),
+ type: "DELETE",
+ async: false,
+ contentType: 'application/json',
+ dataType: "json"
+ })
+ }
+
+ function formatUsers(data) {
+ var tableData = [];
+ for (var i = 0; i < data.length; i++) {
+ var temp = {};
+ temp.rowid = data[i].id;
+ temp.User = data[i].name;
+ temp.Description = data[i].description;
+ if (data[i].name == "admin") {
+ temp.Operations = editOpt;
+ } else {
+ temp.Operations = deleteEditOpt;
+ }
+ tableData.push(temp);
+ }
+ return tableData;
+ }
+ initialPage();
+
+ setTimeout(function() {
+ Table.enableToolTips("table_id");
+ }, 0)
+});
diff --git a/openo-portal/portal-auth/src/main/webapp/user/js/userTools.js b/openo-portal/portal-auth/src/main/webapp/user/js/userTools.js
new file mode 100644
index 00000000..d9157a9a
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/js/userTools.js
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2016 Huawei Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var Table = {};
+Table.create = function(data, id, columns) {
+ $('#' + id).DataTable({
+ data: data,
+ bSort: false,
+ "sDom": "<t<'left'li><'right'p>>",
+ columns: columns
+ });
+ }
+ /**
+ * update the table data, the cloumns must be same with the create one.
+ * data: the update data. as the create structure
+ * id: the table id.
+ */
+Table.updata = function(data, id) {
+ var datatable = $('#' + id).dataTable().api();
+ datatable.clear();
+ datatable.rows.add(data);
+ datatable.draw();
+}
+
+Table.enableToolTips = function(id) {
+ $("#" + id + " tr th").each(function(index, sdom){
+ sdom.title = sdom.textContent;
+ })
+ $("#" + id + " tbody tr td").each(function(index, sdom){
+ sdom.title = sdom.textContent;
+ })
+}
+
+var Rest = {};
+
+Rest.http = function(setting) {
+ var ret = $.ajax(setting);
+ ret.fail(function(data) {
+ try {
+ if (data.responseText.indexOf("login") != -1) {
+ top.window.document.location.reload()
+ }
+ var result = JSON.parse(data.responseText);
+ if (result.error && result.error.message) {
+ top.bootbox.alert(result.error.message, function() {});
+ }
+ } catch (e) {
+ }
+
+ })
+ return ret;
+}
+
+Rest.turn2URI = function(url) {
+ var cookies = document.cookie.split(";");
+ var cookie = "";
+ for (var i = 0; i < cookies.length; i++) {
+ if (cookies[i].split("=")[0] == "X-Auth-Token") {
+ cookie = cookies[i].split("=")[1];
+ break;
+ }
+ }
+ $.ajax({
+ url: "/openoapi/auth/v1/tokens",
+ type: "HEAD",
+ headers: {
+ "X-Auth-Token": cookie
+ },
+ success: function(data) {
+ window.document.location = url;
+ },
+ error: function(data) {
+ top.window.document.location.reload();
+ }
+ })
+}
diff --git a/openo-portal/portal-auth/src/main/webapp/user/modifyUser.html b/openo-portal/portal-auth/src/main/webapp/user/modifyUser.html
new file mode 100644
index 00000000..2c3bdcae
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/modifyUser.html
@@ -0,0 +1,77 @@
+<!--
+ Copyright 2016 Huawei Technologies Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!doctype html>
+<html>
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/component.css">
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/user.css">
+ <script type="text/javascript" src="/openoui/auth/v1/user/3rd_lib/jquery-1.11.1.min.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/userTools.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/modifyUser.js"></script>
+
+</head>
+
+<body class="hw_body">
+ <div class="mt20" id="progress">
+ <div class="progress_charater">Enter Basic Information</div>
+ <div class="progress_bar"></div>
+ </div>
+ <div id="create_content">
+ <table>
+ <tr>
+ <td>
+ <span class="mandatory">*</span>
+ </td>
+ <td class="row_interval">
+ <span>User Name</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <input id="userName" class="fwk_input" disabled="disabled"/>
+ </div>
+ </td>
+ <td>
+
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <span class="mandatory"></span>
+ </td>
+ <td class="row_interval">
+ <span>Description</span><span>:</span>
+ </td>
+ <td>
+ <div>
+ <textarea id="description" class="fwk_textarea"></textarea>
+ </div>
+ </td>
+ <td>
+
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div class="button_Group">
+ <button class="fk_button" id="confirm">Confirm</button>
+ <button class="fk_button" id="cancel">Cancel</button>
+ </div>
+</body>
+
+</html>
diff --git a/openo-portal/portal-auth/src/main/webapp/user/user.html b/openo-portal/portal-auth/src/main/webapp/user/user.html
new file mode 100644
index 00000000..39050638
--- /dev/null
+++ b/openo-portal/portal-auth/src/main/webapp/user/user.html
@@ -0,0 +1,41 @@
+<!--
+ Copyright 2016 Huawei Technologies Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!doctype html>
+<html>
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/3rd_lib/jquery.dataTables.min.css">
+ <script type="text/javascript" src="/openoui/auth/v1/user/3rd_lib/jquery-1.11.1.min.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/3rd_lib/bootbox.min.js"></script>
+ <script type="text/javascript" charset="utf8" src="/openoui/auth/v1/user/3rd_lib/jquery.dataTables.min.js"></script>
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/component.css">
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/userTools.js"></script>
+ <script type="text/javascript" src="/openoui/auth/v1/user/js/user.js"></script>
+ <link rel="stylesheet" type="text/css" href="/openoui/auth/v1/user/css/user.css">
+</head>
+
+<body class="hw_body" style="visibility: hidden;">
+ <div class="button_Group">
+ <button class="fk_button add_imag button_imag" id="create">Create</button>
+ </div>
+ <div>
+ <table id="table_id" class="display" style="table-layout: fixed"></table>
+ </div>
+</body>
+
+</html>