public HttpResponseMessage ActivitySendSMSQRCode([FromBody] GenerateSendSMSQRCodeModel model) { if (ValidationService.AuthorizeToken(GetToken(), "post:/api/organizer/activitysendsmsqrcode") == false) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Unauthorized, Content = new StringContent("无访问权限", System.Text.Encoding.GetEncoding("UTF-8"), "application/text") }); } //到期时间为当前时间之后 3 小时 DateTime expireTime = DateTime.Now + new TimeSpan(3, 0, 0); ActionValidationModel actionValidate = myService.ActionValidationService.GenerateActionValidate("ActivitySendSMS", model, expireTime); MemoryStream ms = new MemoryStream(); myService.ActionValidationService.GenerateQRCode("activitysendsms," + actionValidate.Id.ToString(), ms); byte[] buffer = ms.GetBuffer(); string base64 = Convert.ToBase64String(buffer); var result = new { expireTime = expireTime, image = base64 }; StringWriter tw = new StringWriter(); JsonSerializer jsonSerializer = new JsonSerializer(); jsonSerializer.Serialize(tw, result, result.GetType()); return(new HttpResponseMessage { StatusCode = HttpStatusCode.Accepted, Content = new StringContent(tw.ToString(), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); }
/// <summary> /// 发送验证短信,生成对应的actionValidation /// </summary> /// <param name="user">发送短信目标用户</param> /// <param name="expireTimeSpan">短信验证码过期时间(整分钟)</param> /// <param name="randcode">短信验证码</param> /// <param name="actionValidationAction">actionValidation的action</param> /// <returns>生成actionValidation的id</returns> internal Guid SendShortMessageToVerifyPhoneNumber(User user, TimeSpan expireTimeSpan, string randcode, string actionValidationAction) { //string lastsend; //if (user.ExtraInformation.ContainsKey("sendSMS-lastTime") == false) //{ // lastsend = "null"; //} //else //{ // lastsend=((DateTime)user.ExtraInformation["sendSMS-lastTime"]).ToLocalTime().ToString(); //} //System.Diagnostics.Debug.WriteLine("last Send:" + lastsend); //System.Diagnostics.Debug.WriteLine("Now:" + DateTime.Now); if (user.ExtraInformation.ContainsKey("sendSMS-lastTime") == false || DateTime.Now - ((DateTime)user.ExtraInformation["sendSMS-lastTime"]).ToLocalTime() >= new TimeSpan(0, 5, 0)) { //到期时间 DateTime expireTime = DateTime.Now + expireTimeSpan; int expireTimeTotalMinutes = Convert.ToInt32(expireTimeSpan.TotalMinutes); //生成actionValidation ActionValidationModel actionValidate = myService.ActionValidationService.GenerateActionValidate(actionValidationAction, user.Id.ToString() + "," + randcode, expireTime); //发送验证短信 shortMessageService.SendShortMessage(user.PhoneNumber, randcode, expireTimeTotalMinutes); //修改用户extra中信息 user.ModifyExtraInformation("sendSMS-lastTime", DateTime.Now); //System.Diagnostics.Debug.WriteLine("This Send:" + ((DateTime)(myService.FindUser(user.Id).ExtraInformation["sendSMS-lastTime"])).ToLocalTime()); return(actionValidate.Id); } else { throw new Exception("两次发送验证短信间隔不能小于5分钟"); } }
/// <inheritdoc /> public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { HttpResponse response = context.HttpContext.Response; ActionValidationModel model = GetModel(context.ActionDescriptor, context.HttpContext.RequestServices); MemoryStream buffer = null; Stream initialStream = null; if (model.BufferResponse) { buffer = new MemoryStream(); //replace the context response with our buffer initialStream = response.Body; response.Body = buffer; } //invoke the rest of the pipeline await next(); if (model.BufferResponse) { Debug.Assert(buffer != null); //reset the buffer and read out the contents buffer.Seek(0, SeekOrigin.Begin); IList <ValidationError> validationErrors = null; if (response.ContentType != null && (response.ContentType.StartsWith(Constants.ContentTypes.ApplicationJson, StringComparison.Ordinal) || response.ContentType.StartsWith(Constants.ContentTypes.TextJson, StringComparison.Ordinal))) { ResponseTypeModel responseTypeModel = model.ResponseTypes.SingleOrDefault(r => r.StatusCode == response.StatusCode); if (responseTypeModel != null) { JSchema responseSchema = SchemaGenerator.GetGeneratedSchema(responseTypeModel.Type); validationErrors = ValidationHelper.Validate(buffer, responseSchema); //reset to start of stream buffer.Seek(0, SeekOrigin.Begin); } } //copy our content to the original stream and put it back await buffer.CopyToAsync(initialStream); response.Body = initialStream; if (validationErrors != null && validationErrors.Count > 0) { throw JSchemaValidationErrorsException.Create(validationErrors); } } }
public void Create_InvalidReturnType_NoResponseTypes() { ActionValidationModel model = ActionValidationModel.Create(new ControllerActionDescriptor { MethodInfo = new Func <IActionResult>(() => null).Method, }, new JSchemaValidationFilterAttribute(), new FakeHostingEnvironment()); Assert.Equal(0, model.ResponseTypes.Count); Assert.False(model.BufferResponse); }
public void Create_ValidReturnType_200ResponseType() { ActionValidationModel model = ActionValidationModel.Create(new ControllerActionDescriptor { MethodInfo = new Func <string>(() => null).Method }, new JSchemaValidationFilterAttribute(), new FakeHostingEnvironment()); Assert.Equal(1, model.ResponseTypes.Count); Assert.Equal(200, model.ResponseTypes[0].StatusCode); Assert.Equal(typeof(string), model.ResponseTypes[0].Type); Assert.True(model.BufferResponse); }
public void Create_InvalidProducesResponseTypeAttributeTypeOverridesValidReturnType_NoResponseTypes() { ActionValidationModel model = ActionValidationModel.Create(new ControllerActionDescriptor { MethodInfo = new Func <string>(() => null).Method, FilterDescriptors = new List <FilterDescriptor> { new FilterDescriptor(new ProducesResponseTypeAttribute(typeof(void), 200), 1) } }, new JSchemaValidationFilterAttribute(), new FakeHostingEnvironment()); Assert.Equal(0, model.ResponseTypes.Count); Assert.False(model.BufferResponse); }
/// <summary> /// 发送验证邮件,生成对应的actionValidation /// </summary> /// <param name="user">发送邮件目标用户</param> /// <param name="expireTimeSpan">链接过期时间</param> /// <param name="actionValidationAction">actionValidation的action</param> /// <param name="xmlFileName">xml配置文件名</param> /// <param name="replaceDic">替换模板的dictionary</param> internal void SendEmailToVerifyMail(User user, TimeSpan expireTimeSpan, string actionValidationAction, string xmlFileName) { //到期时间 DateTime expireTime = DateTime.Now + expireTimeSpan; //生成actionValidation ActionValidationModel actionValidate = myService.ActionValidationService.GenerateActionValidate(actionValidationAction, user.Id, expireTime); //从xml中读取邮件主题 string subject = Jtext103.StringConfig.ConfigString.GetString(xmlFileName, "MailSubject"); //从xml中读取模板路径 string templatePath = HttpRuntime.AppDomainAppPath + Jtext103.StringConfig.ConfigString.GetString(xmlFileName, "MailTemplateRelativePath"); //读取模板 string template = File.ReadAllText(templatePath); //替换模板关键字 Dictionary <string, string> replaceDic = new Dictionary <string, string>(); replaceDic.Add("actionValidateId", actionValidate.Id.ToString()); string mailContent = GenerateStringFromTemplate.GenerateString(template, replaceDic); //发送邮件 mailService.SendMail(user.Email, subject, mailContent); }
/// <inheritdoc /> public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { ActionValidationModel model = GetModel(context.ActionDescriptor, context.HttpContext.RequestServices); Stream originalRequestBody = null; if (model.RequestBodySchema != null) { MemoryStream buffer = new MemoryStream(); originalRequestBody = context.HttpContext.Request.Body; await context.HttpContext.Request.Body.CopyToAsync(buffer); buffer.Seek(0, SeekOrigin.Begin); IList <ValidationError> validationErrors = ValidationHelper.Validate(buffer, model.RequestBodySchema); if (validationErrors.Count > 0) { JSchemaValidationErrorsException ex = JSchemaValidationErrorsException.Create(validationErrors); context.ModelState.AddModelError( model.RequestBodyName, ex, ModelMetadataProvider.GetMetadataForType(model.RequestBodyType)); } buffer.Seek(0, SeekOrigin.Begin); context.HttpContext.Request.Body = buffer; } await next(); if (originalRequestBody != null) { context.HttpContext.Request.Body = originalRequestBody; } }
public HttpResponseMessage ActivitySendSMSQRCode(string id) { if (ValidationService.AuthorizeToken(GetToken(), "get:/api/organizer/activitysendsmsqrcode?id=") == false) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.Unauthorized, Content = new StringContent("无访问权限", System.Text.Encoding.GetEncoding("UTF-8"), "application/text") }); } //验证actionValidation(是否过期、action是否对应) if (!myService.ActionValidationService.Validate(id, "ActivitySendSMS")) { return(new HttpResponseMessage(HttpStatusCode.Forbidden)); } ActionValidationModel actionValidation = myService.ActionValidationService.FindOneById(id); var result = actionValidation.Target; StringWriter tw = new StringWriter(); JsonSerializer jsonSerializer = new JsonSerializer(); jsonSerializer.Serialize(tw, result, result.GetType()); return(new HttpResponseMessage { StatusCode = HttpStatusCode.Accepted, Content = new StringContent(tw.ToString(), System.Text.Encoding.GetEncoding("UTF-8"), "application/json") }); }
private ActionValidationModel GetModel(ActionDescriptor actionDescriptor, IServiceProvider serviceProvider) { return(ActionModels.GetOrAdd(actionDescriptor, d => ActionValidationModel.Create(d, this, (IHostingEnvironment)serviceProvider.GetService(typeof(IHostingEnvironment))))); }