コード例 #1
0
        public PoseCredentials DecryptCredentials()
        {
            if (_eCredentials == null || _eCredentials.Length == 0)
            {
                if (_eSignature != null && _eSignature.Length >= 0 &&
                    _eSignatureIV != null && _eSignatureIV.Length >= 0)
                {
                    byte[] signature   = Singleton.Get <CryptoFacade>().Decrypt_RSA(_eSignature);
                    byte[] signatureIV = Singleton.Get <CryptoFacade>().Decrypt_RSA(_eSignatureIV);
                    SetSignature(signature);
                    SetSignatureIV(signatureIV);
                }
                return(Credentials = PoseCredentials.Default);
            }

            try
            {
                byte[] signature   = Singleton.Get <CryptoFacade>().Decrypt_RSA(_eSignature);
                byte[] signatureIV = Singleton.Get <CryptoFacade>().Decrypt_RSA(_eSignatureIV);
                byte[] credentials = Singleton.Get <CryptoFacade>().Decrypt_RSA(_eCredentials);

                Credentials = PoseCredentials.Deserialize(credentials);
                SetSignature(signature);
                SetSignatureIV(signatureIV);
            }
            catch
            {
                ErrorHandler.OccurException(HttpStatusCode.Unauthorized);
            }

            return(Credentials);
        }
コード例 #2
0
 public static O_Login Execute()
 {
     return(new O_Login
     {
         PoseToken = PoseCredentials.CreateToken(0, ServiceRoleType.Guest),
         TokenExpireIn = PoseCredentials.TOKEN_EXPIRE_IN,
         LastLoginTime = DateTime.MinValue,
         MemberRoleType = MemberRoleType.Guest,
         RoleExpireTime = DateTime.MinValue,
         UserNo = 0,
     });
 }
コード例 #3
0
        public static O_TokenRefresh Execute()
        {
            if (ServerContext.Current.Credentials == PoseCredentials.Default)
            {
                ErrorHandler.OccurException(RowCode.Invalid_Credentials);
            }

            return(new O_TokenRefresh
            {
                PoseToken = PoseCredentials.CreateToken(ServerContext.Current.Credentials.UserNo, ServerContext.Current.Credentials.ServiceRoleType),
                TokenExpireIn = PoseCredentials.TOKEN_EXPIRE_IN,
            });
        }
コード例 #4
0
        public static O_Login Execute(I_Login input)
        {
            if (input == null)
            {
                ErrorHandler.OccurException(RowCode.Invalid_InputValue);
            }

            if (string.IsNullOrEmpty(input.PlatformId))
            {
                ErrorHandler.OccurException(RowCode.Invalid_PlatformId);
            }

            // Check DB
            PoseGlobalDB.Procedures.P_USER_LOGIN.Output db_output;
            using (var P_USER_LOGIN = new PoseGlobalDB.Procedures.P_USER_LOGIN())
            {
                P_USER_LOGIN.SetInput(input.PlatformId);

                db_output = P_USER_LOGIN.OnQuery();

                if (P_USER_LOGIN.EntityStatus != null || db_output == null)
                {
                    ErrorHandler.OccurException(RowCode.DB_Failed_User_Login);
                }
            }

            db_output.RoleType.TryParseEnum(out ServiceRoleType serviceRoleType);
            db_output.RoleType.TryParseEnum(out MemberRoleType memberRoleType);
            return(new O_Login
            {
                PoseToken = PoseCredentials.CreateToken(db_output.UserNo, serviceRoleType),
                TokenExpireIn = PoseCredentials.TOKEN_EXPIRE_IN,
                LastLoginTime = db_output.LastLoginTime,
                MemberRoleType = memberRoleType,
                RoleExpireTime = db_output.RoleExpireTime,
                UserNo = db_output.UserNo,
            });
        }
