예제 #1
0
        public async Task <BaseResponseModel> Register(SignUpAC model)
        {
            if (_iAccountRepository == null)
            {
                _iAccountRepository = new AccountRepository();
            }

            var isExistUser = UserManager.FindByEmail(model.Email);

            if (isExistUser == null)
            {
                if (await _iAccountRepository.Signup(model) == true)
                {
                    return(StatusBuilder.ResponseSuccessStatus(null, StringConstant.SignUpSuccessfull));
                }
                else
                {
                    return(StatusBuilder.ResponseFailStatus(null, StringConstant.SignUpFail));
                }
            }
            else
            {
                return(StatusBuilder.ResponseFailStatus(null, "Email " + StringConstant.AlreadyExists));
            }
            //if (!result.Succeeded)
            //{
            //    return GetErrorResult(result);
            //}
            //else
            //{
            //    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
            //}

            //return Ok();
        }
예제 #2
0
        public static Status FromProperties(IDictionary <string, object> statusProperties)
        {
            object objectCode    = statusProperties[Code];
            object objectMessage = statusProperties[Message];
            object objectState   = statusProperties[State];

            if (objectCode == null && objectMessage == null && objectState == null)
            {
                return(null);
            }
            StatusBuilder statusBuilder = new StatusBuilder();

            if (objectCode != null)
            {
                statusBuilder.Code = Escaper.Escape(objectCode.ToString());
            }
            if (objectMessage != null)
            {
                statusBuilder.Message = objectMessage.ToString();
            }
            if (objectState != null)
            {
                statusBuilder.State = objectState.ToString();
            }
            return(statusBuilder.Build());
        }
        public async Task <StatusBuilder> SendToken(ApplicationUser user, SendCodeViewModel model)
        {
            var output = new StatusBuilder();

            // Generate the token and send it
            var code = await _userManager.GenerateTwoFactorTokenAsync(user, model.SelectedProvider);

            if (string.IsNullOrWhiteSpace(code))
            {
                output.RecordFailure("Unable to generate token");
            }
            else
            {
                var message = "Your security code is: " + code;

                if (model.SelectedProvider == "Email")
                {
                    await _emailSender.SendEmailAsync(await _userManager.GetEmailAsync(user), "Security Code", message);
                }
                else if (model.SelectedProvider == "Phone")
                {
                    await _smsSender.SendSmsAsync(await _userManager.GetPhoneNumberAsync(user), message);
                }
            }

            return(output);
        }
        public async Task <StatusBuilder> Disable2FA(ClaimsPrincipal principal)
        {
            var output = new StatusBuilder();

            var user = await _userManager.GetUserAsync(principal);

            if (await _userManager.GetTwoFactorEnabledAsync(user))
            {
                var result = await _userManager.SetTwoFactorEnabledAsync(user, false);

                if (result.Succeeded)
                {
                    output.SetMessage("2FA has been successfully disabled");
                }
                else
                {
                    output.RecordFailure($"Failed to disable 2FA {result.Errors.FirstOrDefault()?.Description}");
                }
            }
            else
            {
                output.RecordFailure("Cannot disable 2FA as it's not currently enabled");
            }

            return(output);
        }
        public StatusBuilder ValidateReturnUrl(HttpContext context, IUrlHelper urlHelper, String returnUrl)
        {
            var output = new StatusBuilder();

            if (string.IsNullOrEmpty(returnUrl))
            {
                returnUrl = "~/";
            }

            var redirectDetails = new RedirectUrlDetails();

            redirectDetails.IsLocal = false;

            if (_interaction.IsValidReturnUrl(redirectDetails.Url) || urlHelper.IsLocalUrl(redirectDetails.Url))
            {
                redirectDetails.IsLocal = true;
            }
            // validate returnUrl - either it is a valid OIDC URL or back to a local page
            else if (urlHelper.IsLocalUrl(returnUrl) == false && _interaction.IsValidReturnUrl(returnUrl) == false)
            {
                // user might have clicked on a malicious link - should be logged
                output.RecordFailure("Invalid return URL - Possible malicious Link.");
            }

            return(output);
        }
예제 #6
0
        public virtual async Task <StatusBuilder> LoginAsync(LoginDetails details)
        {
            var output  = new StatusBuilder();
            var results = new LoginResults();

            results.User = await _userManager.FindByNameAsync(details.Username);

            if (results.User != null)
            {
                var passwordValid = await _userManager.CheckPasswordAsync(results.User, details.Password);

                if (passwordValid)
                {
                    results.Result = await _signInManager.PasswordSignInAsync(details.Username, details.Password, true, lockoutOnFailure : false);
                }
                else
                {
                    // It's an invalid password, but include both username and password to lower hacking attempts
                    output.RecordFailure("Invalid Password or Username");
                }
            }
            else
            {
                // It's an invalid username, but include both username and password to lower hacking attempts
                output.RecordFailure("Invalid Username or Password");
            }

            output.SetData(results);

            return(output);
        }
