using Microsoft.AspNetCore.DataProtection.KeyManagement; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; namespace IES.ExamServer.Controllers { public class BaseController : ControllerBase { public BaseController() { } public string GetIP() { var IpPort = HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault(); if (string.IsNullOrEmpty(IpPort)) { IpPort = $"{HttpContext.Connection.RemoteIpAddress}"; } if (IpPort.Contains("::")) { IpPort = "127.0.0.1"; } return IpPort; } public string GetCookie(string key) { IRequestCookieCollection cookies = HttpContext.Request.Cookies; string value = ""; if (cookies != null) { foreach (var ck in cookies) { if (ck.Key.Equals(key)) { value = ck.Value; break; } } } return value; } /// /// 取得AuthToken權杖資訊 /// /// Key Name /// public (string id, string? name, string picture, string school,string scope ,string timeZone,List rolse, string keyData) GetAuthTokenInfo(string? key = null) { object? keyData = null; HttpContext.Items.TryGetValue("ID", out object? id); HttpContext.Items.TryGetValue("Name", out object? name); HttpContext.Items.TryGetValue("Picture", out object? picture); HttpContext.Items.TryGetValue("School", out object? school); HttpContext.Items.TryGetValue("Scope", out object? scope); HttpContext.Items.TryGetValue("TimeZone", out object? timeZone); List rolse= new List(); if (HttpContext.Items.TryGetValue("Roles", out object? _roles)) { if (_roles is List s) { rolse=s; } } if (!string.IsNullOrWhiteSpace(key)) { HttpContext.Items.TryGetValue(key, out keyData); } return ($"{id}", $"{name}", $"{picture}", $"{school}",$"{scope}",$"{timeZone}", rolse, $"{keyData}"); } /// /// 取得驗證金鑰,Authorization /// public string GetToken() { return HttpContext.Request.Headers["Authorization"].ToString(); } /// /// 取得驗證金鑰,Authorization /// public string? GetXAuthToken() { //return HttpContext.Request.Headers["X-Auth-AuthToken"].ToString(); try { if (HttpContext.Request.Headers.TryGetValue("X-Auth-AuthToken", out StringValues value)) return value.ToString(); else return null; } catch { return null; } } /// /// 取得JWT驗證金鑰,Authorization Bearer /// /// /// public string GetJwtToken() { var token = string.Empty; string authorization = HttpContext.Request.Headers["Authorization"].ToString(); if (!string.IsNullOrWhiteSpace(authorization) && authorization.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) { token = authorization.Substring("Bearer ".Length).Trim(); } return token; } public int code = 0; public string msg = "OK"; } }