예제 #1
0
        public async Task <HttpResponseMessage> Join(int clusterId, [FromBody] JoinClusterRequest user)
        {
            try
            {
                if (user == null || String.IsNullOrWhiteSpace(user.UserEmail) || String.IsNullOrWhiteSpace(user.CaptchaResponse))
                {
                    return(this.Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               new BadRequestViewModel("MissingInput", messageResources.Manager.GetString("MissingInput"), "Missing input.")));
                }

                // validate captcha.
                bool captchaValid = await this.captcha.VerifyAsync(user.CaptchaResponse);

                if (!captchaValid)
                {
                    return(this.Request.CreateResponse(
                               HttpStatusCode.Forbidden,
                               new BadRequestViewModel("InvalidCaptcha", messageResources.Manager.GetString("InvalidCaptcha"), "Invalid parameter: captcha")));
                }

                ServiceUriBuilder builder        = new ServiceUriBuilder("ClusterService");
                IClusterService   clusterService = ServiceProxy.Create <IClusterService>(builder.ToUri(), new ServicePartitionKey(1));

                await clusterService.JoinClusterAsync(clusterId, user.UserEmail);

                return(this.Request.CreateResponse(HttpStatusCode.Accepted));
            }
            catch (AggregateException ae)
            {
                ArgumentException argumentEx = ae.InnerException as ArgumentException;
                if (argumentEx != null)
                {
                    return(this.Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               new BadRequestViewModel("InvalidEmail", messageResources.Manager.GetString("InvalidEmail"), argumentEx.Message)));
                }

                JoinClusterFailedException joinFailedEx = ae.InnerException as JoinClusterFailedException;
                if (joinFailedEx != null)
                {
                    return(this.Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               new BadRequestViewModel(
                                   joinFailedEx.Reason.ToString(),
                                   messageResources.Manager.GetString(joinFailedEx.Reason.ToString()),
                                   joinFailedEx.Message)));
                }

                return(this.Request.CreateResponse(
                           HttpStatusCode.InternalServerError,
                           new BadRequestViewModel("ServerError", messageResources.Manager.GetString("ServerError"), ae.InnerException.Message)));
            }
            catch (Exception e)
            {
                return(this.Request.CreateResponse(
                           HttpStatusCode.InternalServerError,
                           new BadRequestViewModel("ServerError", messageResources.Manager.GetString("ServerError"), e.Message)));
            }
        }