예제 #7
0
        public void GetEnvelopStatusTest()
        {
            IStatusBuilder builder = new StatusBuilder(_api, new JsonConfiguration());
            IResponse      response;

            Assert.IsTrue(builder.Build("5058294f-25d3-4da4-9cb7-926d95dc66b1", _username, _password, out response));
            Assert.AreEqual("completed", ((EnvelopeStatus)response.Data).Status);
        }
예제 #8
0
        public Program()
        {
            GetLayers();
            StatusBuilder.Clear();
            foreach (var x in BlocksPerLayer)
            {
                StatusBuilder.AppendLine(x.ToString());
            }

            Me.CustomData = StatusBuilder.ToString();
        }
 public async Task <BaseResponse> SignupAsync(UserDetailDTO userDetail)
 {
     try
     {
         return(await _iAccountRepository.SignUpAsync(userDetail));
     }
     catch (Exception ex)
     {
         _logger.LogError(ex.Message);
         return(StatusBuilder.ResponseFailStatus(null, ex.Message));
     }
 }
        // Returns true or fale if windows login is successful, on true, it returns the redirect URL
        public async Task <StatusBuilder> ProcessWindowsLoginAsync(HttpContext context, IUrlHelper urlHelper, string returnUrl)
        {
            var output = new StatusBuilder();

            // see if windows auth has already been requested and succeeded
            var result = await context.AuthenticateAsync(AccountOptions.WindowsAuthenticationSchemeName);

            if (result?.Principal is WindowsPrincipal wp)
            {
                // we will issue the external cookie and then redirect the
                // user back to the external callback, in essence, treating windows
                // auth the same as any other external authentication mechanism
                var props = new AuthenticationProperties()
                {
                    RedirectUri = urlHelper.Action("Callback"),
                    Items       =
                    {
                        { "returnUrl", returnUrl                                      },
                        { "scheme",    AccountOptions.WindowsAuthenticationSchemeName },
                    }
                };

                var id = new ClaimsIdentity(AccountOptions.WindowsAuthenticationSchemeName);
                id.AddClaim(new Claim(JwtClaimTypes.Subject, wp.Identity.Name));
                id.AddClaim(new Claim(JwtClaimTypes.Name, wp.Identity.Name));

                // add the groups as claims -- be careful if the number of groups is too large
                if (AccountOptions.IncludeWindowsGroups)
                {
                    var wi     = wp.Identity as WindowsIdentity;
                    var groups = wi.Groups.Translate(typeof(NTAccount));
                    var roles  = groups.Select(x => new Claim(JwtClaimTypes.Role, x.Value));
                    id.AddClaims(roles);
                }

                await context.SignInAsync(
                    IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme,
                    new ClaimsPrincipal(id),
                    props);

                output.SetData(props.RedirectUri);
            }
            else
            {
                output.Fail();
            }

            return(output);
        }
