private async Task AuditLog(HttpContext context, ScvDbContext db) { // May change this later, to include requests that aren't logged into keycloak. if (!string.IsNullOrEmpty(context.User.PreferredUsername())) { var request = context.Request; var jsonBody = "{}"; if (request.ContentType != null && request.ContentType.Contains("json")) { request.Body.Position = 0; using var reader = new StreamReader(request.Body); jsonBody = await reader.ReadToEndAsync(); request.Body.Position = 0; } var audit = new Audit { Created = DateTimeOffset.Now, Path = $"{request.Method} {request.GetEncodedPathAndQuery()}", Action = $"{(request.RouteValues.ContainsKey("action") ? request.RouteValues["action"] : "")}", JsonBody = jsonBody, IpAddress = request.Headers.ContainsKey("X-Real-IP") ? request.Headers["X-Real-IP"].ToString() : "", ResponseCode = context.Response?.StatusCode.ToString(), UserId = context.User.PreferredUsername() }; await db.AddAsync(audit); await db.SaveChangesAsync(); } }
/// <summary> /// Handle the exception if one occurs. Note this wont catch exceptions created from async void functions. /// </summary> /// <param name="context"></param> /// <param name="db"></param> /// <returns></returns> public async Task Invoke(HttpContext context, ScvDbContext db) { try { await _next(context); } catch (Exception ex) { await HandleExceptionAsync(context, ex); } finally { await AuditLog(context, db); } }
public AuthController(ScvDbContext db, IConfiguration configuration, AesGcmEncryption aesGcmEncryption) { Db = db; Configuration = configuration; AesGcmEncryption = aesGcmEncryption; }
public ActionResult AddInfo(string trackingNumber, string serialNumber) { ResultViewModel Result = new ResultViewModel(); if (string.IsNullOrEmpty(trackingNumber) || string.IsNullOrEmpty(serialNumber)) { Result.Status = AjaxMsgStatus.Error; Result.Msg = "数据不能为NULL"; Result.Data = trackingNumber + ":" + serialNumber; return(Json(Result)); } string pattern = @"^\d+$"; Regex reg = new Regex(pattern); if (reg.IsMatch(trackingNumber) == false) { Result.Status = AjaxMsgStatus.Error; Result.Msg = "运单号格式错误"; Result.Data = trackingNumber + ":" + serialNumber; return(Json(Result)); } try { using (ScvDbContext ctx = new ScvDbContext()) { OrderPartInfo info = new OrderPartInfo() { TrackingNumber = trackingNumber, SerialNumber = serialNumber }; if (ctx.OrderPartInfos.Any(o => o.TrackingNumber == trackingNumber && o.SerialNumber == serialNumber)) { Result.Status = AjaxMsgStatus.Error; Result.Msg = "当前条目已经存在"; Result.Data = trackingNumber + ":" + serialNumber; return(Json(Result)); } ctx.OrderPartInfos.Add(info); if (ctx.SaveChanges() > 0) { Result.Status = AjaxMsgStatus.Success; Result.Msg = "成功"; Result.Data = trackingNumber + ":" + serialNumber; } else { Result.Status = AjaxMsgStatus.Error; Result.Msg = "失败"; Result.Data = trackingNumber + ":" + serialNumber; } } } catch { Result.Status = AjaxMsgStatus.Error; Result.Msg = "失败"; Result.Data = trackingNumber + ":" + serialNumber; } return(Json(Result)); }
public VcCivilFileAccessHandler(ScvDbContext db) { Db = db; }