| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- using System.Globalization;
- using System.IdentityModel.Tokens.Jwt;
- using System.Security.Claims;
- using System.Text;
- using System.Xml.Linq;
- using System.Xml.Serialization;
- using Common.Constant;
- using log4net;
- using Microsoft.AspNetCore.Http;
- using Microsoft.Extensions.Configuration;
- using Microsoft.IdentityModel.Tokens;
- using Newtonsoft.Json;
- using System.Net;
- namespace Common.Logic;
- public class CommonLogic
- {
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(CommonLogic));
- public static String GenToken(IConfiguration configuration, String msisdn, String accountId)
- {
- var issuer = configuration["Jwt:Issuer"];
- var audience = configuration["Jwt:Audience"];
- var key = Encoding.ASCII.GetBytes(configuration["Jwt:Key"]!);
- var tokenDescriptor = new SecurityTokenDescriptor
- {
- Subject = new ClaimsIdentity(
- new[]
- {
- new Claim("Id", Guid.NewGuid().ToString()),
- new Claim("Msisdn", msisdn),
- new Claim("AccountId", accountId),
- new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
- }
- ),
- Expires = DateTime.UtcNow.AddMinutes(int.Parse(configuration["Jwt:Time"] ?? "900")),
- Issuer = issuer,
- Audience = audience,
- SigningCredentials = new SigningCredentials(
- new SymmetricSecurityKey(key),
- SecurityAlgorithms.HmacSha512Signature
- )
- };
- var tokenHandler = new JwtSecurityTokenHandler();
- var token = tokenHandler.CreateToken(tokenDescriptor);
- var jwtToken = tokenHandler.WriteToken(token);
- var stringToken = tokenHandler.WriteToken(token);
- return stringToken;
- }
- public static string GenRefreshToken(IConfiguration configuration, string msisdn)
- {
- var issuer = configuration["Jwt:Issuer"];
- var audience = configuration["Jwt:Audience"];
- var key = Encoding.ASCII.GetBytes(configuration["Jwt:Key"]);
- var tokenDescriptor = new SecurityTokenDescriptor
- {
- Subject = new ClaimsIdentity(
- new[]
- {
- new Claim("Id", Guid.NewGuid().ToString()),
- new Claim("Msisdn", msisdn),
- new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
- }
- ),
- Expires = DateTime.UtcNow.AddMinutes(int.Parse(configuration["Jwt:Time"] ?? "900")),
- Issuer = issuer,
- Audience = audience,
- SigningCredentials = new SigningCredentials(
- new SymmetricSecurityKey(key),
- SecurityAlgorithms.HmacSha512Signature
- )
- };
- var tokenHandler = new JwtSecurityTokenHandler();
- var token = tokenHandler.CreateToken(tokenDescriptor);
- var jwtToken = tokenHandler.WriteToken(token);
- var stringToken = tokenHandler.WriteToken(token);
- return stringToken;
- }
- public static string? GetDataFromToken(
- IConfiguration configuration,
- HttpRequest httpRequest,
- string nameKey
- )
- {
- string realToken = "";
- var token = httpRequest.Headers["Authorization"];
- if (token.Count == 0)
- {
- return null;
- }
- realToken = token[0];
- // Trim 'Bearer ' from the start since its just a prefix for the token
- var jwtEncodedString = realToken.Substring(7);
- string? value = GetPath(configuration, jwtEncodedString, nameKey);
- if (value == null)
- {
- return null;
- }
- string url = httpRequest.Path;
- log.Info("url: " + url + " || nameKey: " + nameKey + " value: " + value);
- return value;
- }
- public static string? GetPath(IConfiguration configuration, string token, string nameKey)
- {
- var key = Encoding.ASCII.GetBytes(configuration["Jwt:Key"] ?? "");
- var handler = new JwtSecurityTokenHandler();
- var validations = new TokenValidationParameters
- {
- ValidateIssuerSigningKey = true,
- IssuerSigningKey = new SymmetricSecurityKey(key),
- ValidateIssuer = false,
- ValidateAudience = false,
- ValidateLifetime = true
- };
- var claims = handler.ValidateToken(token, validations, out var tokenSecure);
- var data = claims.Claims.First(x => x.Type == nameKey).Value;
- return data;
- }
- public static string? ValidateMsisdn(string? input)
- {
- if (input == null || input.Length == 0 || !long.TryParse(input, out long temp))
- {
- return null;
- }
- else if (input.StartsWith("255") && input.Length == 12)
- {
- return input.Trim();
- }
- else if (input.StartsWith("0") && input.Length == 10)
- {
- input = "255" + input.Substring(1);
- return input.Trim();
- }
- return null;
- }
- public static string GenPassword(int length)
- {
- const string chars = "0123456789";
- var random = new Random();
- var password = new StringBuilder();
- for (int i = 0; i < length; i++)
- {
- password.Append(chars[random.Next(chars.Length)]);
- }
- return password.ToString();
- }
- /// <summary>
- /// Get language from request header or body
- /// Priority: header Accept-Language > body lang > default "lo"
- /// </summary>
- /// <param name="httpRequest">HTTP request</param>
- /// <param name="bodyLang">Language from request body (optional)</param>
- /// <returns>Language code: "lo" or "en"</returns>
- public static string GetLanguage(HttpRequest httpRequest, string? bodyLang = null)
- {
- // Check header first
- var headerLang = httpRequest.Headers["Accept-Language"].FirstOrDefault();
- if (!string.IsNullOrEmpty(headerLang))
- {
- // Accept-Language can be "en", "lo", "en-US,en;q=0.9", etc.
- var lang = headerLang.Split(',')[0].Split('-')[0].ToLower();
- if (lang == "en" || lang == "lo")
- return lang;
- }
- // Then check body
- if (!string.IsNullOrEmpty(bodyLang))
- return bodyLang.ToLower();
- return "lo"; // Default
- }
- public static string ConvertIntStatus(int? status)
- {
- switch (status)
- {
- case CommonConstant.StatusActive:
- return "Active";
- case CommonConstant.StatusInactive:
- return "Inactive";
- case CommonConstant.StatusClaimed:
- return "Claimed";
- case CommonConstant.StatusNotClaimed:
- return "Not Claimed";
- default:
- return "All";
- }
- }
- public static DateTime ConvertStringToTime(string? time)
- {
- return DateTime.ParseExact(
- time!,
- CommonConstant.ListDateTimeFormat,
- System.Globalization.CultureInfo.InvariantCulture,
- DateTimeStyles.None
- );
- }
- public static string GetClassNameByIntStatus(int status)
- {
- switch (status)
- {
- case CommonConstant.StatusActive:
- return "bg-success";
- case CommonConstant.StatusClaimed:
- return "bg-success";
- case CommonConstant.StatusNotClaimed:
- return "bg-danger";
- case CommonConstant.StatusInactive:
- return "bg-black";
- default:
- return "bg-success";
- }
- }
- public static string? SendPostWithAuthen(ILog log, string Url, dynamic data, string authenToken,string lang = "tu")
- {
- var json = JsonConvert.SerializeObject(data);
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
- request.Method = "POST";
- request.ContentType = "application/json";
- request.ContentLength = json.Length;
- request.Headers.Add("Authorization", "Bearer " + authenToken);
- request.Headers.Add("Accept-Language", lang);
- log.Info("request: " + Url + " data: " + json);
- using (Stream webStream = request.GetRequestStream())
- using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII))
- {
- requestWriter.Write(json);
- }
- try
- {
- WebResponse webResponse = request.GetResponse();
- using (Stream webStream = webResponse.GetResponseStream() ?? Stream.Null)
- using (StreamReader responseReader = new StreamReader(webStream))
- {
- string response = responseReader.ReadToEnd();
- log.Info("request: " + Url + " /nData: " + json + " /n response: " + response);
- return response;
- }
- }
- catch (Exception e)
- {
- log.Info("-----------------");
- log.Info(e.Message);
- }
- return null;
- }
- public static string? SendPost(ILog log, string Url, dynamic data)
- {
- var json = JsonConvert.SerializeObject(data);
- log.Info("request: " + Url + " data: " + json);
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
- request.Method = "POST";
- request.ContentType = "application/json";
- request.ContentLength = json.Length;
- // CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
- // log.Debug("Lang: " + currentCulture.Name);
- // request.Headers.Add("Lang", currentCulture.Name);
- using (Stream webStream = request.GetRequestStream())
- using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII))
- {
- requestWriter.Write(json);
- }
- try
- {
- WebResponse webResponse = request.GetResponse();
- using (Stream webStream = webResponse.GetResponseStream() ?? Stream.Null)
- using (StreamReader responseReader = new StreamReader(webStream))
- {
- string response = responseReader.ReadToEnd();
- log.Info("request: " + Url + " /nData: " + json + " /n response: " + response);
- return response;
- }
- }
- catch (Exception e)
- {
- log.Info("-----------------");
- log.Info(e.Message);
- }
- return null;
- }
- public static string GetErrorDescription(string code)
- {
- switch (code)
- {
- case "0":
- return "SUBSCRIBER put to queue Success";
- case "1":
- return "SUBSCRIBER put to Queue failed";
- case "2":
- return "Unauthentic";
- case "15":
- return "Missing value (Input params null) / Invalid Parameter(s)";
- case "200":
- return "Invalid username or password";
- case "201":
- return "Invalid Request Type";
- case "202":
- return "Invalid Request";
- case "203":
- return "Invalid package";
- case "204":
- return "Server too busy";
- case "400":
- return "Not register";
- case "401":
- return "Not enough money";
- case "403":
- return "Already register";
- case "408":
- return "Get price charge error";
- case "411":
- return "Subscriber was cancel service";
- case "412":
- return "Subscriber not use service";
- case "413":
- return "Conflict package. Subscriber is using other package in same service";
- case "418":
- return "MO command not support";
- case "419":
- return "3rd Party is incorrect";
- case "420":
- return "Wrong format datetime: yyyy-MM-dd";
- case "504":
- return "Unknown error";
- default:
- return "Unknown error code";
- }
- }
- //public static EnvelopeNoNs ParseSoapResponse(string xml)
- //{
- // // Bỏ namespace để dễ deserialize
- // XDocument doc = XDocument.Parse(xml);
- // foreach (var elem in doc.Descendants())
- // elem.Name = elem.Name.LocalName;
- // string cleanXml = doc.ToString();
- // var serializer = new XmlSerializer(typeof(EnvelopeNoNs));
- // using var reader = new StringReader(cleanXml);
- // return (EnvelopeNoNs)serializer.Deserialize(reader)!;
- //}
- }
|