using System; using System.Collections.Generic; using System.Net.Http; using System.Security.Claims; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using NLog; using backstage.Helpers; using backstage.Models; using backstage.Models.Users; using Newtonsoft.Json.Linq; using System.Linq; using backstage.Models.TokenVault; using Microsoft.AspNetCore.Routing; using System.Text.Json; using System.Dynamic; using TokenVault_management.Models; namespace backstage.Controllers { public class TokenVaultController : Controller { private readonly IHttpContextAccessor _httpContextAccessor; private readonly IConfiguration _config; private readonly ICallApi _callApi; private static Logger logger = LogManager.GetCurrentClassLogger(); /// <summary> /// 讀取組態用 /// </summary> public TokenVaultController(IConfiguration config, ICallApi callApi, IHttpContextAccessor httpContextAccessor) { _config = config; _callApi = callApi; _httpContextAccessor = httpContextAccessor; } [HttpGet] public async Task<IActionResult> List(int merchantId) { var TokenVaultResponse = new TokenVaultResponse(); // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } ViewBag.Merchant_id = merchantId; #region 取得部門列表 var DepartmentsResponse = new DepartmentsResponse(); var url = _config["IP"] + "/merchant/list"; var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var parameters = new Dictionary<string, string> { { "token", token } }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString()); if (DepartmentsResponse.r == 0) { ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants select new SelectListItem { Value = o.merchant_id.ToString(), Text = o.merchant_id + "_" + o.name }).ToList(); } } #endregion return View(); } [HttpGet] public async Task<IActionResult> ListFields([FromQuery] int Merchant_id, int vault_id) { var TokenVaultResponse = new TokenVaultResponse(); // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } ViewBag.Merchant_id = Merchant_id; ViewBag.vault_id = vault_id; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var httpMethod = HttpMethod.Post; var url = _config["IP"] + "/v2/vault/get"; var parameters = new Dictionary<string, string> { { "Merchant_id",Merchant_id.ToString()}, { "id",vault_id.ToString()}, { "info","INFO"} }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { TokenVaultResponse = JsonConvert.DeserializeObject<TokenVaultResponse>(apiResult.Data.ToString()); if (TokenVaultResponse.r == 0) { if (TokenVaultResponse.info.Count > 0) { ViewBag.VaultInfo = TokenVaultResponse.info[0]; } else { RedirectToAction("List"); } } } url = _config["IP"] + "/v2/vault/get"; httpMethod = HttpMethod.Post; parameters = new Dictionary<string, string> { { "Merchant_id", Merchant_id.ToString() }, { "id", vault_id.ToString() }, { "info", "FIELDS" } }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString()); if (FieldsResponse.r == 0) { return View(FieldsResponse); } } return View(); } [HttpGet] public async Task<IActionResult> ListUsers(int Merchant_id, int vault_id, int field_id) { var TokenVaultResponse = new TokenVaultResponse(); // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } ViewBag.Merchant_id = Merchant_id; ViewBag.vault_id = vault_id; ViewBag.field_id = field_id; var DepartmentsResponse = new DepartmentsResponse(); var url = _config["IP"] + "/v2/vault/get"; var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var parameters = new Dictionary<string, string> { { "Merchant_id", Merchant_id.ToString() }, { "id", vault_id.ToString() }, { "info", "USERS" } }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString()); if (FieldsResponse.r == 0) { //處理遮罩 var field = FieldsResponse.fields.Where(f => f.id == field_id).FirstOrDefault(); foreach (var u in field.users) { u.masksText = "[" + string.Join(", ", u.masks) + "]"; } #region 處理使用者選單 url = _config["IP"] + "/user/list"; httpMethod = HttpMethod.Post; var types = new[] { "all" }; var types_data = new { inc = types }; parameters = new Dictionary<string, string> { { "token", token }, { "types", JsonConvert.SerializeObject(types_data)}, { "email","1"}, { "phone","1"} //{ "types", "{\"inc\":[\"all\"]}"} }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var UserResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString()); var newUsers = new List<User>(); foreach (var u in UserResponse.Users) { var existUser = field.users.Where(uu => uu.uid == u.uid).Any(); if (!existUser) newUsers.Add(u); } ViewBag.users = (from o in newUsers select new SelectListItem { Value = o.uid.ToString(), Text = o.uid + "_" + o.name + ", " + o.username }).ToList(); } #endregion return View(field.users); } } return View(); } [Authorize(Policy = "AdminOnly")] [HttpPost] public async Task<IActionResult> AddUsers([FromBody] JsonElement requestData) { int Merchant_id = requestData.GetProperty("Merchant_id").GetInt32(); int vault_id = requestData.GetProperty("vault_id").GetInt32(); int field_id = requestData.GetProperty("field_id").GetInt32(); int user_id = requestData.GetProperty("user_id").GetInt32(); // 構建包含參數的查詢字串 var queryString = new RouteValueDictionary { { "Merchant_id", Merchant_id }, { "vault_id", vault_id }, { "field_id", field_id }, }; // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); //檢查user_id是否存在 var url = _config["IP"] + "/user/list"; var httpMethod = HttpMethod.Post; var types = new[] { "all" }; var types_data = new { inc = types }; var parameters = new Dictionary<string, string> { { "token", token }, { "types", JsonConvert.SerializeObject(types_data)}, { "email","1"}, { "phone","1"} }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var UserResponse = JsonConvert.DeserializeObject<UserResponse>(apiResult.Data.ToString()); if (UserResponse.userCount > 0) { var existUser = UserResponse.Users.Where(u => u.uid == user_id).FirstOrDefault(); if (existUser == null) { TempData["IsSuccess"] = false; TempData["msg"] = "user_id不存在"; return RedirectToAction("ListUsers", queryString); } } else { TempData["IsSuccess"] = false; TempData["msg"] = "user_id不存在"; return RedirectToAction("ListUsers", queryString); } } else { TempData["IsSuccess"] = false; TempData["msg"] = "檢查field_id失敗"; return RedirectToAction("ListUsers", queryString); } //檢查merchant_id是否存在 url = _config["IP"] + "/merchant/list"; httpMethod = HttpMethod.Post; parameters = new Dictionary<string, string> { { "token", token }, }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString()); if (DepartmentsResponse.count > 0) { var existDepartment = DepartmentsResponse.merchants.Where(m => m.merchant_id == Merchant_id).FirstOrDefault(); if (existDepartment == null) { TempData["IsSuccess"] = false; TempData["msg"] = "merchant_id不存在"; return RedirectToAction("ListUsers", queryString); } } else { TempData["IsSuccess"] = false; TempData["msg"] = "merchant_id不存在"; return RedirectToAction("ListUsers", queryString); } } else { TempData["IsSuccess"] = false; TempData["msg"] = "檢查merchant_id失敗"; return RedirectToAction("ListUsers"); } //檢查field_id是否存在 url = _config["IP"] + "/v2/vault/get"; httpMethod = HttpMethod.Post; parameters = new Dictionary<string, string> { { "Merchant_id", Merchant_id.ToString() }, { "id", vault_id.ToString() }, { "info", "FIELDS" }, }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString()); if (FieldsResponse.fields.Count > 0) { var existField = FieldsResponse.fields.Where(m => m.id == field_id).FirstOrDefault(); if (existField == null) { TempData["IsSuccess"] = false; TempData["msg"] = "field_id不存在"; } } else { TempData["IsSuccess"] = false; TempData["msg"] = "field_id不存在"; } } else { TempData["IsSuccess"] = false; TempData["msg"] = "檢查field_id失敗"; return RedirectToAction("ListUsers", queryString); } //加入部門 url = _config["IP"] + "/merchant/adduser"; httpMethod = HttpMethod.Post; var data = new[] { new { userId = user_id.ToString(), merchantId = Merchant_id.ToString() } }; parameters = new Dictionary<string, string> { { "token", token}, { "data", JsonConvert.SerializeObject(data)} //{ "data", """userId"":""1"",""merchantId"":""1""") }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (!apiResult.IsSuccess) { var departmentResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString()); if (departmentResponse.r != 0) { TempData["IsSuccess"] = false; TempData["msg"] = "加入部門失敗"; return RedirectToAction("ListUsers", queryString); } } //加入vault var TokenVaultResponse = new TokenVaultResponse(); url = _config["IP"] + "/merchant/vault/access"; httpMethod = HttpMethod.Post; parameters = new Dictionary<string, string> { { "token", token}, { "vault_id", vault_id.ToString()}, { "access_code", "31"}, { "merchant_id", Merchant_id.ToString()}, { "user_id", user_id.ToString()}, }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (!apiResult.IsSuccess) { TempData["IsSuccess"] = false; TempData["msg"] = "加入vault失敗"; return RedirectToAction("ListUsers", queryString); } //加入欄位 var FieldsResponse2 = new FieldsResponse(); url = _config["IP"] + "/v2/vault"; httpMethod = HttpMethod.Post; var addUserToField_data = new { action = "ADD", id = user_id, field_id = field_id, allow_decrypt = 1, allow_new = 1, allow_update = 1, allow_del = 1, default_mask_id = 1 }; parameters = new Dictionary<string, string> { { "id", vault_id.ToString()}, { "info", "USERS"}, { "Merchant_id", Merchant_id.ToString()}, { "data", JsonConvert.SerializeObject(addUserToField_data)}, }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { FieldsResponse2 = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString()); if (FieldsResponse2.r != 0) { TempData["IsSuccess"] = false; TempData["msg"] = "加入Fields失敗"; return RedirectToAction("ListUsers", queryString); } else { TempData["IsSuccess"] = true; TempData["msg"] = "加入Fields成功"; return RedirectToAction("ListFields", queryString); } } else { TempData["IsSuccess"] = false; TempData["msg"] = "加入Fields失敗"; return RedirectToAction("ListUsers", queryString); } } [HttpGet] public async Task<IActionResult> ListMasks(int Merchant_id, int vault_id, int field_id) { // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } ViewBag.Merchant_id = Merchant_id; ViewBag.vault_id = vault_id; ViewBag.field_id = field_id; // 構建包含參數的查詢字串 var queryString = new RouteValueDictionary { { "Merchant_id", Merchant_id }, { "vault_id", vault_id }, { "field_id", field_id }, }; #region list mask var url = _config["IP"] + "/v2/vault/get"; var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var parameters = new Dictionary<string, string> { { "Merchant_id", Merchant_id.ToString() }, { "id", vault_id.ToString() }, { "info", "INFO" } }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var TokenVaultResponse = JsonConvert.DeserializeObject<TokenVaultResponse>(apiResult.Data.ToString()); if (TokenVaultResponse.r == 0) { if (TokenVaultResponse.info.Count > 0) { ViewBag.VaultName = TokenVaultResponse.info[0].name; } } } parameters = new Dictionary<string, string> { { "Merchant_id", Merchant_id.ToString() }, { "id", vault_id.ToString() }, { "info", "MASKS" } }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString()); if (FieldsResponse.r == 0) { if (FieldsResponse.fields.Count > 0) { var existField = FieldsResponse.fields.Where(f => f.id == field_id).FirstOrDefault(); if (existField != null) { ViewBag.FieldName = existField.name; return View(existField.masks); } } } } #endregion return RedirectToAction("ListFields", queryString); } //新增欄位 [Authorize(Policy = "AdminOnly")] [HttpPost] public async Task<IActionResult> CreateField(FieldForCreate FieldForCreate) { // 構建包含參數的查詢字串 var queryString = new RouteValueDictionary { { "Merchant_id", FieldForCreate.merchant_id }, { "vault_id", FieldForCreate.vault_id } }; try { var url = _config["IP"] + "/v2/vault"; // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } if (string.IsNullOrEmpty(FieldForCreate.name)) { TempData["IsSuccess"] = false; TempData["msg"] = "名稱不能為空"; return RedirectToAction("ListFields", queryString); } var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); //if (enabled == "on") // enabled = "true"; //else // enabled = "false"; var fieldData = new[] { new { action = "ADD", name = FieldForCreate.name, desc = FieldForCreate.name, format_exp = FieldForCreate.format_exp, enabled = true } }; var parameters = new Dictionary<string, string> { { "Merchant_id", FieldForCreate.merchant_id.ToString() }, { "info","FIELDS"}, { "id", FieldForCreate.vault_id.ToString() }, { "data",JsonConvert.SerializeObject(fieldData)} }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString()); if (FieldsResponse.r == 0) { if (FieldsResponse.failInfo == null) { TempData["IsSuccess"] = true; TempData["msg"] = "Create success"; return RedirectToAction("ListFields", queryString); } TempData["IsSuccess"] = false; TempData["msg"] = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", FieldsResponse.failInfo)); return RedirectToAction("ListFields", queryString); } else { TempData["IsSuccess"] = false; TempData["msg"] = apiResult.Message; return RedirectToAction("ListFields", queryString); } } } catch (Exception e) { TempData["IsSuccess"] = false; TempData["msg"] = e.Message + e.InnerException?.Message; return RedirectToAction("ListFields", queryString); } TempData["IsSuccess"] = false; TempData["msg"] = "Create fail."; return RedirectToAction("ListFields", queryString); } //新增MASK ajax [Authorize(Policy = "AdminOnly")] [HttpPost] public async Task<ResultModel> CreateMask(IFormCollection form) { var result = new ResultModel(); try { var url = _config["IP"] + "/v2/vault"; if (string.IsNullOrEmpty(form["name"])) { result.IsSuccess = false; result.Message = "名稱不能為空"; return result; } var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var setting = new { mask = Convert.ToInt32(form["mask"]), size_init = Convert.ToInt32(form["size_init"]), size_end = Convert.ToInt32(form["size_end"]) }; var fieldData = new[] { new { action = "ADD", field_id=Convert.ToInt32(form["field_id"]), name=form["name"].ToString(), type = Convert.ToInt32(form["type"]), setting = System.Text.Json.JsonSerializer.Serialize(setting) } }; string namstext = form["name"]; var parameters = new Dictionary<string, string> { { "Merchant_id",form["merchant_id"] }, { "info","MASKS"}, { "id", form["vault_id"]}, { "data",JsonConvert.SerializeObject(fieldData)} }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString()); if (Response.r == 0) { if (Response.failInfo == null) { result.IsSuccess = true; result.Message = "Create success"; return result; } result.IsSuccess = false; result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo)); return result; } else { result.IsSuccess = false; result.Message = Response.m.ToString(); return result; } } } catch (Exception e) { result.IsSuccess = false; result.Message = e.Message + e.InnerException?.Message; return result; } result.IsSuccess = false; result.Message = "Create fail."; return result; //return View(); } //刪除MASK ajax [Authorize(Policy = "AdminOnly")] [HttpPost] public async Task<ResultModel> DeleteMask(IFormCollection form) { var result = new ResultModel(); try { var url = _config["IP"] + "/v2/vault"; if (string.IsNullOrEmpty(form["name"])) { result.IsSuccess = false; result.Message = "名稱不能為空"; return result; } var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var setting = new { mask = Convert.ToInt32(form["mask"]), size_init = Convert.ToInt32(form["size_init"]), size_end = Convert.ToInt32(form["size_end"]) }; var fieldData = new[] { new { action = "MOD", id=Convert.ToInt32(form["mask_id"]), name=form["name"].ToString(), type = Convert.ToInt32(form["type"]), setting = System.Text.Json.JsonSerializer.Serialize(setting) } }; string namstext = form["name"]; var parameters = new Dictionary<string, string> { { "Merchant_id",form["merchant_id"] }, { "info","MASKS"}, { "id", form["vault_id"]}, { "data",JsonConvert.SerializeObject(fieldData)} }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString()); if (Response.r == 0) { if (Response.failInfo == null) { result.IsSuccess = true; result.Message = "Create success"; return result; } result.IsSuccess = false; result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo)); return result; } else { result.IsSuccess = false; result.Message = Response.m.ToString(); return result; } } } catch (Exception e) { result.IsSuccess = false; result.Message = e.Message + e.InnerException?.Message; return result; } result.IsSuccess = false; result.Message = "Create fail."; return result; } //編輯MASK ajax [Authorize(Policy = "AdminOnly")] [HttpPost] public async Task<ResultModel> EditMask(IFormCollection form) { var result = new ResultModel(); // var field_id = Convert.ToInt32(form["field_id"]); // #region list mask // var url = _config["IP"] + "/v2/vault/get"; // var httpMethod = HttpMethod.Post; // // 取得使用者的 "token" Claim 值 // string token = User.FindFirstValue("token"); //var parameters = new Dictionary<string, string> // { // { "Merchant_id", form["Merchant_id"].ToString() }, // { "id", form["vault_id"].ToString() }, // { "info", "MASKS" } // }; // var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); // if (apiResult.IsSuccess) // { // var FieldsResponse = JsonConvert.DeserializeObject<FieldsResponse>(apiResult.Data.ToString()); // if (FieldsResponse.r == 0) // { // if (FieldsResponse.fields.Count > 0) // { // var existField = FieldsResponse.fields.Where(f => f.id == field_id).FirstOrDefault(); // if (existField != null) // { // ViewBag.FieldName = existField.name; // return View(existField.masks); // } // } // } // } // #endregion // try // { // var url = _config["IP"] + "/v2/vault"; // if (string.IsNullOrEmpty(form["name"])) // { // result.IsSuccess = false; // result.Message = "名稱不能為空"; // return result; // } // var httpMethod = HttpMethod.Post; // // 取得使用者的 "token" Claim 值 // string token = User.FindFirstValue("token"); // var setting = new // { // mask = Convert.ToInt32(form["mask"]), // size_init = Convert.ToInt32(form["size_init"]), // size_end = Convert.ToInt32(form["size_end"]) // }; // var fieldData = new[] // { // new // { // action = "ADD", // field_id=Convert.ToInt32(form["field_id"]), // name=form["name"].ToString(), // type = Convert.ToInt32(form["type"]), // setting = System.Text.Json.JsonSerializer.Serialize(setting) // } // }; // string namstext = form["name"]; // var parameters = new Dictionary<string, string> // { // { "Merchant_id",form["merchant_id"] }, // { "info","MASKS"}, // { "id", form["vault_id"]}, // { "data",JsonConvert.SerializeObject(fieldData)} // }; // var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); // if (apiResult.IsSuccess) // { // var Response = JsonConvert.DeserializeObject<Response>(apiResult.Data.ToString()); // if (Response.r == 0) // { // if (Response.failInfo == null) // { // result.IsSuccess = true; // result.Message = "Create success"; // return result; // } // result.IsSuccess = false; // result.Message = System.Text.RegularExpressions.Regex.Unescape(string.Join(", ", Response.failInfo)); // return result; // } // else // { // result.IsSuccess = false; // result.Message = Response.m.ToString(); // return result; // } // } // } // catch (Exception e) // { // result.IsSuccess = false; // result.Message = e.Message + e.InnerException?.Message; // return result; // } // result.IsSuccess = false; // result.Message = "Create fail."; return result; } [HttpPost] public async Task<IActionResult> ListTokenVaultAjax(int merchantId) { // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var url = _config["IP"] + "/v2/vault/get"; var httpMethod = HttpMethod.Post; var parameters = new Dictionary<string, string> { { "Merchant_id", merchantId.ToString()} }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var TokenVaultResponse = JsonConvert.DeserializeObject<TokenVaultResponse>(apiResult.Data.ToString()); if (TokenVaultResponse.r == 0) { if (TokenVaultResponse.info.Count > 0) { var sortedData = TokenVaultResponse.info.OrderBy(a => a.vault_id); string enabletext = "關閉"; // 轉出html string outputHtml = ""; foreach (var vault in sortedData) { if (vault.enabled == 1) enabletext = "啟用"; string htmlCode = @$"<tr class=""expense-color""> <td><a asp-action=""Detail"" asp-route-Id=""{vault.vault_id}""> {vault.vault_id}</a></td> <td class=""tokenVaultRow"" data-merchantid=""{merchantId}"" data-vaultid=""{vault.vault_id}"" >{vault.name}</td> <td>{vault.desc}</td> <td>{vault.type}</td> <td>{vault.created}</td> <td>{enabletext}</td> <td> <button class=""btn btnPermission btn-sm"" data-toggle=""modal"" data-target=""#permission"">權限</button> <button class=""btn btnPermission btn-sm fieldsBtn"" data-Merchant_id=""{merchantId}"" data-vault_id=""{vault.vault_id}"" >欄位</button> </td> <td>{vault.tokenCount}</td> <td>{vault.userCount}</td> </tr>"; outputHtml += htmlCode; } return Content(outputHtml); } else { return Ok(); } } else { return Ok(); } } else { return Ok(); } } [Authorize(Policy = "AdminOnly")] [HttpGet] public async Task<IActionResult> CreateTokenVault() { #region 取得部門列表 var DepartmentsResponse = new DepartmentsResponse(); var url = _config["IP"] + "/merchant/list"; var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var parameters = new Dictionary<string, string> { { "token", token } }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString()); if (DepartmentsResponse.r == 0) { ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants select new SelectListItem { Value = o.merchant_id.ToString(), Text = o.merchant_id + "_" + o.name }).ToList(); } } #endregion return View(); } [Authorize(Policy = "AdminOnly")] [HttpGet("/TokenVault/Edit/{id}")] public async Task<IActionResult> Edit(int id, [FromQuery] int merchantid) { #region 取得部門列表 var DepartmentsResponse = new DepartmentsResponse(); var url = _config["IP"] + "/merchant/list"; var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var parameters = new Dictionary<string, string> { { "token", token } }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString()); if (DepartmentsResponse.r == 0) { ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants select new SelectListItem { Value = o.merchant_id.ToString(), Text = o.merchant_id + "_" + o.name }).ToList(); } } #endregion httpMethod = HttpMethod.Post; url = _config["IP"] + "/v2/vault/get"; parameters = new Dictionary<string, string> { { "Merchant_id",merchantid.ToString()}, { "id",id.ToString()}, { "info","INFO"} }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var TokenVaultResponse = JsonConvert.DeserializeObject<TokenVaultResponse>(apiResult.Data.ToString()); if (TokenVaultResponse.r == 0) { if (TokenVaultResponse.info.Count > 0) { return View(TokenVaultResponse.info[0]); } else { RedirectToAction("List"); } } } return View(); } [Authorize(Policy = "AdminOnly")] [HttpPost] public async Task<IActionResult> CreateTokenVault(TokenVaultForCreate tokenVault) { #region 取得部門列表 var DepartmentsResponse = new DepartmentsResponse(); var url = _config["IP"] + "/merchant/list"; var httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 string token = User.FindFirstValue("token"); var parameters = new Dictionary<string, string> { { "token", token } }; var apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString()); if (DepartmentsResponse.r == 0) { ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants select new SelectListItem { Value = o.merchant_id.ToString(), Text = o.merchant_id + "_" + o.name }).ToList(); } } #endregion // 確認使用者是否已經登入 if (!User.Identity.IsAuthenticated) { return RedirectToAction("Login", "User"); } if (string.IsNullOrEmpty(tokenVault.name)) { ModelState.AddModelError("name", "名稱不能為空"); } if (tokenVault.merchant_id == 0) { ModelState.AddModelError("merchant_id", "部門不能為空"); } if (!ModelState.IsValid) { return View(tokenVault); } url = _config["IP"] + "/tsp/merchant/vault/add"; parameters = new Dictionary<string, string> { { "token", token }, { "data",JsonConvert.SerializeObject(tokenVault)} }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { var userAddResponse = JsonConvert.DeserializeObject<UserAddResponse>(apiResult.Data.ToString()); if (userAddResponse.r == 0) { TempData["IsSuccess"] = true; TempData["msg"] = "新增Vault成功"; return RedirectToAction("List"); } else { TempData["IsSuccess"] = false; TempData["msg"] = JsonConvert.SerializeObject(userAddResponse.m); #region 取得部門列表 DepartmentsResponse = new DepartmentsResponse(); url = _config["IP"] + "/merchant/list"; httpMethod = HttpMethod.Post; // 取得使用者的 "token" Claim 值 parameters = new Dictionary<string, string> { { "token", token } }; apiResult = await _callApi.CallAPI(url, parameters, httpMethod); if (apiResult.IsSuccess) { DepartmentsResponse = JsonConvert.DeserializeObject<DepartmentsResponse>(apiResult.Data.ToString()); if (DepartmentsResponse.r == 0) { ViewBag.DepartmentsList = (from o in DepartmentsResponse.merchants select new SelectListItem { Value = o.merchant_id.ToString(), Text = o.merchant_id + "_" + o.name }).ToList(); } } #endregion return View(tokenVault); } } return View(); } } }