コード例 #5
0
        public static async Task <O_E_CHECK_MEMBERSHIP_BY_GOOGLE> Execute(I_E_CHECK_MEMBERSHIP_BY_GOOGLE input, long userNo, int serviceRoleType)
        {
            PoseBillingResult billingResult = null;

            ////////////////////////////////////////////////////
            /// 프로모션 유저 만료 처리
            ///////////////////////////////////////////////////
            if (serviceRoleType == (int)ServiceRoleType.Promotion)
            {
                billingResult = new PoseBillingResult()
                {
                    MemberRoleType = MemberRoleType.Regular,
                    RoleExpireTime = DateTime.UtcNow,
                };

                // Update DB
                bool db_output_promo;
                using (var P_UPDATE_USER_ROLE = new PoseGlobalDB.Procedures.P_UPDATE_USER_ROLE())
                {
                    P_UPDATE_USER_ROLE.SetInput(new PoseGlobalDB.Procedures.P_UPDATE_USER_ROLE.Input
                    {
                        UserNo         = userNo,
                        LinkedTransNo  = 0,
                        RoleType       = billingResult.MemberRoleType.ToString(),
                        RoleExpireTime = billingResult.RoleExpireTime,
                        CurrentTime    = DateTime.UtcNow,
                    });

                    db_output_promo = P_UPDATE_USER_ROLE.OnQuery();

                    if (P_UPDATE_USER_ROLE.EntityStatus != null || db_output_promo == false)
                    {
                        ErrorHandler.OccurException(RowCode.DB_User_Role_Update_Failed);
                    }
                }

                // Refrash PoseToken
                billingResult.MemberRoleType.ToString().TryParseEnum(out ServiceRoleType promoServiceRoleType);
                billingResult.PoseToken = PoseCredentials.CreateToken(userNo, promoServiceRoleType);

                return(new O_E_CHECK_MEMBERSHIP_BY_GOOGLE
                {
                    BillingResult = billingResult,
                });
            }

            ////////////////////////////////////////////////////
            /// 결제 유저 멤버십 처리
            ///////////////////////////////////////////////////

            // Check DB
            PoseGlobalDB.Procedures.P_SELECT_LINKED_BILLING.Output db_output;
            using (var P_SELECT_LINKED_BILLING = new PoseGlobalDB.Procedures.P_SELECT_LINKED_BILLING())
            {
                P_SELECT_LINKED_BILLING.SetInput(userNo);

                db_output = P_SELECT_LINKED_BILLING.OnQuery();

                if (P_SELECT_LINKED_BILLING.EntityStatus != null || db_output.Result != 0)
                {
                    ErrorHandler.OccurException(RowCode.P_SELECT_LINKED_BILLING + db_output.Result);
                }
            }

            // Check ProductID valid
            if (!InAppPurchase.TryGetInAppPurchase(db_output.InAppBilling.product_id, out var inAppPurchase) ||
                inAppPurchase.StoreType != StoreType.GooglePlay)
            {
                Log4Net.WriteLog($"Invalid Google ProudctId, UserNo: {userNo}, productId: {db_output.InAppBilling.product_id}", Log4Net.Level.ERROR);
                ErrorHandler.OccurException(RowCode.Invalid_Product_Id);
            }

            long linkedTransNo = 0;

            if (inAppPurchase.PurchaseType == InAppPurchaseType.InAppProduct)
            {
                linkedTransNo = db_output.UserRole.linked_trans_no;

                billingResult = new PoseBillingResult();
                billingResult.MemberRoleType    = inAppPurchase.OfferRoleType;
                billingResult.RoleExpireTime    = db_output.UserRole.expire_time;
                billingResult.ProductId         = db_output.InAppBilling.product_id;
                billingResult.PurchaseStateType = db_output.UserRole.expire_time > DateTime.UtcNow ?
                                                  PosePurchaseStateType.Purchased : PosePurchaseStateType.Unknown;
            }
            else if (inAppPurchase.PurchaseType == InAppPurchaseType.Subscription)
            {
                var process_ret = await P_E_UPDATE_IN_APP_BILLING_BY_GOOGLE.SubscriptionProcess(inAppPurchase, input.AppPackageName, db_output.InAppBilling.purchase_token);

                billingResult = process_ret.BillingResult;
                linkedTransNo = process_ret.Payload;
            }

            // 회원등급 심사
            if (billingResult.PurchaseStateType != PosePurchaseStateType.Purchased &&
                billingResult.PurchaseStateType != PosePurchaseStateType.Grace)    // 결제 유예기간..
            {
                billingResult.MemberRoleType = MemberRoleType.Regular;
                linkedTransNo = 0;
            }

            // Update DB
            bool db_output2;

            using (var P_UPDATE_USER_ROLE = new PoseGlobalDB.Procedures.P_UPDATE_USER_ROLE())
            {
                P_UPDATE_USER_ROLE.SetInput(new PoseGlobalDB.Procedures.P_UPDATE_USER_ROLE.Input
                {
                    UserNo         = userNo,
                    LinkedTransNo  = linkedTransNo,
                    RoleType       = billingResult.MemberRoleType.ToString(),
                    RoleExpireTime = billingResult.RoleExpireTime,
                    CurrentTime    = DateTime.UtcNow,
                });

                db_output2 = P_UPDATE_USER_ROLE.OnQuery();

                if (P_UPDATE_USER_ROLE.EntityStatus != null || db_output2 == false)
                {
                    ErrorHandler.OccurException(RowCode.DB_User_Role_Update_Failed);
                }
            }

            // Refrash PoseToken
            billingResult.MemberRoleType.ToString().TryParseEnum(out ServiceRoleType convertedServiceRoleType);
            billingResult.PoseToken = PoseCredentials.CreateToken(userNo, convertedServiceRoleType);

            return(new O_E_CHECK_MEMBERSHIP_BY_GOOGLE
            {
                BillingResult = billingResult,
            });
        }
