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);
     }
 }
Esempio n. 3
0
 public AuthController(ScvDbContext db, IConfiguration configuration, AesGcmEncryption aesGcmEncryption)
 {
     Db               = db;
     Configuration    = configuration;
     AesGcmEncryption = aesGcmEncryption;
 }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
 public VcCivilFileAccessHandler(ScvDbContext db)
 {
     Db = db;
 }