예제 #11
0
        /// <summary>
        /// This method is use for new user signup
        /// </summary>
        /// <param name="userDetailDTO"></param>
        /// <returns></returns>
        public async Task <BaseResponse> SignUpAsync(UserDetailDTO userDetailDTO)
        {
            try
            {
                //string ConnectionString = _config[_iStringConstants.MyConnectionString];
                BaseResponse baseResponse = new BaseResponse();
                UserTokenDTO userTokenAC  = new UserTokenDTO();
                using (DeepakdbContext deepakDBContext = new DeepakdbContext())
                {
                    //deepakDBContext.Query<T>().AsTracking().
                    var data = await Task.Run(() => deepakDBContext
                                              .Database.ExecuteSqlRaw("spInsertUserDetail @FirstName=@p0, @LastName=@p1,@Email=@p2,@Password=@p3,@MobileNumber=@p4,@Address_Line1=@p5,@Address_Line2=@p6, @ZipCode=@p7, @CreatedBy=@p8",
                                                                      parameters: new [] { userDetailDTO.FirstName, userDetailDTO.LastName, userDetailDTO.Email,
                                                                                           PasswordHashUtill.HashPassword(userDetailDTO.Password), userDetailDTO.MobileNumber,
                                                                                           userDetailDTO.AddressLine1, userDetailDTO.AddressLine2, userDetailDTO.ZipCode.ToString(),
                                                                                           userDetailDTO.CreatedBy }



                                                                      /*new SqlParameter("@FirstName", userDetailDTO.FirstName),
                                                                       * new SqlParameter("@LastName", userDetailDTO.FirstName),
                                                                       * new SqlParameter("@Email", userDetailDTO.Email),
                                                                       * new SqlParameter("@Password",PasswordHashUtill.HashPassword( userDetailDTO.Password)),
                                                                       * new SqlParameter("@MobileNumber", userDetailDTO.MobileNumber),
                                                                       * new SqlParameter("@Address_Line1", userDetailDTO.AddressLine1),
                                                                       * new SqlParameter("@Address_Line2", userDetailDTO.AddressLine2),
                                                                       * new SqlParameter("@ZipCode", userDetailDTO.ZipCode),
                                                                       * new SqlParameter("@CreatedBy", userDetailDTO.CreatedBy)*/
                                                                      ));

                    if (data != null)
                    {
                        baseResponse.StatusCode = 1;
                        baseResponse.Message    = _iStringConstants.AddedSuccessfully;
                        // Need to ask how to get DBCONTEXT status code from store procedure
                    }
                    if (baseResponse.StatusCode == 1)
                    {
                        return(StatusBuilder.ResponseSuccessStatus(null, baseResponse.Message));
                    }

                    return(StatusBuilder.ResponseFailStatus(null, baseResponse.Message));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <StatusBuilder> ResetAuthenticator(ClaimsPrincipal principal)
        {
            var output = new StatusBuilder();

            var user = await _userManager.GetUserAsync(principal);

            await _userManager.SetTwoFactorEnabledAsync(user, false);

            await _userManager.ResetAuthenticatorKeyAsync(user);

            await _signInManager.RefreshSignInAsync(user);

            output.SetMessage("Your authenticator app key has been reset, you will need to configure your authenticator app using the new key.");

            return(output);
        }
예제 #13
0
        private async Task <PNResult <PNPublishFileMessageResult> > PublishFileMessage(object message, Dictionary <string, object> externalQueryParam)
        {
            PNResult <PNPublishFileMessageResult> ret = new PNResult <PNPublishFileMessageResult>();

            IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : "");

            Uri request = urlBuilder.BuildPublishFileMessageRequest("GET", "", this.channelName, message, this.storeInHistory, this.ttl, this.userMetadata, null, externalQueryParam);

            RequestState <PNPublishFileMessageResult> requestState = new RequestState <PNPublishFileMessageResult>();

            requestState.Channels          = new[] { this.channelName };
            requestState.ResponseType      = PNOperationType.PNPublishFileMessageOperation;
            requestState.PubnubCallback    = null;
            requestState.Reconnect         = false;
            requestState.EndPointOperation = this;

            string json = "";

            await UrlProcessRequest(request, requestState, false).ContinueWith(r =>
            {
                json = r.Result.Item1;
                if (!string.IsNullOrEmpty(json))
                {
                    List <object> result                     = ProcessJsonResponse(requestState, json);
                    ResponseBuilder responseBuilder          = new ResponseBuilder(config, jsonLibrary, pubnubLog);
                    PNPublishFileMessageResult publishResult = responseBuilder.JsonToObject <PNPublishFileMessageResult>(result, true);
                    StatusBuilder statusBuilder              = new StatusBuilder(config, jsonLibrary);
                    if (publishResult != null)
                    {
                        ret.Result      = publishResult;
                        PNStatus status = statusBuilder.CreateStatusResponse(requestState.ResponseType, PNStatusCategory.PNAcknowledgmentCategory, requestState, (int)HttpStatusCode.OK, null);
                        ret.Status      = status;
                    }
                    else
                    {
                        PNException ex       = new PNException("File has been upload but the notification couldn't be sent to the subscribed users");
                        PNStatus status      = statusBuilder.CreateStatusResponse(requestState.ResponseType, PNStatusCategory.PNUnknownCategory, requestState, (int)HttpStatusCode.BadRequest, ex);
                        status.AdditonalData = new Dictionary <string, string> {
                            { "FileId", currentFileId }, { "FileName", sendFileName }
                        };
                        ret.Status = status;
                    }
                }
            }, TaskContinuationOptions.ExecuteSynchronously);

            return(ret);
        }
        public async Task <StatusBuilder> Validate2faUser()
        {
            var output = new StatusBuilder();

            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();

            if (user == null)
            {
                output.RecordFailure("Unable to load two-factor authentication user");
            }
            else
            {
                output.SetData(user);
            }

            return(output);
        }
예제 #15
0
        private static Entry newEntry(IList <string> parentPath, long timestamp, string text)
        {
            EntryBuilder entryBuilder = new EntryBuilder(parentPath, timestamp);

            try
            {
                double?value = double.Parse(text);
                entryBuilder.Value = value;
            }
            catch (System.Exception e)
            {
                StatusBuilder sb = new StatusBuilder();
                sb.Message          = text;
                entryBuilder.Status = sb.Build();
            }
            return(entryBuilder.Build());
        }
예제 #16
0
        public async Task <StatusBuilder> RegisterAsync(RegistrationDetails details)
        {
            var output = new StatusBuilder();

            var user = await _userManager.FindByNameAsync(details.Username);

            if (user == null)
            {
                user = new ApplicationUser {
                    Id       = Guid.NewGuid().ToString(),
                    UserName = details.Username,
                    Email    = details.Email
                };

                output.SetData(user);

                var identityResult = await _userManager.CreateAsync(user, details.Password);

                if (identityResult.Succeeded)
                {
                    if (details.StartFreeTrial)
                    {
                        var trialClaim = new Claim("Trial", DateTime.Now.ToString());
                        await _userManager.AddClaimAsync(user, trialClaim);
                    }
                    else if (details.IsAdmin)
                    {
                        await _userManager.AddToRoleAsync(user, "Admin");
                    }
                }
                else
                {
                    foreach (var err in identityResult.Errors)
                    {
                        output.RecordFailure(err.Description, err.Code);
                    }
                }
            }
            else
            {
                output.RecordFailure("User already exists");
            }

            return(output);
        }
예제 #17
0
        public static Status NewStatus(string code, string message, string state)
        {
            StatusBuilder statusBuilder = new StatusBuilder();

            if (!System.String.IsNullOrEmpty(code))
            {
                statusBuilder.Code = Escaper.Escape(code);
            }
            if (!System.String.IsNullOrEmpty(message))
            {
                statusBuilder.Message = Escaper.Escape(message);
            }
            if (!System.String.IsNullOrEmpty(state))
            {
                statusBuilder.State = state;
            }
            return(statusBuilder.Build());
        }
예제 #18
0
        /// <summary>
        /// The status is set to {@code Status.State.FAIL} if {@code exception} is not null. The message is set to the message
        /// from the exception if there is one. </summary>
        /// <param name="code"> </param>
        /// <param name="exception">
        /// @return </param>
        public static Status NewStatus(string code, Exception exception)
        {
            StatusBuilder statusBuilder = new StatusBuilder();

            if (!System.String.IsNullOrEmpty(code))
            {
                statusBuilder.Code = Escaper.Escape(code);
            }
            if (exception != null)
            {
                statusBuilder.State   = Status.State.Fail;
                statusBuilder.Message = exception.Message;
            }
            else
            {
                statusBuilder.State = Status.State.Pass;
            }
            return(statusBuilder.Build());
        }
예제 #19
0
        public async Task <BaseResponse> UpdateProfileAsync(UserProfileDTO userProfileDTO, long longloggedInUserId)
        {
            try
            {
                BaseResponse baseResponse = new BaseResponse();
                UserTokenDTO userTokenAC  = new UserTokenDTO();
                using (DeepakdbContext deepakDBContext = new DeepakdbContext())
                {
                    var data = await Task.Run(() => deepakDBContext
                                              .UserDetail.FromSqlRaw("spUpdateUserDetail",
                                                                     new SqlParameter("@Id", userProfileDTO.Id),
                                                                     new SqlParameter("@FirstName", userProfileDTO.FirstName),
                                                                     new SqlParameter("@LastName", userProfileDTO.LastName),
                                                                     new SqlParameter("@Email", userProfileDTO.Email),
                                                                     new SqlParameter("@MobileNumber", userProfileDTO.MobileNumber),
                                                                     new SqlParameter("@Address_Line1", userProfileDTO.AddressLine1),
                                                                     new SqlParameter("@Address_Line2", userProfileDTO.AddressLine2),
                                                                     new SqlParameter("@ZipCode", userProfileDTO.ZipCode),
                                                                     new SqlParameter("@@LoggedInUserId", longloggedInUserId)
                                                                     )
                                              );

                    if (data != null)
                    {
                        baseResponse.StatusCode = 1;
                        baseResponse.Message    = _iStringConstants.AddedSuccessfully;

                        // Need to ask how to get DBCONTEXT status code from store procedure
                    }
                    if (baseResponse.StatusCode == 1)
                    {
                        return(StatusBuilder.ResponseSuccessStatus(null, baseResponse.Message));
                    }

                    return(StatusBuilder.ResponseFailStatus(null, baseResponse.Message));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        // The data returned by the status builder upon success is any available recovery codes
        public async Task <StatusBuilder> VerifyAuthenticatorCode(ClaimsPrincipal principal, VerificationCodeDetails code)
        {
            var output = new StatusBuilder();

            var user = await _userManager.GetUserAsync(principal);

            var verificationCode = code.VerificationCode.Replace(" ", string.Empty).Replace("-", string.Empty);

            var is2FaTokenValid = await _userManager.VerifyTwoFactorTokenAsync(user, _userManager.Options.Tokens.AuthenticatorTokenProvider, verificationCode);

            if (is2FaTokenValid)
            {
                var results = await _userManager.SetTwoFactorEnabledAsync(user, true);

                if (results.Succeeded)
                {
                    output.SetMessage("Your authenticator app has been verified");

                    if (await _userManager.CountRecoveryCodesAsync(user) == 0)
                    {
                        var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10);

                        output.SetData(recoveryCodes.ToList());
                    }
                }
                else
                {
                    foreach (var err in results.Errors)
                    {
                        output.RecordFailure(err.Description, err.Code);
                    }
                }
            }
            else
            {
                output.RecordFailure("Verification code is invalid");
            }

            return(output);
        }
        public async Task <StatusBuilder> GenerateRecoveryCodes(ClaimsPrincipal principal)
        {
            var output = new StatusBuilder();

            var user = await _userManager.GetUserAsync(principal);

            var isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user);

            if (isTwoFactorEnabled)
            {
                var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10);

                output.SetMessage("You have generated new recovery codes")
                .SetData(recoveryCodes.ToList());
            }
            else
            {
                output.RecordFailure("Cannot generate recovery codes as you do not have 2FA enabled");
            }

            return(output);
        }
예제 #22
0
        protected override void _Execute(params object[] args)
        {
            Collection <Route> selected = new Collection <Route>();

            foreach (Route item in _GetRoutesFromSelection())
            {
                Route route = item.CloneNoResults() as Route;
                route.Vehicle        = null;
                route.Driver         = null;
                route.DefaultRouteID = null;
                selected.Add(route);
            }

            foreach (Route item in selected)
            {
                item.Name = DataObjectNamesConstructor.GetDuplicateName(item.Name, CurrentSchedule.Routes);
                CurrentSchedule.Routes.Add(item);
            }

            App.Current.Project.Save();
            StatusBuilder statusBuilder = new StatusBuilder();

            statusBuilder.FillSelectionStatusWithoutCollectionSize(CurrentSchedule.Routes.Count, (string)App.Current.FindResource("Route"), 0, OptimizePage);
        }
        protected override void _Execute(params object[] args)
        {
            Collection <Order> selectedOrders = new Collection <Order>();

            foreach (Order order in _GetUnassignedOrdersFromSelection())
            {
                Order newOrder = order.Clone() as Order;
                selectedOrders.Add(newOrder);
            }

            Project project = App.Current.Project;

            foreach (Order order in selectedOrders)
            {
                order.Name = DataObjectNamesConstructor.GetDuplicateName(order.Name, _GetUnassignedOrdersFromSelection());
                project.Orders.Add(order);
            }

            project.Save();

            StatusBuilder statusBuilder = new StatusBuilder();

            statusBuilder.FillSelectionStatusWithoutCollectionSize(CurrentSchedule.UnassignedOrders.Count, (string)App.Current.FindResource("Order"), 0, OptimizePage);
        }
예제 #24
0
        private void Signal(string channel, object message, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam, PNCallback <PNPublishResult> callback)
        {
            if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null)
            {
                PNStatus status = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message"))
                };
                callback.OnResponse(null, status);
                return;
            }

            if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0)
            {
                PNStatus status = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Invalid publish key", new ArgumentException("Invalid publish key"))
                };
                callback.OnResponse(null, status);
                return;
            }

            if (string.IsNullOrEmpty(config.SubscribeKey) || string.IsNullOrEmpty(config.SubscribeKey.Trim()) || config.SubscribeKey.Length <= 0)
            {
                PNStatus status = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Invalid subscribe key", new ArgumentException("Invalid subscribe key"))
                };
                callback.OnResponse(null, status);
                return;
            }

            IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : "");

            Uri request = urlBuilder.BuildSignalRequest("GET", "", channel, message, metaData, externalQueryParam);

            RequestState <PNPublishResult> requestState = new RequestState <PNPublishResult>();

            requestState.Channels          = new[] { channel };
            requestState.ResponseType      = PNOperationType.PNSignalOperation;
            requestState.PubnubCallback    = callback;
            requestState.Reconnect         = false;
            requestState.EndPointOperation = this;

            UrlProcessRequest(request, requestState, false).ContinueWith(r =>
            {
                string json = r.Result.Item1;
                if (!string.IsNullOrEmpty(json))
                {
                    List <object> result = ProcessJsonResponse(requestState, json);

                    if (result != null && result.Count >= 3)
                    {
                        int signalStatus;
                        Int32.TryParse(result[0].ToString(), out signalStatus);
                        if (signalStatus == 1)
                        {
                            ProcessResponseCallbacks(result, requestState);
                        }
                        else
                        {
                            PNStatusCategory category = PNStatusCategoryHelper.GetPNStatusCategory(400, result[1].ToString());
                            PNStatus status           = new StatusBuilder(config, jsonLibrary).CreateStatusResponse <PNPublishResult>(PNOperationType.PNSignalOperation, category, requestState, 400, new PNException(json));
                            if (requestState.PubnubCallback != null)
                            {
                                requestState.PubnubCallback.OnResponse(default(PNPublishResult), status);
                            }
                        }
                    }
                    else
                    {
                        ProcessResponseCallbacks(result, requestState);
                    }
                }
            }, TaskContinuationOptions.ExecuteSynchronously).Wait();
        }
예제 #25
0
        private async Task <PNResult <PNPublishResult> > Signal(string channel, object message, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam)
        {
            PNResult <PNPublishResult> ret = new PNResult <PNPublishResult>();

            if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null)
            {
                PNStatus errStatus = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message"))
                };
                ret.Status = errStatus;
                return(ret);
            }

            if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0)
            {
                PNStatus errStatus = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Invalid publish key", new ArgumentException("Invalid publish key"))
                };
                ret.Status = errStatus;
                return(ret);
            }

            if (string.IsNullOrEmpty(config.SubscribeKey) || string.IsNullOrEmpty(config.SubscribeKey.Trim()) || config.SubscribeKey.Length <= 0)
            {
                PNStatus errStatus = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Invalid subscribe key", new ArgumentException("Invalid subscribe key"))
                };
                ret.Status = errStatus;
                return(ret);
            }

            IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : "");

            Uri request = urlBuilder.BuildSignalRequest("GET", "", channel, message, metaData, externalQueryParam);

            RequestState <PNPublishResult> requestState = new RequestState <PNPublishResult>();

            requestState.Channels          = new[] { channel };
            requestState.ResponseType      = PNOperationType.PNSignalOperation;
            requestState.Reconnect         = false;
            requestState.EndPointOperation = this;

            Tuple <string, PNStatus> JsonAndStatusTuple = await UrlProcessRequest(request, requestState, false).ConfigureAwait(false);

            ret.Status = JsonAndStatusTuple.Item2;
            string json = JsonAndStatusTuple.Item1;

            if (!string.IsNullOrEmpty(json))
            {
                List <object> result = ProcessJsonResponse <PNPublishResult>(requestState, json);
                if (result != null && result.Count >= 3)
                {
                    int publishStatus;
                    Int32.TryParse(result[0].ToString(), out publishStatus);
                    if (publishStatus == 1)
                    {
                        List <object> resultList = ProcessJsonResponse(requestState, json);
                        if (resultList != null && resultList.Count > 0)
                        {
                            ResponseBuilder responseBuilder = new ResponseBuilder(config, jsonLibrary, pubnubLog);
                            PNPublishResult responseResult  = responseBuilder.JsonToObject <PNPublishResult>(resultList, true);
                            if (responseResult != null)
                            {
                                ret.Result = responseResult;
                            }
                        }
                        else
                        {
                            PNStatusCategory category = PNStatusCategoryHelper.GetPNStatusCategory(400, result[1].ToString());
                            PNStatus         status   = new StatusBuilder(config, jsonLibrary).CreateStatusResponse <PNPublishResult>(PNOperationType.PNSignalOperation, category, requestState, 400, new PNException(json));
                            ret.Status = status;
                            ret.Result = default(PNPublishResult);
                        }
                    }
                }
            }

            return(ret);
        }
예제 #26
0
        private void Fire(string channel, object message, bool storeInHistory, int ttl, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam, PNCallback <PNPublishResult> callback)
        {
            if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null)
            {
                PNStatus status = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message"))
                };
                callback.OnResponse(null, status);
                return;
            }

            if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0)
            {
                PNStatus status = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Invalid publish key", new ArgumentException("Invalid publish key"))
                };
                callback.OnResponse(null, status);
                return;
            }

            if (callback == null)
            {
                return;
            }

            Dictionary <string, string> urlParam = new Dictionary <string, string>();

            urlParam.Add("norep", "true");

            string             requestMethodName = (this.httpPost) ? "POST" : "GET";
            IUrlRequestBuilder urlBuilder        = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : "");

            Uri request = urlBuilder.BuildPublishRequest(requestMethodName, "", channel, message, storeInHistory, ttl, metaData, urlParam, externalQueryParam);

            RequestState <PNPublishResult> requestState = new RequestState <PNPublishResult>();

            requestState.Channels          = new [] { channel };
            requestState.ResponseType      = PNOperationType.PNFireOperation;
            requestState.PubnubCallback    = callback;
            requestState.Reconnect         = false;
            requestState.EndPointOperation = this;

            string json = "";

            if (this.httpPost)
            {
                requestState.UsePostMethod = true;
                Dictionary <string, object> messageEnvelope = new Dictionary <string, object>();
                messageEnvelope.Add("message", message);
                string postMessage = jsonLibrary.SerializeToJsonString(messageEnvelope);
                UrlProcessRequest(request, requestState, false, postMessage).ContinueWith(r =>
                {
                    json = r.Result.Item1;
                }, TaskContinuationOptions.ExecuteSynchronously).Wait();
            }
            else
            {
                UrlProcessRequest(request, requestState, false).ContinueWith(r =>
                {
                    json = r.Result.Item1;
                }, TaskContinuationOptions.ExecuteSynchronously).Wait();
            }

            if (!string.IsNullOrEmpty(json))
            {
                List <object> result = ProcessJsonResponse <PNPublishResult>(requestState, json);
                if (result != null && result.Count >= 3)
                {
                    int publishStatus;
                    Int32.TryParse(result[0].ToString(), out publishStatus);
                    if (publishStatus == 1)
                    {
                        ProcessResponseCallbacks(result, requestState);
                    }
                    else
                    {
                        PNStatusCategory category = PNStatusCategoryHelper.GetPNStatusCategory(400, result[1].ToString());
                        PNStatus         status   = new StatusBuilder(config, jsonLibrary).CreateStatusResponse <PNPublishResult>(PNOperationType.PNFireOperation, category, requestState, 400, new PNException(json));
                        if (requestState.PubnubCallback != null)
                        {
                            requestState.PubnubCallback.OnResponse(default(PNPublishResult), status);
                        }
                    }
                }
                else
                {
                    ProcessResponseCallbacks(result, requestState);
                }
            }
        }
 public StatusBuilderDirector(StatusBuilder builder)
 {
     this.builder = builder;
 }
예제 #28
0
        internal void SetUserState(string[] channels, string[] channelGroups, string uuid, string jsonUserState, PNCallback <PNSetStateResult> callback)
        {
            if ((channels == null && channelGroups == null) ||
                (channels != null && channelGroups != null && channels.Length == 0 && channelGroups.Length == 0))
            {
                throw new ArgumentException("Either Channel Or Channel Group or Both should be provided");
            }

            if (string.IsNullOrEmpty(jsonUserState) || string.IsNullOrEmpty(jsonUserState.Trim()))
            {
                throw new ArgumentException("Missing User State");
            }

            List <string> channelList      = new List <string>();
            List <string> channelGroupList = new List <string>();

            if (channels != null && channels.Length > 0)
            {
                channelList = new List <string>(channels);
                channelList = channelList.Where(ch => !string.IsNullOrEmpty(ch) && ch.Trim().Length > 0).Distinct <string>().ToList();
                channels    = channelList.ToArray();
            }

            if (channelGroups != null && channelGroups.Length > 0)
            {
                channelGroupList = new List <string>(channelGroups);
                channelGroupList = channelGroupList.Where(cg => !string.IsNullOrEmpty(cg) && cg.Trim().Length > 0).Distinct <string>().ToList();
                channelGroups    = channelGroupList.ToArray();
            }

            string commaDelimitedChannel      = (channels != null && channels.Length > 0) ? string.Join(",", channels.OrderBy(x => x).ToArray()) : "";
            string commaDelimitedChannelGroup = (channelGroups != null && channelGroups.Length > 0) ? string.Join(",", channelGroups.OrderBy(x => x).ToArray()) : "";

            if (!jsonLibrary.IsDictionaryCompatible(jsonUserState))
            {
                throw new MissingMemberException("Missing json format for user state");
            }
            else
            {
                Dictionary <string, object> deserializeUserState = jsonLibrary.DeserializeToDictionaryOfObject(jsonUserState);
                if (deserializeUserState == null)
                {
                    throw new MissingMemberException("Missing json format user state");
                }
                else
                {
                    bool stateChanged = false;

                    for (int channelIndex = 0; channelIndex < channelList.Count; channelIndex++)
                    {
                        string currentChannel = channelList[channelIndex];

                        string oldJsonChannelState = GetLocalUserState(currentChannel, "");

                        if (oldJsonChannelState != jsonUserState)
                        {
                            stateChanged = true;
                            break;
                        }
                    }

                    if (!stateChanged)
                    {
                        for (int channelGroupIndex = 0; channelGroupIndex < channelGroupList.Count; channelGroupIndex++)
                        {
                            string currentChannelGroup = channelGroupList[channelGroupIndex];

                            string oldJsonChannelGroupState = GetLocalUserState("", currentChannelGroup);

                            if (oldJsonChannelGroupState != jsonUserState)
                            {
                                stateChanged = true;
                                break;
                            }
                        }
                    }

                    if (!stateChanged)
                    {
                        StatusBuilder statusBuilder = new StatusBuilder(config, jsonLibrary);
                        PNStatus      status        = statusBuilder.CreateStatusResponse <PNSetStateResult>(PNOperationType.PNSetStateOperation, PNStatusCategory.PNUnknownCategory, null, (int)System.Net.HttpStatusCode.NotModified, null);

                        Announce(status);
                        return;
                    }
                }
            }

            SharedSetUserState(channels, channelGroups, uuid, jsonUserState, jsonUserState, callback);
        }
예제 #29
0
        internal void SetUserState(string[] channels, string[] channelGroups, string uuid, KeyValuePair <string, object> keyValuePair, PNCallback <PNSetStateResult> callback)
        {
            if ((channels == null && channelGroups != null) || (channels.Length == 0 && channelGroups.Length == 0))
            {
                throw new ArgumentException("Either Channel Or Channel Group or Both should be provided.");
            }

            List <string> channelList      = new List <string>();
            List <string> channelGroupList = new List <string>();

            if (channels != null && channels.Length > 0)
            {
                channelList = new List <string>(channels);
                channelList = channelList.Where(ch => !string.IsNullOrEmpty(ch) && ch.Trim().Length > 0).Distinct <string>().ToList();
                channels    = channelList.ToArray();
            }

            if (channelGroups != null && channelGroups.Length > 0)
            {
                channelGroupList = new List <string>(channelGroups);
                channelGroupList = channelGroupList.Where(cg => !string.IsNullOrEmpty(cg) && cg.Trim().Length > 0).Distinct <string>().ToList();
                channelGroups    = channelGroupList.ToArray();
            }

            string commaDelimitedChannel      = (channels != null && channels.Length > 0) ? string.Join(",", channels.OrderBy(x => x).ToArray()) : "";
            string commaDelimitedChannelGroup = (channelGroups != null && channelGroups.Length > 0) ? string.Join(",", channelGroups.OrderBy(x => x).ToArray()) : "";

            string key = keyValuePair.Key;

            int    valueInt;
            double valueDouble;
            bool   stateChanged                 = false;
            string currentChannelUserState      = "";
            string currentChannelGroupUserState = "";

            for (int channelIndex = 0; channelIndex < channelList.Count; channelIndex++)
            {
                string currentChannel = channelList[channelIndex];

                string oldJsonChannelState = GetLocalUserState(currentChannel, "");
                currentChannelUserState = "";

                if (keyValuePair.Value == null)
                {
                    currentChannelUserState = SetLocalUserState(currentChannel, "", key, null);
                }
                else if (Int32.TryParse(keyValuePair.Value.ToString(), out valueInt))
                {
                    currentChannelUserState = SetLocalUserState(currentChannel, "", key, valueInt);
                }
                else if (Double.TryParse(keyValuePair.Value.ToString(), out valueDouble))
                {
                    currentChannelUserState = SetLocalUserState(currentChannel, "", key, valueDouble);
                }
                else
                {
                    currentChannelUserState = SetLocalUserState(currentChannel, "", key, keyValuePair.Value.ToString());
                }
                if (oldJsonChannelState != currentChannelUserState)
                {
                    stateChanged = true;
                    break;
                }
            }

            if (!stateChanged)
            {
                for (int channelGroupIndex = 0; channelGroupIndex < channelGroupList.Count; channelGroupIndex++)
                {
                    string currentChannelGroup = channelGroupList[channelGroupIndex];

                    string oldJsonChannelGroupState = GetLocalUserState("", currentChannelGroup);
                    currentChannelGroupUserState = "";

                    if (keyValuePair.Value == null)
                    {
                        currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, null);
                    }
                    else if (Int32.TryParse(keyValuePair.Value.ToString(), out valueInt))
                    {
                        currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, valueInt);
                    }
                    else if (Double.TryParse(keyValuePair.Value.ToString(), out valueDouble))
                    {
                        currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, valueDouble);
                    }
                    else
                    {
                        currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, keyValuePair.Value.ToString());
                    }

                    if (oldJsonChannelGroupState != currentChannelGroupUserState)
                    {
                        stateChanged = true;
                        break;
                    }
                }
            }


            if (!stateChanged)
            {
                StatusBuilder statusBuilder = new StatusBuilder(config, jsonLibrary);
                PNStatus      status        = statusBuilder.CreateStatusResponse <PNSetStateResult>(PNOperationType.PNSetStateOperation, PNStatusCategory.PNUnknownCategory, null, (int)System.Net.HttpStatusCode.NotModified, null);

                Announce(status);
                return;
            }

            if (currentChannelUserState.Trim() == "")
            {
                currentChannelUserState = "{}";
            }
            if (currentChannelGroupUserState == "")
            {
                currentChannelGroupUserState = "{}";
            }

            SharedSetUserState(channels, channelGroups, uuid, currentChannelUserState, currentChannelGroupUserState, callback);
        }
