Exemplo n.º 1
0
        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")
            });
        }
Exemplo n.º 2
0
 /// <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分钟");
     }
 }
Exemplo n.º 3
0
        /// <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);
                }
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <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;
            }
        }
Exemplo n.º 9
0
        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")
            });
        }
Exemplo n.º 10
0
 private ActionValidationModel GetModel(ActionDescriptor actionDescriptor, IServiceProvider serviceProvider)
 {
     return(ActionModels.GetOrAdd(actionDescriptor, d => ActionValidationModel.Create(d, this, (IHostingEnvironment)serviceProvider.GetService(typeof(IHostingEnvironment)))));
 }