コード例 #6
0
        public static async Task <O_E_UPDATE_IN_APP_BILLING_BY_GOOGLE> Execute(I_E_UPDATE_IN_APP_BILLING_BY_GOOGLE input, long userNo)
        {
            if (input == null ||
                string.IsNullOrEmpty(input.ProductID) ||
                string.IsNullOrEmpty(input.AppPackageName) ||
                string.IsNullOrEmpty(input.PurchaseToken))
            {
                ErrorHandler.OccurException(RowCode.Invalid_InputValue);
            }

            // Check ProductID valid
            if (!InAppPurchase.TryGetInAppPurchase(input.ProductID, out var inAppPurchase) ||
                inAppPurchase.StoreType != StoreType.GooglePlay)
            {
                Log4Net.WriteLog($"Invalid Google ProudctId, UserNo: {userNo}, productId: {input.ProductID}", Log4Net.Level.ERROR);
                ErrorHandler.OccurException(RowCode.Invalid_Product_Id);
            }

            PoseBillingResult billingResult = null;
            long   trasNo  = 0;
            string orderId = string.Empty;

            switch (inAppPurchase.PurchaseType)
            {
            case InAppPurchaseType.InAppProduct:     // 소비성 상품
            {
                var process_ret = await InAppProductProcess(inAppPurchase, input.AppPackageName, input.PurchaseToken);

                billingResult = process_ret.BillingResult;
                trasNo        = process_ret.Payload;
                orderId       = process_ret.OrderId;
            }
            break;

            case InAppPurchaseType.Subscription:     // 구독 상품
            {
                var process_ret = await SubscriptionProcess(inAppPurchase, input.AppPackageName, input.PurchaseToken);

                billingResult = process_ret.BillingResult;
                trasNo        = process_ret.Payload;
                orderId       = process_ret.OrderId;
            }
            break;
            }

            // 유효하지않은 PurchaseToken
            if (billingResult == null)
            {
                Log4Net.WriteLog($"Google PurchaseToken is Invalid, UserNo: {userNo}, productId: {input.ProductID}, purchaseToken: {input.PurchaseToken}", Log4Net.Level.ERROR);
                ErrorHandler.OccurException(RowCode.Invalid_Google_Receipt);
            }

            if (billingResult.PurchaseStateType == PosePurchaseStateType.Purchased)
            {
                // DB Process
                PoseGlobalDB.Procedures.P_UPDATE_IN_APP_BILLING.Output db_output;
                using (var P_UPDATE_IN_APP_BILLING = new PoseGlobalDB.Procedures.P_UPDATE_IN_APP_BILLING())
                {
                    P_UPDATE_IN_APP_BILLING.SetInput(new PoseGlobalDB.Procedures.P_UPDATE_IN_APP_BILLING.Input
                    {
                        UserNo         = userNo,
                        TransNo        = trasNo,
                        PurchaseState  = PosePurchaseStateType.Purchased.ToString(),
                        PurchaseToken  = input.PurchaseToken,
                        OrderId        = orderId,
                        RoleType       = billingResult.MemberRoleType.ToString(),
                        RoleExpireTime = billingResult.RoleExpireTime,
                        CurrentTime    = DateTime.UtcNow,
                    });

                    db_output = P_UPDATE_IN_APP_BILLING.OnQuery();

                    if (P_UPDATE_IN_APP_BILLING.EntityStatus != null || db_output.Result != 0)
                    {
                        ErrorHandler.OccurException(RowCode.P_UPDATE_IN_APP_BILLING + db_output.Result);
                    }
                }

                // Refrash PoseToken
                billingResult.MemberRoleType.ToString().TryParseEnum(out ServiceRoleType serviceRoleType);
                billingResult.PoseToken = PoseCredentials.CreateToken(userNo, serviceRoleType);
            }

            return(new O_E_UPDATE_IN_APP_BILLING_BY_GOOGLE
            {
                BillingResult = billingResult,
            });
        }