예제 #30
0
        public Program()
        {
            Runtime.UpdateFrequency = UpdateFrequency.Update100;

            GridTerminalSystem.GetBlocksOfType <IMyTerminalBlock>(null, CollectParts);

            StatusBuilder.Clear();
            var AOK = true;

            if (SmallHinge == null)
            {
                AOK = false;
                StatusBuilder.AppendLine("SMALL HINGE NOT FOUND!");
            }
            if (LargeHinge == null)
            {
                AOK = false;
                StatusBuilder.AppendLine("LARGE HINGE NOT FOUND!");
            }
            if (Sweeper == null)
            {
                AOK = false;
                StatusBuilder.AppendLine("SWEEPER NOT FOUND!");
            }
            if (BaseProjector == null)
            {
                AOK = false;
                StatusBuilder.AppendLine("BASE PROJECTOR NOT FOUND!");
            }
            if (TopProjector == null)
            {
                AOK = false;
                StatusBuilder.AppendLine("TOP PROJECTOR NOT FOUND!");
            }
            if (TopMerge == null)
            {
                AOK = false;
                StatusBuilder.AppendLine("TOP MERGE NOT FOUND!");
            }
            if (BaseMerge == null)
            {
                AOK = false;
                StatusBuilder.AppendLine("BASE MERGE NOT FOUND!");
            }

            if (Welders.Count < 5)
            {
                AOK = false;
                StatusBuilder.AppendLine("NOT ENOUGH WELDERS!");
            }

            if (Display != null)
            {
                Display.ContentType = ContentType.TEXT_AND_IMAGE;
                Display.WriteText(StatusBuilder.ToString());
            }

            if (!AOK)
            {
                Echo(StatusBuilder.ToString());
                Runtime.UpdateFrequency = UpdateFrequency.None;
            }
            else
            {
                var baseOtherMerge = GridTerminalHelper.OtherMergeBlock(BaseMerge);
                var topOtherMerge  = GridTerminalHelper.OtherMergeBlock(TopMerge);
                if (topOtherMerge != null && baseOtherMerge == null)
                {
                    State = 4;
                }
            }

            ReleaseListener = IGC.RegisterBroadcastListener("[PDCFORGE]");
            ReleaseListener.SetMessageCallback("release");
        }