public ServiceResult <string> SecondStepLogin(MembershipAuthenticationBindingModel model)
 {
     return(new ServiceResult <string>(StatusCode.Ok)
     {
         Data = "MockData"
     });
 }
        public ServiceResult <string> SecondStepLogin(MembershipAuthenticationBindingModel model)
        {
            IRestRequest LoginRequest = new RestRequest("api/Authentication", method: Method.PATCH);

            LoginRequest.AddJsonBody(model);

            IRestResponse <ServiceResult <string> > Result = RestProvider.GetInstance().Patch <ServiceResult <string> >(LoginRequest);

            if (Result != null)
            {
                RestProvider.Renew().AddDefaultHeader("Authorization", Result.Data.Data);
                return(Result.Data);
            }

            throw new Exception();
        }
 public ServiceResult <string> Patch(MembershipAuthenticationBindingModel request)
 {
     return(_authenticationCommand.SecondStepLogin(request));
 }
        public ServiceResult <string> SecondStepLogin(MembershipAuthenticationBindingModel model)
        {
            var UserId = base.AuthenticationInformation.UserId;

            if (!UserId.HasValue)
            {
                return new ServiceResult <string>()
                       {
                           Message    = new InvalidTokenMessage(),
                           StatusCode = StatusCode.Forbidden
                       }
            }
            ;

            var User = _userRepository.GetMany(P => P.Id == UserId).FirstOrDefault();

            if (User == null)
            {
                return new ServiceResult <string>()
                       {
                           Message    = new InvalidTokenMessage(),
                           StatusCode = StatusCode.NotFound
                       }
            }
            ;

            RoleEnum Role;
            var      RoleConversionResult = Enum.TryParse <RoleEnum>(model.Role, true, out Role);

            if (!RoleConversionResult)
            {
                return new ServiceResult <string>()
                       {
                           Message    = new InvalidRoleMessage(),
                           StatusCode = StatusCode.BadRequest
                       }
            }
            ;

            string Token = "";

            switch (Role)
            {
            case RoleEnum.SuperAdmin:
                SuperAdminMembership SuperAdminMembership = _superAdminMembershipRepository.GetMany(P => P.OrganizationId == model.OrganizationId && P.SuperAdmin.Role.UserId == UserId).FirstOrDefault();

                if (SuperAdminMembership == null)
                {
                    return new ServiceResult <string>()
                           {
                               Message    = new MembershipNotFoundMessage(),
                               StatusCode = StatusCode.NotFound
                           }
                }
                ;

                Token = _jsonWebTokenEngine.GenerateToken(UserId.Value, User.Username, model.OrganizationId, SuperAdminMembership.Organization.Title, Role.ToString("g"));
                break;

            case RoleEnum.Admin:
                AdminMembership AdminMembership = _adminMembershipRepository.GetMany(P => P.OrganizationId == model.OrganizationId && P.Admin.Role.UserId == UserId).FirstOrDefault();
                if (AdminMembership == null)
                {
                    return new ServiceResult <string>()
                           {
                               Message    = new MembershipNotFoundMessage(),
                               StatusCode = StatusCode.NotFound
                           }
                }
                ;

                Token = _jsonWebTokenEngine.GenerateToken(UserId.Value, User.Username, model.OrganizationId, AdminMembership.Organization.Title, Role.ToString("g"));
                break;

            case RoleEnum.Secretary:
                SecretaryMembership SecretaryMembership = _secretaryMembershipRepository.GetMany(P => P.OrganizationId == model.OrganizationId && P.Secretary.Role.UserId == UserId).FirstOrDefault();
                if (SecretaryMembership == null)
                {
                    return new ServiceResult <string>()
                           {
                               Message    = new MembershipNotFoundMessage(),
                               StatusCode = StatusCode.NotFound
                           }
                }
                ;

                Token = _jsonWebTokenEngine.GenerateToken(UserId.Value, User.Username, model.OrganizationId, SecretaryMembership.Organization.Title, Role.ToString("g"));
                break;

            case RoleEnum.Collector:
                CollectorMembership CollectorMembership = _collectorMembershipRepository.GetMany(P => P.OrganizationId == model.OrganizationId && P.Collector.Role.UserId == UserId).FirstOrDefault();
                if (CollectorMembership == null)
                {
                    return new ServiceResult <string>()
                           {
                               Message    = new MembershipNotFoundMessage(),
                               StatusCode = StatusCode.NotFound
                           }
                }
                ;

                Token = _jsonWebTokenEngine.GenerateToken(UserId.Value, User.Username, model.OrganizationId, CollectorMembership.Organization.Title, Role.ToString("g"));
                break;

            case RoleEnum.Delivery:
                DeliveryMembership DeliveryMembership = _deliveryMembershipRepository.GetMany(P => P.OrganizationId == model.OrganizationId && P.Delivery.Role.UserId == UserId).FirstOrDefault();
                if (DeliveryMembership == null)
                {
                    return new ServiceResult <string>()
                           {
                               Message    = new MembershipNotFoundMessage(),
                               StatusCode = StatusCode.NotFound
                           }
                }
                ;

                Token = _jsonWebTokenEngine.GenerateToken(UserId.Value, User.Username, model.OrganizationId, DeliveryMembership.Organization.Title, Role.ToString("g"));
                break;

            case RoleEnum.Customer:
                CustomerMembership CustomerMembership = _customerMembershipRepository.GetMany(P => P.OrganizationId == model.OrganizationId && P.Customer.Role.UserId == UserId).FirstOrDefault();
                if (CustomerMembership == null)
                {
                    return new ServiceResult <string>()
                           {
                               Message    = new MembershipNotFoundMessage(),
                               StatusCode = StatusCode.NotFound
                           }
                }
                ;

                Token = _jsonWebTokenEngine.GenerateToken(UserId.Value, User.Username, model.OrganizationId, CustomerMembership.Organization.Title, Role.ToString("g"));
                break;

            default:
                break;
            }

            return(new ServiceResult <string>(Token));
        }
    }
}