public async Task <SecurityResponse> Reset(string emailOrUsername)
        {
            var resp = new SecurityResponse
            {
                ResponseCode = ResponseCode.Fail
            };

            Dal.Models.Identity.ApplicationUser user;

            if (emailOrUsername.Contains("@")) // find via email
            {
                user = await _userManager.FindByEmailAsync(emailOrUsername);
            }
            else // find via username
            {
                user = await _userManager.FindByNameAsync(emailOrUsername);
            }

            if (user == null)
            {
                resp.ResponseMessage = ErrorMessage.UserNotFound;
                return(resp);
            }

            await _emailService.SendEmailAsync(user.Email, "reminder", "reminder_link");

            //log user password reset request
            _logService.LogInfo(LogType.Modify, user.UserName, string.Format("User {0} has requested a password reset.", user.Id));

            resp.ResponseCode = ResponseCode.Success;

            return(resp);
        }
Beispiel #2
0
        public SecurityResponse GetToken()
        {
            var requestSecurity  = new SecurityRequest();
            var responseSecurity = new SecurityResponse();

            requestSecurity.email      = _username;
            requestSecurity.passphrase = _password;

            try
            {
                // Get the token for use the Integration API
                using (HttpClient apiRequest = new HttpClient())
                {
                    apiRequest.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    // No specific resource needs to be set
                    Task <HttpResponseMessage> response = apiRequest.PostAsync(_securityUrl, new StringContent(JsonConvert.SerializeObject(requestSecurity), Encoding.UTF8, "application/json"));

                    // If response is Ok, set the authorization transaction
                    if (response.Result.IsSuccessStatusCode)
                    {
                        responseSecurity = JsonConvert.DeserializeObject <SecurityResponse>(response.Result.Content.ReadAsStringAsync().Result);
                    }
                }
            }
            catch (Exception exp)
            {
                //Logger
            }

            return(responseSecurity);
        }
        public async void LogIn_Should_Return_Correctly()
        {
            var expected = new SecurityResponse();

            _provider.SignIn(Arg.Any <SecurityRequest>()).Returns(expected);

            var actual = await _service.LogIn(new SecurityRequest());

            actual.Should().BeEquivalentTo(expected);
        }
        public async Task <SecurityResponse <string> > GetToken(ApplicationUser userDto, string password)
        {
            var resp = new SecurityResponse <string>
            {
                ResponseCode = ResponseCode.Fail
            };

            Dal.Models.Identity.ApplicationUser user;

            if (userDto.UserName.Contains("@")) // login via email
            {
                user = await _userManager.FindByEmailAsync(userDto.Email);
            }
            else // login via username
            {
                user = await _userManager.FindByNameAsync(userDto.UserName);
            }

            if (user == null)
            {
                resp.ResponseMessage = ErrorMessage.UserNotFound;
                return(resp);
            }

            var isPasswordValid = await _userManager.CheckPasswordAsync(user, password);

            if (!isPasswordValid)
            {
                resp.ResponseMessage = ErrorMessage.UserNotFound;
                return(resp);
            }

            //todo: get claims async
            //todo: get roles async

            userDto.Email = user.Email;
            userDto.Id    = user.Id;

            var token = GenerateToken(userDto);

            //log token generation
            _logService.LogInfo(LogType.Create, userDto.UserName, string.Format("User {0} generated new token", userDto.Id));

            resp.ResponseData = token;
            resp.ResponseCode = ResponseCode.Success;

            return(resp);
        }
        public async void SignUp_Should_Return_Correctly()
        {
            var request = new HttpRequestMessage();

            _requestProvider.CreatePostRequest(Arg.Any <string>(), Arg.Any <JObject>(), Arg.Any <Dictionary <string, string> >(), Arg.Any <Dictionary <string, string> >(), Arg.Any <Func <JObject, HttpContent> >()).Returns(request);

            var response = new SecurityResponse();

            _apiClient.Send <SecurityResponse>(Arg.Any <HttpRequestMessage>()).Returns(response);

            var actual = await _provider.SignUp(new SecurityRequest { Email = "email", Password = "******" });

            actual.Should().BeSameAs(response);

            request.Dispose();
        }
        public async Task <SecurityResponse> Register(ApplicationUser userDto, string password)
        {
            var resp = new SecurityResponse {
                ResponseCode = ResponseCode.Fail
            };

            var userByName = await _userManager.FindByNameAsync(userDto.UserName);

            if (userByName != null)
            {
                resp.ResponseMessage = ErrorMessage.UserExists;
                return(resp);
            }

            var userByEmail = await _userManager.FindByEmailAsync(userDto.Email);

            if (userByEmail != null)
            {
                resp.ResponseMessage = ErrorMessage.UserExists;
                return(resp);
            }

            var userModel = new Dal.Models.Identity.ApplicationUser
            {
                //CreatedAt = DateTime.UtcNow,
                //NameSurname = userDto.NameSurname,
                Email          = userDto.Email ?? "",
                EmailConfirmed = userDto.EmailConfirmed,
                UserName       = userDto.UserName,
                //Status = userDto.Status,
                //ImageName = userDto.ImageName,
                PasswordHash  = HashPassword(password),
                SecurityStamp = Guid.NewGuid().ToString()
            };

            await _userManager.CreateAsync(userModel);

            userDto.Id = userModel.Id;

            //log user registration
            _logService.LogInfo(LogType.Create, userDto.UserName, string.Format("New user {0} has registered.", userDto.Id));


            resp.ResponseCode = ResponseCode.Success;

            return(resp);
        }
        public async void Register_Should_Return_Correctly()
        {
            var response = new SecurityResponse();
            var service  = Substitute.For <ISecurityService>();

            service.Register(Arg.Any <SecurityRequest>()).Returns(response);

            var actual = await _controller.Register(new SecurityRequest(), service);

            actual.Should().BeOfType <ActionResult <ApiResponse> >();

            actual.Result.Should().BeOfType <ObjectResult>();
            actual.Result.As <ObjectResult>().StatusCode.Should().Be(StatusCodes.Status201Created);

            actual.Result.As <ObjectResult>().Value.Should().BeOfType <ApiResponse>();
            actual.Result.As <ObjectResult>().Value.As <ApiResponse>().Success.Should().Be(true);
            actual.Result.As <ObjectResult>().Value.As <ApiResponse>().Message.Should().Be("User created.");
            actual.Result.As <ObjectResult>().Value.As <ApiResponse>().Data.Should().Be(response);
        }
        public SecurityResponse Build()
        {
            var securityResponse = new SecurityResponse();

            if (this.securityRequest.AccessControls != null)
            {
                var accessControlIds = this.securityRequest.AccessControls;
                var accessControls   = this.session.Instantiate(accessControlIds).Cast <AccessControl>().ToArray();

                this.session.Prefetch(AccessControlPrefetchPolicy, accessControls);

                securityResponse.AccessControls = accessControls
                                                  .Select(v => new SecurityResponseAccessControl
                {
                    I = v.Strategy.ObjectId.ToString(),
                    V = v.Strategy.ObjectVersion.ToString(),
                    P = v.EffectiveWorkspacePermissions.Select(w => w.Id.ToString()).ToArray(),
                }).ToArray();
            }

            if (this.securityRequest.Permissions.Length > 0)
            {
                var permissionIds = this.securityRequest.Permissions;
                var permissions   = this.session.Instantiate(permissionIds)
                                    .Cast <Permission>()
                                    .Where(v => v.OperandType.Workspace);

                securityResponse.Permissions = permissions.Select(v =>
                                                                  new[]
                {
                    v.Strategy.ObjectId.ToString(),
                    v.ConcreteClassPointer.ToString("D"),
                    v.OperandTypePointer.ToString("D"),
                    v.OperationEnum.ToString(),
                }).ToArray();
            }

            return(securityResponse);
        }
    public SecurityResponse respondSecurity()
    {
        SecurityResponse result = null;

        SecurityMeasure tmp = null;

        //allow 5 seconds to wait for the responsce
        int dcnt = 70;
        while (dcnt > 0)
        {
            //see if we have a nessage yet
            lock (emReplyMessageLock)
            {
                if (emReplyMessage != null)
                {
                    //have a response but nothing returned
                    if (emReplyMessage.CalulateSecurities == null)
                    {
                        result = new SecurityResponse();
                        result.ErrorCode = ERRORCODES.None;
                        result.Status = TASKSTATUS.Complete;
                        tmp = new SecurityMeasure() { SecurityDescription = "NA" };
                        result.Data = new List<SecurityMeasure>();
                        result.Data.Add(tmp);
                    }

                    //else we have something
                    else
                    {
                        result = new SecurityResponse();
                        
                        result.ErrorCode = ERRORCODES.None;
                        result.Status = TASKSTATUS.Complete;
                        OpenAPIToServiceBus.MessageTranslators.messageBusToSecurityResponse(result, emReplyMessage);
                    }
                    return result;
                }

            }

            //else sleep a bit and try agaon
            Thread.Sleep(100);
            dcnt--;
        }


        result = new SecurityResponse();
        result.ErrorCode = ERRORCODES.Error;
        result.Status = TASKSTATUS.CompleteWithError;
        tmp = new SecurityMeasure() { SecurityDescription = "NA" };
        result.Data = new List<SecurityMeasure>();
        result.Data.Add(tmp);
        return result;
    }
Beispiel #10
0
        public SecurityRequest Security(SecurityResponse securityResponse)
        {
            if (securityResponse.permissions != null)
            {
                foreach (var syncResponsePermission in securityResponse.permissions)
                {
                    var id          = long.Parse(syncResponsePermission[0]);
                    var @class      = (IClass)this.ObjectFactory.MetaPopulation.Find(Guid.Parse(syncResponsePermission[1]));
                    var operandType = (IOperandType)this.ObjectFactory.MetaPopulation.Find(Guid.Parse(syncResponsePermission[2]));
                    Enum.TryParse(syncResponsePermission[3], out Operations operation);

                    var permission = new Permission(id, @class, operandType, operation);
                    this.PermissionById[id] = permission;

                    switch (operation)
                    {
                    case Operations.Read:
                        if (!this.readPermissionByOperandTypeByClass.TryGetValue(@class,
                                                                                 out var readPermissionByOperandType))
                        {
                            readPermissionByOperandType = new Dictionary <IOperandType, Permission>();
                            this.readPermissionByOperandTypeByClass[@class] = readPermissionByOperandType;
                        }

                        readPermissionByOperandType[operandType] = permission;

                        break;

                    case Operations.Write:
                        if (!this.writePermissionByOperandTypeByClass.TryGetValue(@class,
                                                                                  out var writePermissionByOperandType))
                        {
                            writePermissionByOperandType = new Dictionary <IOperandType, Permission>();
                            this.writePermissionByOperandTypeByClass[@class] = writePermissionByOperandType;
                        }

                        writePermissionByOperandType[operandType] = permission;

                        break;

                    case Operations.Execute:
                        if (!this.executePermissionByOperandTypeByClass.TryGetValue(@class,
                                                                                    out var executePermissionByOperandType))
                        {
                            executePermissionByOperandType = new Dictionary <IOperandType, Permission>();
                            this.executePermissionByOperandTypeByClass[@class] = executePermissionByOperandType;
                        }

                        executePermissionByOperandType[operandType] = permission;

                        break;
                    }
                }
            }

            HashSet <long> missingPermissionIds = null;

            if (securityResponse.accessControls != null)
            {
                foreach (var syncResponseAccessControl in securityResponse.accessControls)
                {
                    var id             = long.Parse(syncResponseAccessControl.i);
                    var version        = long.Parse(syncResponseAccessControl.v);
                    var permissionsIds = !string.IsNullOrWhiteSpace(syncResponseAccessControl.p) ? syncResponseAccessControl.p
                                         ?.Split(',')
                                         .Select(v =>
                    {
                        var permissionId = long.Parse(v);
                        if (!this.PermissionById.ContainsKey(permissionId))
                        {
                            missingPermissionIds ??= new HashSet <long>();
                            missingPermissionIds.Add(permissionId);
                        }

                        return(permissionId);
                    }) ?? Array.Empty <long>() : Array.Empty <long>();

                    var accessControl = new AccessControl(id, version, new HashSet <long>(permissionsIds));
                    this.AccessControlById[id] = accessControl;
                }
            }

            if (missingPermissionIds != null)
            {
                return(new SecurityRequest
                {
                    permissions = missingPermissionIds.Select(v => v.ToString()).ToArray(),
                });
            }

            return(null);
        }
 public SecurityResponse GetSecurity([FromBody]SecurityRequest security)
 {
     SecurityResponse tmp = new SecurityResponse();
     tmp.SetUser("kyu");
     return tmp;
 }
Beispiel #12
0
        public async Task <SecurityResponse> PostBuySell(SecurityRequest securityRequest, IConfiguration configuration, ILogger logger)
        {
            string productCode  = "FSOP";
            string buyLeg       = "BB";
            string sellLeg      = "CS";
            string prdCode      = "FSOP";
            string portfolio    = "";
            string skLoc        = "";
            string skAcc        = "";
            string LgPrdCode    = "FCSE";
            string cpty         = "";
            string cptyFrom     = securityRequest.CustomerId;
            string eventCode    = "BOOK";
            string LgPrdCodeTo  = "FBUY";
            string accomLodge   = "Y";
            string skLocTo      = "CBN";
            string skAccTo      = "1216600";
            string portfolioTo  = securityRequest.PortfolioId;
            string acmpWdrw     = "N";
            string securityType = "Z";

            if (securityRequest.TransactionType.ToUpper() == "SELL")
            {
                productCode = "FSOS";
                buyLeg      = "CB";
                sellLeg     = "BS";
                prdCode     = "FSOS";
                portfolio   = securityRequest.PortfolioId;
                cptyFrom    = null;
                skLoc       = "CBN";
                skAcc       = "1216600";
                LgPrdCode   = "FSEL";
                LgPrdCodeTo = "FCBY";
                cpty        = securityRequest.CustomerId;
                eventCode   = "MSTL";
                accomLodge  = null;
                skLocTo     = null;
                skAccTo     = null;
                portfolioTo = null;
                acmpWdrw    = "Y";
            }
            if (securityRequest.SecurityType == "BOND")
            {
                securityType = "B";
            }
            SecurityResponse response = new SecurityResponse();

            var SecuritiesDeal = new CREATESECURITIESDEAL_FSFS_REQ()
            {
                FCUBS_HEADER = new FCUBS_HEADERType
                {
                    SOURCE    = "TMSSOURCE",
                    UBSCOMP   = UBSCOMPType.FCUBS,
                    USERID    = securityRequest.UserId,
                    ENTITY    = "ENTITY_ID1",
                    BRANCH    = "000",
                    SERVICE   = "FCUBSSecuritiesService",
                    OPERATION = "CreateSecuritiesDeal",
                },
                FCUBS_BODY = new CREATESECURITIESDEAL_FSFS_REQFCUBS_BODY
                {
                    DealmasterFull = new SecuritiesDealFullType
                    {
                        FACEDEAL           = securityRequest.FaceValue,
                        TRADEDT            = new DateTime(2020, 05, 29),//change to take todays date during GO-LIVE
                        AUTOMANDSTL        = "A",
                        DSTLCOMPLETED      = "N",
                        SE_TXNDATE         = new DateTime(2020, 05, 29), //change to take todays date during GO-LIVE
                        SPOTPRCQT          = "PRI",                      //get this value from the appsetting.json file,
                        SECSTTLMENT        = "CBN",                      // get this value from appsetting.json file
                        ISMAIND            = "N",
                        LIMITSTRACKINGREQD = "N",
                        UNITS                   = securityRequest.FaceValue,
                        EXERCISEFLAG            = "N",
                        DLVRFREEPAY             = "F",
                        RECVFREEPAY             = "F",
                        REMARKS                 = securityRequest.Narration,
                        PRD                     = productCode,
                        BRN                     = "000",
                        BUYLEG                  = buyLeg,
                        SELLLEG                 = sellLeg,
                        VERSION                 = 1,
                        VERSIONSpecified        = true,
                        SECTYCD                 = securityRequest.SecurityCode,
                        SECURITYTYPE            = securityType, //B for bond and Z for TBills
                        DCONREQUIRED            = "Y",
                        MKTCD                   = "FMDA",       //get this value from the appsetting.json file
                        MATURITY_DATE           = new DateTime(2020, 10, 22),
                        DSTLDATE                = new DateTime(2020, 05, 29),
                        DSTLDATESpecified       = true,
                        DEALTYPE                = "S",
                        DEALTYP                 = "S",
                        QUOTEBY                 = "N",
                        DEAL_QUANTITY           = securityRequest.FaceValue,
                        FACEVALPERUNITSpecified = true,
                        PRCQUOTE                = "PRI",//get this value from the appsetting.json file
                        INPUTPRC                = securityRequest.Rate,
                        PAYCCY                  = securityRequest.Currency,
                        RATEPCYSCY              = 1,
                        RATEPCYSCYSpecified     = true,
                        SCCY                    = securityRequest.Currency,
                        LATVERNO                = "1",
                        FTYPE                   = "D",
                        Detalfrom               = new SecuritiesDealFullTypeDetalfrom
                        {
                            BRANCH           = "000",
                            LGPRDCODE        = LgPrdCode,
                            EVENTCODE        = "BOOK",
                            AUTOMSTL         = "A",
                            MSTLCOMPLETED    = "N",
                            PORTFOLIO        = portfolio,
                            CPTY             = cptyFrom,
                            PCY              = securityRequest.Currency,
                            ACCOMLODGE       = accomLodge,
                            PAYBRN           = securityRequest.BranchCode,
                            PAYACC           = securityRequest.AccountNumber,
                            SKLOC            = skLoc,
                            SKACC            = skAcc,
                            FRMTYPFROM       = "D",
                            BRKPKPDONE       = "N",
                            CHARGEPKPDONE    = "N",
                            INTREFERDONE     = "N",
                            SETTLEPICKUPDONE = "Y"
                        },
                        Detalto = new SecuritiesDealFullTypeDetalto
                        {
                            BRANCH           = "000",
                            LGPRDCODE        = LgPrdCodeTo,
                            VERSION          = 1,
                            VERSIONSpecified = true,
                            EVENTCODE        = eventCode,
                            AUTOMSTL         = "A",
                            MSTLCOMPLETED    = "N",
                            PORTFOLIO        = portfolioTo,
                            CPTY             = cpty,
                            PCY              = securityRequest.Currency,
                            SKLOCTO          = skLocTo,
                            SKACCTO          = skAccTo,
                            ACMP_WDRW        = acmpWdrw,
                            FRMTYPTO         = "D",
                            BRKPKPDONE       = "Y",
                            CHARGEPKPDONE    = "Y",
                            INTREFERDONE     = "Y",
                            SETTLEPICKUPDONE = "Y",
                            TAXPICKUPDONE    = "Y",
                            MISPICKUPDONE    = "Y",
                            PARTYPROCESSED   = "Y",
                            ADVPICKUPDONE    = "Y",
                            NETCONSPROCESSED = "N"
                        },
                        Contract = new SecuritiesDealFullTypeContract
                        {
                            LATVERNO          = 1,
                            LATVERNOSpecified = true,
                            PRDCODE           = prdCode,
                            MDCODE            = "SD",
                            UDSTAT            = "NORM",
                            CONTCCY           = securityRequest.Currency,
                            XREF = GenerateBatchNo(10),
                        }
                    }
                }
            };

            FCUBSSecuritiesServiceSEIClient.EndpointConfiguration config = new FCUBSSecuritiesServiceSEIClient.EndpointConfiguration();
            var client = new FCUBSSecuritiesServiceSEIClient(config);

            try
            {
                var returnValue = await client.CreateSecuritiesDealFSAsync(SecuritiesDeal);

                if (returnValue.CREATESECURITIESDEAL_FSFS_RES != null)
                {
                    if (returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_HEADER.MSGSTAT.ToString().ToLower() == "failure")
                    {
                        if (returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_WARNING_RESP != null)
                        {
                            List <string> warnings = new List <string>();
                            foreach (var item in returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_WARNING_RESP)
                            {
                                warnings.Add($"{item.WCODE} {item.WDESC}");
                            }
                            response.Warnings = warnings;
                        }
                        if (returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_ERROR_RESP != null)
                        {
                            List <String> errors = new List <string>();
                            foreach (var item in returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_ERROR_RESP)
                            {
                                errors.Add($"{item.ECODE} {item.EDESC}");
                            }
                            response.Errors = errors;
                        }
                        response.ResponseCode = 400;
                        response.Message      = "Failure";
                        //logger.Information($"Post securities {ExternalReference} response - {response.ToString()}");
                        return(response);
                    }
                    else
                    {
                        if (returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_HEADER.MSGSTAT.ToString().ToLower() == "success")
                        {
                            if (returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_WARNING_RESP != null)
                            {
                                List <string> warnings = new List <string>();
                                foreach (var item in returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_WARNING_RESP)
                                {
                                    warnings.Add($"{item.WCODE}{item.WDESC}");
                                }
                                response.Warnings = warnings;
                            }
                            if (returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_ERROR_RESP != null)
                            {
                                List <string> errors = new List <string>();
                                foreach (var item in returnValue.CREATESECURITIESDEAL_FSFS_RES.FCUBS_BODY.FCUBS_ERROR_RESP)
                                {
                                    errors.Add($"{item.ECODE} {item.EDESC}");
                                }
                                response.Errors = errors;
                            }
                            response.ResponseCode = 0;
                            response.Message      = "Success";
                            //logger.Information($"Post securities {ExternalReference} response - {response.ToString()}");
                            return(response);
                        }
                    }
                }
                response.Message      = "server error";
                response.ResponseCode = 500;

                return(response);
            }
            catch (Exception)
            {
                throw;
            }
        }