Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
T
TokenVaultManagement
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jasonwai
TokenVaultManagement
Commits
a8162890
Commit
a8162890
authored
Jun 05, 2023
by
Jason
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
目前做到user admin切換按鈕Ajax未完成
parent
caf7a545
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
5136 additions
and
146 deletions
+5136
-146
TokenVaultController .cs
...Management/backstage/Controllers/TokenVaultController .cs
+490
-78
UserController.cs
... Vault Management/backstage/Controllers/UserController.cs
+77
-6
CallApi.cs
Merchant Token Vault Management/backstage/Helpers/CallApi.cs
+1
-1
TokenVault.cs
...ault Management/backstage/Models/TokenVault/TokenVault.cs
+26
-2
User.cs
...ant Token Vault Management/backstage/Models/Users/User.cs
+10
-0
_Layout.cshtml
...en Vault Management/backstage/Views/Shared/_Layout.cshtml
+73
-11
CreateField.cshtml
... Management/backstage/Views/TokenVault/CreateField.cshtml
+87
-0
CreateTokenVault.cshtml
...gement/backstage/Views/TokenVault/CreateTokenVault.cshtml
+3
-3
ListFields.cshtml
...t Management/backstage/Views/TokenVault/ListFields.cshtml
+125
-9
ListMasks.cshtml
...lt Management/backstage/Views/TokenVault/ListMasks.cshtml
+168
-0
ListUsers.cshtml
...lt Management/backstage/Views/TokenVault/ListUsers.cshtml
+51
-20
GetDepartment.cshtml
...ault Management/backstage/Views/User/GetDepartment.cshtml
+1
-1
ListDepartments.cshtml
...lt Management/backstage/Views/User/ListDepartments.cshtml
+3
-3
ListUsers.cshtml
...en Vault Management/backstage/Views/User/ListUsers.cshtml
+7
-6
Login.cshtml
... Token Vault Management/backstage/Views/User/Login.cshtml
+6
-6
style.css
...nt Token Vault Management/backstage/wwwroot/css/style.css
+8
-0
tokenizationPlatform.css
...Management/backstage/wwwroot/css/tokenizationPlatform.css
+3993
-0
LOGO_nsecured.svg
...ult Management/backstage/wwwroot/images/LOGO_nsecured.svg
+7
-0
icon-lan-cn-80.jpg
...lt Management/backstage/wwwroot/images/icon-lan-cn-80.jpg
+0
-0
icon-lan-en-80.jpg
...lt Management/backstage/wwwroot/images/icon-lan-en-80.jpg
+0
-0
No files found.
Merchant Token Vault Management/backstage/Controllers/TokenVaultController .cs
View file @
a8162890
This diff is collapsed.
Click to expand it.
Merchant Token Vault Management/backstage/Controllers/UserController.cs
View file @
a8162890
...
...
@@ -65,7 +65,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if
(!
User
.
Identity
.
IsAuthenticated
)
{
return
RedirectToAction
(
"Login"
);
return
RedirectToAction
(
"Login"
,
"User"
);
}
...
...
@@ -152,7 +152,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if
(!
User
.
Identity
.
IsAuthenticated
)
{
return
RedirectToAction
(
"Login"
);
return
RedirectToAction
(
"Login"
,
"User"
);
}
...
...
@@ -243,7 +243,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if
(!
User
.
Identity
.
IsAuthenticated
)
{
return
RedirectToAction
(
"Login"
);
return
RedirectToAction
(
"Login"
,
"User"
);
}
if
(
string
.
IsNullOrEmpty
(
user
.
password
))
...
...
@@ -296,7 +296,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if
(!
User
.
Identity
.
IsAuthenticated
)
{
return
RedirectToAction
(
"Login"
);
return
RedirectToAction
(
"Login"
,
"User"
);
}
...
...
@@ -336,7 +336,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if
(!
User
.
Identity
.
IsAuthenticated
)
{
return
RedirectToAction
(
"Login"
);
return
RedirectToAction
(
"Login"
,
"User"
);
}
...
...
@@ -391,7 +391,7 @@ namespace backstage.Controllers
// 確認使用者是否已經登入
if
(!
User
.
Identity
.
IsAuthenticated
)
{
return
RedirectToAction
(
"Login"
);
return
RedirectToAction
(
"Login"
,
"User"
);
}
if
(
string
.
IsNullOrEmpty
(
department
.
name
))
...
...
@@ -548,6 +548,77 @@ namespace backstage.Controllers
}
[
HttpPost
]
public
async
Task
<
ResultModel
>
AdminAddAjax
(
int
uid
)
{
var
result
=
new
ResultModel
();
// 確認使用者是否已經登入
if
(!
User
.
Identity
.
IsAuthenticated
)
{
result
.
IsSuccess
=
false
;
result
.
Message
=
"未登入"
;
return
result
;
}
// 取得使用者的 "token" Claim 值
string
token
=
User
.
FindFirstValue
(
"token"
);
var
url
=
_config
[
"IP"
]
+
"/admin/add"
;
var
httpMethod
=
HttpMethod
.
Post
;
var
userData
=
new
[]
{
new
{
uid
=
uid
,
desc
=
""
,
roles
=
new
[]
{
1
},
enabled
=
1
}
};
var
parameters
=
new
Dictionary
<
string
,
string
>
{
{
"token"
,
token
},
{
"user"
,
JsonConvert
.
SerializeObject
(
userData
)}
};
var
apiResult
=
await
_callApi
.
CallAPI
(
url
,
parameters
,
httpMethod
);
if
(
apiResult
.
IsSuccess
)
{
var
Response
=
JsonConvert
.
DeserializeObject
<
Response
>(
apiResult
.
Data
.
ToString
());
if
(
Response
.
r
==
0
)
{
result
.
IsSuccess
=
true
;
result
.
Message
=
"權限調整成功"
;
return
result
;
}
else
{
result
.
IsSuccess
=
false
;
result
.
Message
=
Response
.
m
.
ToString
();
return
result
;
}
}
else
{
result
.
IsSuccess
=
false
;
result
.
Message
=
apiResult
.
Message
;
return
result
;
}
}
[
HttpGet
]
public
async
Task
<
IActionResult
>
Logout
()
{
...
...
Merchant Token Vault Management/backstage/Helpers/CallApi.cs
View file @
a8162890
...
...
@@ -77,7 +77,7 @@ namespace backstage.Helpers
content
.
Headers
.
ContentType
=
new
MediaTypeHeaderValue
(
"application/x-www-form-urlencoded"
);
request
.
Content
.
Headers
.
ContentLength
=
contentLength
.
Length
;
request
.
Headers
.
Host
=
host
;
//
request.Headers.Host = host;
// 執行 API 呼叫
var
response
=
await
client
.
SendAsync
(
request
);
...
...
Merchant Token Vault Management/backstage/Models/TokenVault/TokenVault.cs
View file @
a8162890
...
...
@@ -27,11 +27,11 @@ namespace backstage.Models.TokenVault
public
class
TokenVaultForCreate
{
public
int
type
{
get
;
set
;
}
public
int
type
{
get
;
set
;
}
=
1
;
public
int
merchant_id
{
get
;
set
;
}
public
string
name
{
get
;
set
;
}
public
string
url
{
get
;
set
;
}
public
string
url
{
get
;
set
;
}
=
""
;
public
string
description
{
get
;
set
;
}
...
...
@@ -54,6 +54,18 @@ namespace backstage.Models.TokenVault
public
int
Enabled
{
get
;
set
;
}
public
string
key_id
{
get
;
set
;
}
public
List
<
User
>
users
{
get
;
set
;
}
public
List
<
Mask
>
masks
{
get
;
set
;
}
}
public
class
FieldForCreate
{
public
int
merchant_id
{
get
;
set
;
}
public
int
vault_id
{
get
;
set
;
}
public
string
name
{
get
;
set
;
}
public
string
desc
{
get
;
set
;
}
public
string
format_exp
{
get
;
set
;
}
public
int
enabled
{
get
;
set
;
}
}
public
class
FieldsResponse
...
...
@@ -61,8 +73,20 @@ namespace backstage.Models.TokenVault
public
int
r
{
get
;
set
;
}
public
string
m
{
get
;
set
;
}
public
string
flags
{
get
;
set
;
}
public
List
<
string
>
failInfo
{
get
;
set
;
}
//public int count { get; set; }
public
List
<
Field
>
fields
{
get
;
set
;
}
}
public
class
Mask
{
public
int
id
{
get
;
set
;
}
public
int
type
{
get
;
set
;
}
//0:資料遮罩 *號 , 1:資料亂碼 相同格式 數字或文字替換
public
int
is_unique
{
get
;
set
;
}
public
string
setting
{
get
;
set
;
}
}
}
Merchant Token Vault Management/backstage/Models/Users/User.cs
View file @
a8162890
...
...
@@ -120,5 +120,15 @@ public class emaildata
public
string
flags
{
get
;
set
;
}
}
public
class
Response
{
//user/list response
public
int
r
{
get
;
set
;
}
public
Object
m
{
get
;
set
;
}
public
string
flags
{
get
;
set
;
}
}
}
Merchant Token Vault Management/backstage/Views/Shared/_Layout.cshtml
View file @
a8162890
...
...
@@ -32,7 +32,7 @@
<link
href=
"~/css/myStylecss.css"
rel=
"stylesheet"
/>
<link
rel=
"stylesheet"
href=
"https://cdn.jsdelivr.net/npm/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.min.css"
>
<link
href=
"~/css/tokenizationPlatform.css"
rel=
"stylesheet"
/>
@RenderSection("header", required: false)
</head>
...
...
@@ -41,7 +41,7 @@
<nav
class=
"navbar default-layout-navbar col-lg-12 col-12 p-0 fixed-top d-flex flex-row"
>
<div
class=
"text-center navbar-brand-wrapper d-flex align-items-center justify-content-center"
>
<a
class=
"navbar-brand brand-logo"
asp-controller=
"Home"
asp-action=
"Index"
><img
src=
"~/images/
logo.pn
g"
alt=
"logo"
/></a>
<a
class=
"navbar-brand brand-logo"
asp-controller=
"Home"
asp-action=
"Index"
><img
src=
"~/images/
LOGO_nsecured.sv
g"
alt=
"logo"
/></a>
@*
<a
class=
"navbar-brand brand-logo-mini"
asp-controller=
"Home"
asp-action=
"Index"
><img
src=
"~/images/logo-mini.svg"
alt=
"logo"
/></a>
*@
</div>
<div
class=
"navbar-menu-wrapper d-flex align-items-stretch"
>
...
...
@@ -55,10 +55,10 @@
{
<a
class=
"nav-link dropdown-toggle"
id=
"profileDropdown"
href=
"#"
data-toggle=
"dropdown"
aria-expanded=
"false"
>
<
div
class=
"nav-profile-img"
>
<img
src=
"~/images/faces/man.svg"
alt=
"image"
>
<span
class=
"availability-status online"
></span>
</div>
<
!--<div class="nav-profile-img">--
>
@*
<img
src=
"~/images/faces/man.svg"
alt=
"image"
>
*@
<
!--<
span class="availability-status online"></span>
</div>
-->
<div
class=
"nav-profile-text"
>
<p
class=
"mb-1 text-black"
>
@Context.User.Claims.FirstOrDefault(m => m.Type == "username").Value
</p>
</div>
...
...
@@ -88,15 +88,77 @@
</li>
<!--<li>
<div class="row align-items-center">
<div class="col-auto pdR3 noneUnderMD">
<label class="text-black mgB0" for="department">部門:</label>
</div>
<div class="col-auto pdL0 pdR300 mgR20">
<select class="custom-select0 form-control form-control-sm" id="department">
<option value="0" selected="">台景達金融科技</option>
<option value="1">部門1</option>
<option value="2">部門2</option>
<option value="3">部門3</option>
</select>
</div>-->
<!-- <div class="col-auto pdL0">
<div class="nav-item nav-departmentSetting dropdown">
<a class="nav-link dropdown-toggle mgL3" id="departmentSetting" href="#" data-toggle="dropdown" aria-expanded="false">
<div class="nav-profile-img0">
<span class="mb-1 text-black">部門管理</span>
</div>
</a>
<div class="dropdown-menu navbar-dropdown" aria-labelledby="departmentSetting">
<a class="dropdown-item" href="">
<i class="mdi mdi-account-settings mr-2"></i>新增部門
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="">
<i class="mdi mdi-lock-open mr-2"></i>部門清單
</a>
</div>
</div>
</div> -->
<!--</div>
</li>-->
<li
class=
"nav-item dropdown"
>
<a
class=
"nav-link count-indicator dropdown-toggle"
id=
"languageDropdown"
href=
"#"
title=
"語言"
data-toggle=
"dropdown"
aria-expanded=
"false"
>
<i
class=
"mdi mdi-earth"
></i>
</a>
<div
class=
"dropdown-menu dropdown-menu-right navbar-dropdown preview-list"
aria-labelledby=
"languageDropdown"
>
<a
class=
"dropdown-item preview-item"
>
<div
class=
"preview-thumbnail"
>
<div
class=
"preview-icon languageIcon"
>
<img
src=
"/images/icon-lan-en-80.jpg"
>
</div>
</div>
<div
class=
"preview-item-content d-flex align-items-start flex-column justify-content-center"
>
<h6
class=
"preview-subject font-weight-normal mb-1"
>
English
</h6>
</div>
</a>
<div
class=
"dropdown-divider"
></div>
<a
class=
"dropdown-item preview-item"
>
<div
class=
"preview-thumbnail"
>
<div
class=
"preview-icon languageIcon"
>
<img
src=
"/images/icon-lan-cn-80.jpg"
>
</div>
</div>
<div
class=
"preview-item-content d-flex align-items-start flex-column justify-content-center"
>
<h6
class=
"preview-subject font-weight-normal mb-1"
>
中文
</h6>
</div>
</a>
</div>
</li>
<li
class=
"nav-item d-none d-lg-block full-screen-link"
>
<a
class=
"nav-link"
>
<i
class=
"mdi mdi-fullscreen"
id=
"fullscreen-button"
></i>
</a>
</li>
@*
<li
class=
"nav-item d-none d-lg-block full-screen-link"
>
<a
class=
"nav-link"
>
<i
class=
"mdi mdi-fullscreen"
id=
"fullscreen-button"
></i>
</a>
</li>
*@
</ul>
<button
class=
"navbar-toggler navbar-toggler-right d-lg-none align-self-center"
type=
"button"
data-toggle=
"offcanvas"
>
<span
class=
"mdi mdi-menu"
></span>
...
...
Merchant Token Vault Management/backstage/Views/TokenVault/CreateField.cshtml
0 → 100644
View file @
a8162890
@model backstage.Models.TokenVault.Field
@{
ViewData["Title"] = "新增欄位";
}
<!-- partial -->
<div class="page-header">
<h3 class="page-title">新增欄位</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
</div>
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
@*路徑列*@
<div class="col-md-12">
<ul class="breadcrumb breadcrumb_memberGo">
<li class="breadcrumb-item active"><a asp-action="List" asp-route-merchantId="@ViewBag.Merchant_id">資料代碼保險庫</a></li>
<li class="breadcrumb-item active"><a asp-action="ListFields" asp-route-merchant_id="@ViewBag.Merchant_id" asp-route-vault_id="@ViewBag.vault_id">欄位資料</a></li>
<li class="breadcrumb-item ">新增欄位</li>
</ul>
</div>
</div>
<form class="forms-sample" method="post" asp-action="CreateDepartment" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<p class="form-title card-description">基本資料</p>
<div class="row">
<div class="col-md-6 form-group required">
<label asp-for="name" class="col-form-label" for=""></label>
<input asp-for="name" type="text" class="form-control" >
</div>
<div class="col-md-4 form-group required">
<label asp-for="desc" class="col-form-label" for=""></label>
<input asp-for="desc" type="text" class="form-control" >
</div>
</div>
<div class="row">
<div class="col-md-4 form-group required">
<label asp-for="format_exp" class="col-form-label" for=""></label>
<input asp-for="format_exp" type="text" class="form-control" id="">
<span asp-validation-for="format_exp" class="text-danger"></span>
</div>
<div class="col-md-4 form-group required">
<label asp-for="Enabled" class="col-form-label" for=""></label>
<input asp-for="Enabled" type="text" class="form-control" id="">
<span asp-validation-for="Enabled" class="text-danger"></span>
</div>
</div>
<button type="submit" class="btn btn-primary mr-2">送出</button>
<a type="button" class="btn btn-light" asp-action="ListFields">返回列表</a>
</form>
</div>
</div>
</div>
</div>
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
</script>
}
Merchant Token Vault Management/backstage/Views/TokenVault/CreateTokenVault.cshtml
View file @
a8162890
...
...
@@ -21,13 +21,13 @@
<div class="card-body">
<h4 class="card-title">新增TokenVault</h4>
<form class="forms-sample" method="post" asp-action="Create
Departmen
t" autocomplete="off">
<form class="forms-sample" method="post" asp-action="Create
TokenVaul
t" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<p class="form-title card-description">基本資料</p>
<div class="row">
<div class="col-md-6 form-group required">
<select id="selectDepartmentList" class="form-control" asp-items="ViewBag.DepartmentsList">
<select id="selectDepartmentList" class="form-control" asp-
for="merchant_id" asp-
items="ViewBag.DepartmentsList">
<option value="">選擇部門</option>
</select>
...
...
@@ -54,7 +54,7 @@
<button type="submit" class="btn btn-primary mr-2">新增</button>
<a type="button" class="btn btn-light" asp-action="List
Departments
">返回列表</a>
<a type="button" class="btn btn-light" asp-action="List">返回列表</a>
</form>
</div>
</div>
...
...
Merchant Token Vault Management/backstage/Views/TokenVault/ListFields.cshtml
View file @
a8162890
...
...
@@ -3,7 +3,35 @@
ViewData["Title"] = "Fields列表管理";
}
@section header{
<script>
//欄位檢查
function validateForm() {
var nameInput = document.getElementsByName("name")[0];
var nameValue = nameInput.value.trim();
var nameRegex = /^[a-zA-Z0-9_]+$/;
var nameErrorDiv = document.getElementById("nameError");
var submitButton = document.querySelector("button[type='submit']");
if (nameValue === "") {
nameErrorDiv.textContent = "名稱不能為空";
submitButton.disabled = true; // 禁用提交按鈕
return false; // 阻止表單提交
} else if (!nameRegex.test(nameValue)) {
nameErrorDiv.textContent = "名稱只能包含英文字母、數字和底線";
submitButton.disabled = true; // 禁用提交按鈕
return false; // 阻止表單提交
} else {
nameErrorDiv.textContent = "";
submitButton.disabled = false; // 啟用提交按鈕
return true; // 允許表單提交
}
}
</script>
}}
<div class="page-header">
<h3 class="page-title">Fields列表管理列表管理</h3>
<input id="msg" hidden value="@TempData["msg"]" />
...
...
@@ -13,6 +41,7 @@
}
<div id="msgDiv"></div>
</div>
<div class="row">
<div class="col-lg-12 grid-margin stretch-card">
...
...
@@ -29,6 +58,26 @@
</div>
</div>
<div style="display: flex; justify-content: space-between;">
<div style="float: left; width: 50%;">
<div class="table-responsive">
<table class="table table-striped table-hover0 table-bordered0" id="memberGoTbl_dataDetail">
<tbody>
<tr>
<th>保險庫</th>
<td class="item">ID</td>
<td class="content">@ViewBag.VaultInfo.vault_id</td>
<td class="item">名稱</td>
<td class="content">@ViewBag.VaultInfo.name</td>
</tr>
</tbody>
</table>
</div>
</div>
<div style="float: right;">
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">Create</a>
</div>
</div>
<div>
<div class="rank-table">
<div class="table-responsive">
...
...
@@ -59,7 +108,7 @@
<td>
<!-- <button class="btn btnPermission btn-sm" data-toggle="modal" data-target="#permission">資料遮罩</button> -->
<a
href="tokenVault_fields_masks.html" class="btn btnPermission btn-sm
">資料遮罩</a>
<a
class="btn btnPermission btn-sm masksBtn
">資料遮罩</a>
<a class="btn btnPermission btn-sm usersBtn">使用者</a>
</td>
</tr>
...
...
@@ -80,7 +129,46 @@
</div>
</div>
<!-- MODAL -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form class="forms-sample" method="post" asp-action="CreateField" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<h4 class="modal-title">基本資料</h4>
<div class="modal-body">
<div class="form-group">
<input name="merchant_id" value=@ViewBag.Merchant_id hidden />
<input name="vault_id" value=@ViewBag.vault_id hidden />
</div>
<div class="form-group required">
<label class="control-label">name</label>
<input name="name" type="text" class="form-control" oninput="validateForm()">
<div id="nameError" class="text-danger"></div>
</div>
<div class="form-group required">
<label class="control-label">desc</label>
<input name="desc" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">format_exp</label>
<input name="format_exp" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">Enabled</label>
<input name="enabled" type="checkbox" class="form-check-input" checked>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary" id="createFieldBtn" disabled>送出</button>
<button type="button" class="btn btn-light" data-dismiss="modal">取消</button>
</div>
</form>
</div>
</div>
</div>
...
...
@@ -96,14 +184,42 @@
}
//user按鈕
$(document).on('click', '.usersBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
//user按鈕
$(document).on('click', '.usersBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
window.location.href = '/tokenvault/ListUsers/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
//mask按鈕
$(document).on('click', '.masksBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
window.location.href = '/tokenvault/ListMasks/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
////Modal按鈕
//$("#createFieldBtn").on("click", function () {
// // 確認按鈕被點擊時的處理程式碼
// // 在這裡呼叫您的 API
// $('form').submit(function (e) {
// e.preventDefault(); // 防止表單自動提交
// $.post('/TokenVault/CreateField', $('form').serialize()).done(function (data) {
// console.log(data);
window.location.href = '/tokenvault/ListUsers/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
// })
// });
//});
})
...
...
Merchant Token Vault Management/backstage/Views/TokenVault/ListMasks.cshtml
0 → 100644
View file @
a8162890
@model List<backstage.Models.TokenVault.Mask>
@{
ViewData["Title"] = "Mask列表管理";
}
<div class="page-header">
<h3 class="page-title">Mask列表管理</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
<input id="isSuccess" hidden value="@TempData["isSuccess"].ToString()" />
}
<div id="msgDiv"></div>
</div>
<div class="row">
<div class="col-lg-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<div class="row">
@*路徑列*@
<div class="col-md-12">
<ul class="breadcrumb breadcrumb_memberGo">
<li class="breadcrumb-item active"><a asp-action="List" asp-route-merchantId="@ViewBag.Merchant_id">資料代碼保險庫</a></li>
<li class="breadcrumb-item active"><a asp-action="ListFields" asp-route-merchant_id="@ViewBag.Merchant_id" asp-route-vault_id="@ViewBag.vault_id">欄位資料</a></li>
<li class="breadcrumb-item ">資料遮罩</li>
</ul>
</div>
</div>
<table class="table table-striped table-hover0 table-bordered0" id="memberGoTbl_dataDetail">
<!-- <thead>
<tr>
<th colspan="9" >欄位資料列表</th>
</tr>
</thead> -->
<tbody>
<tr>
<th>保險庫</th>
<td class="item">ID</td>
<td class="content">@ViewBag.vault_id</td>
<td class="item">名稱</td>
<td class="content">@ViewBag.VaultName</td>
</tr>
<tr>
<th>欄位</th>
<td class="item">ID</td>
<td class="content">@ViewBag.field_id</td>
<td class="item">名稱</td>
<td class="content">@ViewBag.FieldName</td>
</tr>
</tbody>
</table>
<div style="float: right;">
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">Create</a>
</div>
<div class="table-responsive">
<table class="table table-striped table-hover0 table-bordered" id="memberGoTbl_masksList">
<thead>
<tr>
<th colspan="9">資料遮罩列表</th>
</tr>
</thead>
<tbody>
<tr>
<th style=" border-left: solid 1px #d9d9d9;">ID</th>
<th>種類</th>
<th>唯一值</th>
<th style=" border-right: solid 1px #d9d9d9;">設定</th>
</tr>
@if (Model.Count > 0)
{
@foreach (var m in Model)
{
<tr>
<td class="item">@m.id</td>
<td class="content">@m.type</td>
<td class="item">@m.is_unique</td>
<td class="content">@m.setting</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- MODAL -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form class="forms-sample" method="post" asp-action="CreateField" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
<h4 class="modal-title">基本資料</h4>
<div class="modal-body">
<div class="form-group">
<input name="merchant_id" value=@ViewBag.Merchant_id hidden />
<input name="vault_id" value=@ViewBag.vault_id hidden />
</div>
<div class="form-group required">
<label class="control-label">種類</label>
<input name="type" type="text" class="form-control" oninput="validateForm()">
<div id="typeError" class="text-danger"></div>
</div>
<div class="form-group required">
<label class="control-label">唯一直</label>
<input name="is_unique" type="text" class="form-control">
</div>
<div class="form-group required">
<label class="control-label">設定</label>
<input name="setting" type="checkbox" class="form-check-input" checked>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary" id="createFieldBtn" disabled>送出</button>
<button type="button" class="btn btn-light" data-dismiss="modal">取消</button>
</div>
</form>
</div>
</div>
</div>
@section Scripts{
<script nonce="KUY8VewuvyUYVEIvEFue4vwyiuf">
$('document').ready(function () {
var msg = '@TempData["msg"]';
var IsSuccess = '@TempData["IsSuccess"]';
console.log(IsSuccess + msg);
if (msg != '') {
showAlert(IsSuccess, msg);
}
//user按鈕
$(document).on('click', '.usersBtn', function () {
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt($(this).closest('tr').attr('id'));
window.location.href = '/tokenvault/ListUsers/' + "?vault_id=" + vault_id + "&Merchant_id=" + merchant_id+"&field_id="+field_id;
});
})
</script>
}
\ No newline at end of file
Merchant Token Vault Management/backstage/Views/TokenVault/ListUsers.cshtml
View file @
a8162890
...
...
@@ -31,7 +31,7 @@
<div>
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">
加入使用者
</a>
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">
Add User
</a>
<div class="rank-table">
<div class="table-responsive">
<table class="table table-striped expense-color">
...
...
@@ -54,21 +54,32 @@
{
@foreach (var i in Model)
{
<tr id="@i.id" class="expense-color">
<td>@i.id</td>
<td>@i.name</td>
<td>@i.username</td>
<td>@i.masksText</td>
<td>@i.allow_decrypt</td>
<td>@i.allow_new</td>
<td>@i.allow_update</td>
<td>@i.allow_del</td>
<td>@i.default_mask_id</td>
<td>
<a href="tokenVault_fields_users.html" class="btn btnPermission btn-sm">移除使用者</a>
</td>
</tr>
<tr id="@i.id" class="expense-color">
<td>@i.id</td>
<td>@i.name</td>
<td>@i.username</td>
<td>@i.masksText</td>
<td>
@if (i.allow_decrypt == 1)
{<span>✔</span>}
</td>
<td>
@if (i.allow_new == 1)
{<span>✔</span>}
</td>
<td>
@if (i.allow_update == 1)
{<span>✔</span>}
</td>
<td>@if (i.allow_del == 1)
{<span>✔</span>}</td>
<td>@i.default_mask_id</td>
<td>
<a href="tokenVault_fields_users.html" class="btn btnPermission btn-sm">移除使用者</a>
</td>
</tr>
}
}
...
...
@@ -87,7 +98,7 @@
</div>
</div>
<!--
模态框
-->
<!--
MODAL
-->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
...
...
@@ -98,13 +109,13 @@
</button>
</div>
<div class="modal-body">
<select class="form-control" asp-items="ViewBag.users">
<select
id="selectUser"
class="form-control" asp-items="ViewBag.users">
<!-- 其他用户选项 -->
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">確認</button>
<button type="button" class="btn btn-primary"
id="confirmBtn"
data-dismiss="modal">確認</button>
</div>
</div>
</div>
...
...
@@ -122,13 +133,33 @@
}
$("#confirmBtn").on("click", function () {
// 確認按鈕被點擊時的處理程式碼
// 在這裡呼叫您的 API
var merchant_id = parseInt('@ViewBag.Merchant_id');
var vault_id = parseInt('@ViewBag.vault_id');
var field_id = parseInt('@ViewBag.field_id');
var selectedUser = parseInt($("#selectUser").val()); // 替換為您實際使用的選取元素的 ID
$.ajax({
url: "/TokenVault/Addusers",
method: "POST",
contentType: "application/json",
data: JSON.stringify({ Merchant_id: merchant_id, vault_id: vault_id, field_id: field_id, user_id: selectedUser}),
success: function (response) {
// API 呼叫成功的處理程式碼
},
error: function (xhr, status, error) {
// API 呼叫失敗的處理程式碼
}
});
});
})
})
</script>
}
\ No newline at end of file
Merchant Token Vault Management/backstage/Views/User/GetDepartment.cshtml
View file @
a8162890
...
...
@@ -20,7 +20,7 @@
<div class="card">
<div class="card-body">
<h4 class="card-title">編輯部門</h4>
<a type="button" class="btn btn-info float-right mb-2" data-toggle="modal" data-target="#myModal">加入使用者</a>
<div>
<form class="forms-sample" method="post" asp-action="CreateDepartment" autocomplete="off">
<div id="errorMsg" asp-validation-summary="All" class="text-danger"></div>
...
...
Merchant Token Vault Management/backstage/Views/User/ListDepartments.cshtml
View file @
a8162890
@model backstage.Models.Users.DepartmentsResponse
<div class="page-header">
<h3 class="page-title">
部門列表管理
</h3>
<h3 class="page-title">
Department List
</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
...
...
@@ -13,11 +13,11 @@
<div class="col-lg-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateDepartment">
新增部門
</a>
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateDepartment">
Create
</a>
@*列表*@
<div class="">
<table class="table table-striped">
<table class="table table-striped
">
<thead>
<tr>
<th>merchant_id</th>
...
...
Merchant Token Vault Management/backstage/Views/User/ListUsers.cshtml
View file @
a8162890
@model backstage.Models.Users.UserResponse
<div class="page-header">
<h3 class="page-title">
使用者列表管理
</h3>
<h3 class="page-title">
User List
</h3>
<input id="msg" hidden value="@TempData["msg"]" />
@if (TempData["isSuccess"] != null)
{
...
...
@@ -14,8 +14,8 @@
<div class="col-lg-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<div id="adminStatus" style="float: left;">User
數量:@ViewBag.userCount / Admin 數量
:@ViewBag.adminCount </div>
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateUser">
新增使用者
</a>
<div id="adminStatus" style="float: left;">User
count:@ViewBag.userCount / Admin count
:@ViewBag.adminCount </div>
<a type="button" class="btn btn-info float-right mb-2" asp-action="CreateUser">
Create
</a>
@*列表*@
<div class="">
...
...
@@ -30,7 +30,7 @@
@*<th>locked</th>*@
<th>creation_date</th>
<th>enabled</th>
<th>
管理員
</th>
<th>
Admin
</th>
@*<th>birthdate</th>
<th>marital_status</th>
<th>gender</th>
...
...
@@ -53,7 +53,7 @@
<td>@i.name</td>
@*<td>@i.name_en</td>*@
<td>@i.username</td>
@if (i.email
!=
null)
@if (i.email
!=
null)
@if (i.email.Count > 0)
{
<td>@i.email[0].email</td>
...
...
@@ -65,7 +65,8 @@
@*<td>@i.locked</td>*@
<td>@i.created_date</td>
<td>@i.enabled</td>
<td> <input type="checkbox" class="toggleButton" @(i.enabled==1 ? "checked" : "") disabled></td>
<td> <input type="checkbox" class="toggleButton" @(i.isAdmin ? "checked" : "")></td>
@*@if (i.isAdmin)
{ <td>是</td>}
...
...
Merchant Token Vault Management/backstage/Views/User/Login.cshtml
View file @
a8162890
...
...
@@ -42,9 +42,9 @@
<div
class=
"col-lg-4 mx-auto"
>
<div
class=
"auth-form-light text-left p-5"
>
<div
class=
"brand-logo"
>
@*
<img
src=
"~/images/logo.svg"
>
*@
<img
src=
"~/images/LOGO_nsecured.svg"
>
</div>
<h4
class=
"text-center"
>
Token
Vault管理後台
</h4>
<h4
class=
"text-center"
>
Token
ization Manager
</h4>
<input
id=
"msg"
hidden
value=
"@TempData["
msg
"]"
/>
@if (TempData["isSuccess"] != null)
{
...
...
@@ -56,16 +56,16 @@
<div
id=
"errorMsg"
asp-validation-summary=
"All"
class=
"text-danger"
></div>
<div
class=
"form-group"
>
<input
class=
"form-control form-control-lg"
asp-for=
"username"
placeholder=
"
帳號
"
/>
<input
class=
"form-control form-control-lg"
asp-for=
"username"
placeholder=
"
username
"
/>
<span
asp-validation-for=
"username"
class=
"text-danger"
></span>
</div>
<div
class=
"form-group"
>
<input
class=
"form-control form-control-lg"
type=
"password"
asp-for=
"pwd"
placeholder=
"
密碼
"
/>
<input
class=
"form-control form-control-lg"
type=
"password"
asp-for=
"pwd"
placeholder=
"
password
"
/>
<span
asp-validation-for=
"pwd"
class=
"text-danger"
></span>
</div>
<div
class=
"mt-3"
>
<button
type=
"submit"
class=
"btn btn-block btn-gradient-primary btn-lg font-weight-medium"
>
登入
</button>
<button
type=
"submit"
class=
"btn btn-block btn-gradient-primary btn-lg font-weight-medium"
>
Login
</button>
</div>
@*
<div
class=
"my-2 d-flex justify-content-between align-items-center"
>
<div
class=
"form-check"
>
...
...
@@ -79,7 +79,7 @@
<button
type=
"button"
class=
"btn btn-block btn-facebook"
>
<i
class=
"mdi mdi-facebook mr-2"
></i>
使用facebook登入
</button>
</div>
*@
<div
class=
"text-center mt-4 font-weight-light"
>
沒有帳號?
<a
asp-action=
"Register"
class=
"text-primary"
>
建立
</a></div>
@*
<div
class=
"text-center mt-4 font-weight-light"
>
沒有帳號?
<a
asp-action=
"Register"
class=
"text-primary"
>
建立
</a></div>
*@
</form>
</div>
...
...
Merchant Token Vault Management/backstage/wwwroot/css/style.css
View file @
a8162890
...
...
@@ -19265,3 +19265,11 @@ tbody {
overflow
:
hidden
;
}
.languageIcon
img
{
width
:
26px
!important
;
height
:
26px
!important
;
}
.departmentRow
{
cursor
:
pointer
;
}
\ No newline at end of file
Merchant Token Vault Management/backstage/wwwroot/css/tokenizationPlatform.css
0 → 100644
View file @
a8162890
This diff is collapsed.
Click to expand it.
Merchant Token Vault Management/backstage/wwwroot/images/LOGO_nsecured.svg
0 → 100644
View file @
a8162890
<svg
width=
"132"
height=
"56"
xmlns=
"http://www.w3.org/2000/svg"
>
<g
fill=
"none"
fill-rule=
"evenodd"
>
<path
fill=
"#35A9E1"
d=
"m15.34 30.66.66-3.403L8.924 20H5.105L2 37h3.833l2.473-13.57z"
/>
<path
fill=
"#35A9E1"
d=
"M22 20h-3.56l-2.306 13.57-6.558-7.203L9 29.796 15.545 37h3.573zM25.57 32.64c.11.36.32.679.605.916.295.253.643.431 1.017.519.419.118.851.175 1.286.173.336-.003.672-.03 1.004-.08.36-.05.711-.152 1.042-.306.335-.142.638-.355.888-.625.26-.276.43-.63.489-1.01a1.36 1.36 0 0 0-.232-1.076 2.566 2.566 0 0 0-.952-.678 8.09 8.09 0 0 0-1.415-.478c-.54-.133-1.081-.293-1.622-.452-.55-.154-1.09-.34-1.62-.558a4.454 4.454 0 0 1-1.352-.864 3.068 3.068 0 0 1-.849-1.33 3.836 3.836 0 0 1-.077-1.9c.126-.78.43-1.519.888-2.153a6.149 6.149 0 0 1 1.595-1.528 7.016 7.016 0 0 1 2.059-.917A8.146 8.146 0 0 1 30.485 20a9.358 9.358 0 0 1 2.33.28c.673.172 1.304.49 1.852.93.515.42.902.982 1.12 1.621a4.9 4.9 0 0 1 .115 2.406h-3.345a2.723 2.723 0 0 0-.09-1.17 1.619 1.619 0 0 0-.54-.757 2.5 2.5 0 0 0-.901-.386 6.21 6.21 0 0 0-1.158-.186 3.73 3.73 0 0 0-.85.093c-.286.052-.562.16-.81.319a2.46 2.46 0 0 0-.67.558 1.853 1.853 0 0 0-.36.877 1.478 1.478 0 0 0 0 .771c.14.243.352.435.605.545.435.211.887.38 1.351.505l2.278.638c.396.084.786.19 1.17.32.51.173.989.434 1.416.77.473.364.854.844 1.106 1.395.295.723.354 1.526.168 2.286a5.42 5.42 0 0 1-.772 2.074 5.698 5.698 0 0 1-1.519 1.648 7.1 7.1 0 0 1-2.238 1.076 9.837 9.837 0 0 1-2.895.386 9.353 9.353 0 0 1-2.47-.32 5.28 5.28 0 0 1-1.982-1.036 4.107 4.107 0 0 1-1.184-1.807 5.203 5.203 0 0 1-.09-2.592h3.358c-.083.465-.052.945.09 1.395M52 20l-.531 2.957h-8.575l-.61 3.427h7.87l-.49 2.735h-7.872l-.69 3.924h8.748L49.319 36H37l2.814-16zM63.225 24.68a3.038 3.038 0 0 0-.645-.893 2.873 2.873 0 0 0-.995-.613 3.376 3.376 0 0 0-1.237-.214 4.8 4.8 0 0 0-2.152.467 5.101 5.101 0 0 0-1.613 1.253 7.123 7.123 0 0 0-1.09 1.8 9.996 9.996 0 0 0-.605 2.08c-.12.658-.16 1.33-.12 2 .014.6.146 1.194.39 1.745.258.514.66.944 1.156 1.24.609.332 1.296.494 1.99.467a4.058 4.058 0 0 0 2.77-1 5.842 5.842 0 0 0 1.613-2.666h3.497a9.5 9.5 0 0 1-1.197 2.76 8.957 8.957 0 0 1-1.896 2.106 8.369 8.369 0 0 1-2.447 1.333c-.927.308-1.9.462-2.878.453a7.835 7.835 0 0 1-3.281-.64 5.692 5.692 0 0 1-2.219-1.8 6.495 6.495 0 0 1-1.116-2.666 9.241 9.241 0 0 1 0-3.32c.253-1.2.698-2.352 1.318-3.412a10.45 10.45 0 0 1 2.07-2.666 9.092 9.092 0 0 1 2.878-1.827 8.94 8.94 0 0 1 3.51-.666 7.886 7.886 0 0 1 2.501.386 5.487 5.487 0 0 1 1.963 1.134c.56.505.988 1.135 1.25 1.84.3.8.414 1.655.337 2.506H63.48c.008-.41-.08-.816-.256-1.187M79.385 35.344a8.793 8.793 0 0 1-5.383 1.63 6.447 6.447 0 0 1-4.884-1.617c-1.036-1.086-1.346-2.715-.955-5.024L69.966 20h3.62l-1.804 10.333a7.417 7.417 0 0 0-.12 1.358c-.008.403.09.801.282 1.154.207.357.516.641.888.815.538.234 1.123.34 1.709.312a3.902 3.902 0 0 0 2.825-.869 4.933 4.933 0 0 0 1.211-2.715l1.803-10.334H84l-1.803 10.334a7.66 7.66 0 0 1-2.812 4.956M92.252 27.235a3.18 3.18 0 0 0 1.984-.536c.546-.445.887-1.08.95-1.766a1.815 1.815 0 0 0-.312-1.701 2.487 2.487 0 0 0-1.794-.523h-4.076l-.813 4.5 4.061.026zm2.634-7.234a5.204 5.204 0 0 1 1.944.34c.523.213.99.54 1.359.955.342.41.59.888.718 1.4a4.006 4.006 0 0 1 0 1.713 5.3 5.3 0 0 1-1.058 2.447 4.903 4.903 0 0 1-2.296 1.57c.38.102.731.29 1.02.549.245.252.435.55.556.876.126.359.194.734.204 1.112a9.09 9.09 0 0 1 0 1.217c0 .249 0 .55-.124.89-.12.34-.08.693-.107 1.06-.027.34-.027.68 0 1.02.019.282.098.558.23.81h-3.68a5.671 5.671 0 0 1 0-1.818c.081-.693.135-1.373.161-2.014a2.649 2.649 0 0 0-.447-1.832 2.414 2.414 0 0 0-1.876-.588h-3.693L86.6 36H83l2.922-16h8.964zM115 20l-.519 2.957h-8.575l-.61 3.427h7.858l-.464 2.735h-7.886l-.702 3.924h8.748L112.317 36H100l2.866-16zM121.2 33.04a4.84 4.84 0 0 0 1.575-.3 4.04 4.04 0 0 0 1.442-.809 5.62 5.62 0 0 0 1.205-1.473 7.12 7.12 0 0 0 .728-2.243c.14-.717.195-1.449.159-2.178a3.577 3.577 0 0 0-.49-1.655 2.64 2.64 0 0 0-1.243-1.07 5.355 5.355 0 0 0-2.144-.365h-2.542L118.09 33l3.11.04zM123.847 20c.964-.01 1.92.158 2.82.496.813.3 1.53.808 2.077 1.473.562.719.939 1.56 1.1 2.452.208 1.147.208 2.32 0 3.468a12.309 12.309 0 0 1-1.033 3.208 8.839 8.839 0 0 1-1.827 2.607 8.282 8.282 0 0 1-2.647 1.682 8.703 8.703 0 0 1-3.335.613H114L116.86 20h6.987z"
/>
<path
d=
"M0 0h132v56H0z"
/>
</g>
</svg>
Merchant Token Vault Management/backstage/wwwroot/images/icon-lan-cn-80.jpg
0 → 100644
View file @
a8162890
572 KB
Merchant Token Vault Management/backstage/wwwroot/images/icon-lan-en-80.jpg
0 → 100644
View file @
a8162890
572 KB
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment