Merge branch 'develop' of gitlab.verizon.com:BPHV_MIPS/mvm_core into develop
This commit is contained in:
commit
92d1f98db9
@ -92,16 +92,6 @@
|
|||||||
AFBB96351FBA34310008D868 /* MVMCoreErrorConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96331FBA34310008D868 /* MVMCoreErrorConstants.m */; };
|
AFBB96351FBA34310008D868 /* MVMCoreErrorConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96331FBA34310008D868 /* MVMCoreErrorConstants.m */; };
|
||||||
AFBB96381FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96371FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
AFBB96381FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96371FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
AFBB96531FBA3A570008D868 /* MVMCoreLoadHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96391FBA3A550008D868 /* MVMCoreLoadHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
AFBB96531FBA3A570008D868 /* MVMCoreLoadHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96391FBA3A550008D868 /* MVMCoreLoadHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
AFBB96561FBA3A570008D868 /* freebee.json in Resources */ = {isa = PBXBuildFile; fileRef = AFBB963D1FBA3A550008D868 /* freebee.json */; };
|
|
||||||
AFBB96571FBA3A570008D868 /* FreeBeeAuthObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB963E1FBA3A560008D868 /* FreeBeeAuthObject.h */; };
|
|
||||||
AFBB96581FBA3A570008D868 /* FreeBeeAuthObject.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB963F1FBA3A560008D868 /* FreeBeeAuthObject.m */; };
|
|
||||||
AFBB96591FBA3A570008D868 /* freebeelaunchApp.json in Resources */ = {isa = PBXBuildFile; fileRef = AFBB96401FBA3A560008D868 /* freebeelaunchApp.json */; };
|
|
||||||
AFBB965A1FBA3A570008D868 /* FreeBeeUrlObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96411FBA3A560008D868 /* FreeBeeUrlObject.h */; };
|
|
||||||
AFBB965B1FBA3A570008D868 /* FreeBeeUrlObject.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96421FBA3A560008D868 /* FreeBeeUrlObject.m */; };
|
|
||||||
AFBB965C1FBA3A570008D868 /* MFFreebeeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96431FBA3A560008D868 /* MFFreebeeHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
|
||||||
AFBB965D1FBA3A570008D868 /* MFFreebeeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96441FBA3A560008D868 /* MFFreebeeHandler.m */; };
|
|
||||||
AFBB965E1FBA3A570008D868 /* MFFreebeeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96451FBA3A560008D868 /* MFFreebeeOperation.h */; };
|
|
||||||
AFBB965F1FBA3A570008D868 /* MFFreebeeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96461FBA3A560008D868 /* MFFreebeeOperation.m */; };
|
|
||||||
AFBB96601FBA3A570008D868 /* MVMCoreLoadObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96471FBA3A560008D868 /* MVMCoreLoadObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
AFBB96601FBA3A570008D868 /* MVMCoreLoadObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96471FBA3A560008D868 /* MVMCoreLoadObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
AFBB96611FBA3A570008D868 /* MVMCoreLoadObject.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96481FBA3A560008D868 /* MVMCoreLoadObject.m */; };
|
AFBB96611FBA3A570008D868 /* MVMCoreLoadObject.m in Sources */ = {isa = PBXBuildFile; fileRef = AFBB96481FBA3A560008D868 /* MVMCoreLoadObject.m */; };
|
||||||
AFBB96621FBA3A570008D868 /* MVMCoreRequestParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96491FBA3A560008D868 /* MVMCoreRequestParameters.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
AFBB96621FBA3A570008D868 /* MVMCoreRequestParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBB96491FBA3A560008D868 /* MVMCoreRequestParameters.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
@ -252,16 +242,6 @@
|
|||||||
AFBB96331FBA34310008D868 /* MVMCoreErrorConstants.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreErrorConstants.m; sourceTree = "<group>"; };
|
AFBB96331FBA34310008D868 /* MVMCoreErrorConstants.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MVMCoreErrorConstants.m; sourceTree = "<group>"; };
|
||||||
AFBB96371FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreLoadDelegateProtocol.h; sourceTree = "<group>"; };
|
AFBB96371FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreLoadDelegateProtocol.h; sourceTree = "<group>"; };
|
||||||
AFBB96391FBA3A550008D868 /* MVMCoreLoadHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreLoadHandler.h; sourceTree = "<group>"; };
|
AFBB96391FBA3A550008D868 /* MVMCoreLoadHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreLoadHandler.h; sourceTree = "<group>"; };
|
||||||
AFBB963D1FBA3A550008D868 /* freebee.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = freebee.json; sourceTree = "<group>"; };
|
|
||||||
AFBB963E1FBA3A560008D868 /* FreeBeeAuthObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FreeBeeAuthObject.h; sourceTree = "<group>"; };
|
|
||||||
AFBB963F1FBA3A560008D868 /* FreeBeeAuthObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FreeBeeAuthObject.m; sourceTree = "<group>"; };
|
|
||||||
AFBB96401FBA3A560008D868 /* freebeelaunchApp.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = freebeelaunchApp.json; sourceTree = "<group>"; };
|
|
||||||
AFBB96411FBA3A560008D868 /* FreeBeeUrlObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FreeBeeUrlObject.h; sourceTree = "<group>"; };
|
|
||||||
AFBB96421FBA3A560008D868 /* FreeBeeUrlObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FreeBeeUrlObject.m; sourceTree = "<group>"; };
|
|
||||||
AFBB96431FBA3A560008D868 /* MFFreebeeHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFFreebeeHandler.h; sourceTree = "<group>"; };
|
|
||||||
AFBB96441FBA3A560008D868 /* MFFreebeeHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFFreebeeHandler.m; sourceTree = "<group>"; };
|
|
||||||
AFBB96451FBA3A560008D868 /* MFFreebeeOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFFreebeeOperation.h; sourceTree = "<group>"; };
|
|
||||||
AFBB96461FBA3A560008D868 /* MFFreebeeOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFFreebeeOperation.m; sourceTree = "<group>"; };
|
|
||||||
AFBB96471FBA3A560008D868 /* MVMCoreLoadObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreLoadObject.h; sourceTree = "<group>"; };
|
AFBB96471FBA3A560008D868 /* MVMCoreLoadObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreLoadObject.h; sourceTree = "<group>"; };
|
||||||
AFBB96481FBA3A560008D868 /* MVMCoreLoadObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MVMCoreLoadObject.m; sourceTree = "<group>"; };
|
AFBB96481FBA3A560008D868 /* MVMCoreLoadObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MVMCoreLoadObject.m; sourceTree = "<group>"; };
|
||||||
AFBB96491FBA3A560008D868 /* MVMCoreRequestParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreRequestParameters.h; sourceTree = "<group>"; };
|
AFBB96491FBA3A560008D868 /* MVMCoreRequestParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreRequestParameters.h; sourceTree = "<group>"; };
|
||||||
@ -570,7 +550,6 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
AFFCFA601FCCC0D600FD0730 /* LoadingOverlay */,
|
AFFCFA601FCCC0D600FD0730 /* LoadingOverlay */,
|
||||||
AFBB963C1FBA3A550008D868 /* FreeBee */,
|
|
||||||
AFBB96371FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h */,
|
AFBB96371FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h */,
|
||||||
AFBB96391FBA3A550008D868 /* MVMCoreLoadHandler.h */,
|
AFBB96391FBA3A550008D868 /* MVMCoreLoadHandler.h */,
|
||||||
AFBB964B1FBA3A560008D868 /* MVMCoreLoadHandler.m */,
|
AFBB964B1FBA3A560008D868 /* MVMCoreLoadHandler.m */,
|
||||||
@ -584,23 +563,6 @@
|
|||||||
path = LoadHandling;
|
path = LoadHandling;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
AFBB963C1FBA3A550008D868 /* FreeBee */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
AFBB963D1FBA3A550008D868 /* freebee.json */,
|
|
||||||
AFBB963E1FBA3A560008D868 /* FreeBeeAuthObject.h */,
|
|
||||||
AFBB963F1FBA3A560008D868 /* FreeBeeAuthObject.m */,
|
|
||||||
AFBB96401FBA3A560008D868 /* freebeelaunchApp.json */,
|
|
||||||
AFBB96411FBA3A560008D868 /* FreeBeeUrlObject.h */,
|
|
||||||
AFBB96421FBA3A560008D868 /* FreeBeeUrlObject.m */,
|
|
||||||
AFBB96431FBA3A560008D868 /* MFFreebeeHandler.h */,
|
|
||||||
AFBB96441FBA3A560008D868 /* MFFreebeeHandler.m */,
|
|
||||||
AFBB96451FBA3A560008D868 /* MFFreebeeOperation.h */,
|
|
||||||
AFBB96461FBA3A560008D868 /* MFFreebeeOperation.m */,
|
|
||||||
);
|
|
||||||
path = FreeBee;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
AFBB966B1FBA3A9A0008D868 /* PresentationHandling */ = {
|
AFBB966B1FBA3A9A0008D868 /* PresentationHandling */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -772,9 +734,7 @@
|
|||||||
AF43A7061FC4D7A2008E9347 /* MVMCoreObject.h in Headers */,
|
AF43A7061FC4D7A2008E9347 /* MVMCoreObject.h in Headers */,
|
||||||
AFED77A11FCCA29400BAE689 /* MVMCoreViewControllerNibMappingObject.h in Headers */,
|
AFED77A11FCCA29400BAE689 /* MVMCoreViewControllerNibMappingObject.h in Headers */,
|
||||||
AFBB969F1FBA3A9A0008D868 /* MVMCoreAlertOperation.h in Headers */,
|
AFBB969F1FBA3A9A0008D868 /* MVMCoreAlertOperation.h in Headers */,
|
||||||
AFBB965A1FBA3A570008D868 /* FreeBeeUrlObject.h in Headers */,
|
|
||||||
AF43A71B1FC5BEBB008E9347 /* MVMCoreViewControllerProtocol.h in Headers */,
|
AF43A71B1FC5BEBB008E9347 /* MVMCoreViewControllerProtocol.h in Headers */,
|
||||||
AFBB96571FBA3A570008D868 /* FreeBeeAuthObject.h in Headers */,
|
|
||||||
AFC5FA161FFC2E2A00C244CF /* MVMCoreGlobalTopAlertDelegateProtocol.h in Headers */,
|
AFC5FA161FFC2E2A00C244CF /* MVMCoreGlobalTopAlertDelegateProtocol.h in Headers */,
|
||||||
AFBB96381FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h in Headers */,
|
AFBB96381FBA39E70008D868 /* MVMCoreLoadDelegateProtocol.h in Headers */,
|
||||||
AFBB96B01FBA3B590008D868 /* MVMCoreDispatchUtility.h in Headers */,
|
AFBB96B01FBA3B590008D868 /* MVMCoreDispatchUtility.h in Headers */,
|
||||||
@ -788,12 +748,10 @@
|
|||||||
AFC5FA1D1FFC39C700C244CF /* MVMCoreTopAlertViewProtocol.h in Headers */,
|
AFC5FA1D1FFC39C700C244CF /* MVMCoreTopAlertViewProtocol.h in Headers */,
|
||||||
AFBB969D1FBA3A9A0008D868 /* MVMCoreAlertObject.h in Headers */,
|
AFBB969D1FBA3A9A0008D868 /* MVMCoreAlertObject.h in Headers */,
|
||||||
8876D5CE1FB50A9E00EB2E3D /* MVMCore.h in Headers */,
|
8876D5CE1FB50A9E00EB2E3D /* MVMCore.h in Headers */,
|
||||||
AFBB965E1FBA3A570008D868 /* MFFreebeeOperation.h in Headers */,
|
|
||||||
AF43A57B1FBA5E6A008E9347 /* MVMCoreHardcodedStringsConstants.h in Headers */,
|
AF43A57B1FBA5E6A008E9347 /* MVMCoreHardcodedStringsConstants.h in Headers */,
|
||||||
AFBB96B81FBA3CEC0008D868 /* MVMCoreActionDelegateProtocol.h in Headers */,
|
AFBB96B81FBA3CEC0008D868 /* MVMCoreActionDelegateProtocol.h in Headers */,
|
||||||
AFBB968B1FBA3A9A0008D868 /* MVMCoreDismissViewControllerOperation.h in Headers */,
|
AFBB968B1FBA3A9A0008D868 /* MVMCoreDismissViewControllerOperation.h in Headers */,
|
||||||
AF43A70B1FC4F415008E9347 /* MVMCoreCache.h in Headers */,
|
AF43A70B1FC4F415008E9347 /* MVMCoreCache.h in Headers */,
|
||||||
AFBB965C1FBA3A570008D868 /* MFFreebeeHandler.h in Headers */,
|
|
||||||
AFEA17A8209B6A1C00BC6740 /* MVMCoreBlockOperation.h in Headers */,
|
AFEA17A8209B6A1C00BC6740 /* MVMCoreBlockOperation.h in Headers */,
|
||||||
AF43A5831FBB66DE008E9347 /* MVMCoreConstants.h in Headers */,
|
AF43A5831FBB66DE008E9347 /* MVMCoreConstants.h in Headers */,
|
||||||
AFBB969A1FBA3A9A0008D868 /* MVMCoreAlertDelegateProtocol.h in Headers */,
|
AFBB969A1FBA3A9A0008D868 /* MVMCoreAlertDelegateProtocol.h in Headers */,
|
||||||
@ -877,8 +835,6 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
AF26DDAE1FCE6A37004E8F65 /* Localizable.strings in Resources */,
|
AF26DDAE1FCE6A37004E8F65 /* Localizable.strings in Resources */,
|
||||||
AFBB96561FBA3A570008D868 /* freebee.json in Resources */,
|
|
||||||
AFBB96591FBA3A570008D868 /* freebeelaunchApp.json in Resources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -926,7 +882,6 @@
|
|||||||
AF43A74D1FC6109F008E9347 /* MVMCoreSessionObject.m in Sources */,
|
AF43A74D1FC6109F008E9347 /* MVMCoreSessionObject.m in Sources */,
|
||||||
0184D3E324B8D0C600A05369 /* MVMCoreAlertObject+Swift.swift in Sources */,
|
0184D3E324B8D0C600A05369 /* MVMCoreAlertObject+Swift.swift in Sources */,
|
||||||
D282AAB62240085300C46919 /* MVMCoreGetterUtility+Extension.swift in Sources */,
|
D282AAB62240085300C46919 /* MVMCoreGetterUtility+Extension.swift in Sources */,
|
||||||
AFBB965F1FBA3A570008D868 /* MFFreebeeOperation.m in Sources */,
|
|
||||||
AFBB96901FBA3A9A0008D868 /* MVMCoreNavigationObject.m in Sources */,
|
AFBB96901FBA3A9A0008D868 /* MVMCoreNavigationObject.m in Sources */,
|
||||||
946EE1AB237B5C940036751F /* Decoder.swift in Sources */,
|
946EE1AB237B5C940036751F /* Decoder.swift in Sources */,
|
||||||
946EE1BC237B691A0036751F /* ActionOpenPageModel.swift in Sources */,
|
946EE1BC237B691A0036751F /* ActionOpenPageModel.swift in Sources */,
|
||||||
@ -942,7 +897,6 @@
|
|||||||
8876D5E91FB50AB000EB2E3D /* NSArray+MFConvenience.m in Sources */,
|
8876D5E91FB50AB000EB2E3D /* NSArray+MFConvenience.m in Sources */,
|
||||||
946EE1B2237B5F260036751F /* JSONValue.swift in Sources */,
|
946EE1B2237B5F260036751F /* JSONValue.swift in Sources */,
|
||||||
AFBB96971FBA3A9A0008D868 /* MVMCorePresentViewControllerOperation.m in Sources */,
|
AFBB96971FBA3A9A0008D868 /* MVMCorePresentViewControllerOperation.m in Sources */,
|
||||||
AFBB96581FBA3A570008D868 /* FreeBeeAuthObject.m in Sources */,
|
|
||||||
01F2A04E23A82CF500D954D8 /* ActionPopupModel.swift in Sources */,
|
01F2A04E23A82CF500D954D8 /* ActionPopupModel.swift in Sources */,
|
||||||
0A62624824C1DFDC00C316B9 /* UIAlertControllerStyle+Extension.swift in Sources */,
|
0A62624824C1DFDC00C316B9 /* UIAlertControllerStyle+Extension.swift in Sources */,
|
||||||
AF43A5781FBA5B7C008E9347 /* MVMCoreJSONConstants.m in Sources */,
|
AF43A5781FBA5B7C008E9347 /* MVMCoreJSONConstants.m in Sources */,
|
||||||
@ -957,7 +911,6 @@
|
|||||||
AF43A5881FBB67D6008E9347 /* MVMCoreActionUtility.m in Sources */,
|
AF43A5881FBB67D6008E9347 /* MVMCoreActionUtility.m in Sources */,
|
||||||
AFED77A61FCCA29400BAE689 /* MVMCoreViewControllerStoryBoardMappingObject.m in Sources */,
|
AFED77A61FCCA29400BAE689 /* MVMCoreViewControllerStoryBoardMappingObject.m in Sources */,
|
||||||
AF43A57C1FBA5E6A008E9347 /* MVMCoreHardcodedStringsConstants.m in Sources */,
|
AF43A57C1FBA5E6A008E9347 /* MVMCoreHardcodedStringsConstants.m in Sources */,
|
||||||
AFBB965D1FBA3A570008D868 /* MFFreebeeHandler.m in Sources */,
|
|
||||||
0AFF597A23FC6E60005C24E8 /* ActionShareModel.swift in Sources */,
|
0AFF597A23FC6E60005C24E8 /* ActionShareModel.swift in Sources */,
|
||||||
AFEEE81F1FCDF3CA00B5EDD0 /* MVMCoreLoggingHandler.m in Sources */,
|
AFEEE81F1FCDF3CA00B5EDD0 /* MVMCoreLoggingHandler.m in Sources */,
|
||||||
01F2A05223A8325100D954D8 /* ModelMapping.swift in Sources */,
|
01F2A05223A8325100D954D8 /* ModelMapping.swift in Sources */,
|
||||||
@ -970,7 +923,6 @@
|
|||||||
01DF561421F90ADC00CC099B /* Dictionary+MFConvenience.swift in Sources */,
|
01DF561421F90ADC00CC099B /* Dictionary+MFConvenience.swift in Sources */,
|
||||||
AFBB96B11FBA3B590008D868 /* MVMCoreDispatchUtility.m in Sources */,
|
AFBB96B11FBA3B590008D868 /* MVMCoreDispatchUtility.m in Sources */,
|
||||||
946EE1A3237B59C30036751F /* ModelProtocol.swift in Sources */,
|
946EE1A3237B59C30036751F /* ModelProtocol.swift in Sources */,
|
||||||
AFBB965B1FBA3A570008D868 /* FreeBeeUrlObject.m in Sources */,
|
|
||||||
AFEA17A9209B6A1C00BC6740 /* MVMCoreBlockOperation.m in Sources */,
|
AFEA17A9209B6A1C00BC6740 /* MVMCoreBlockOperation.m in Sources */,
|
||||||
AF43A70A1FC4F415008E9347 /* MVMCoreCache.m in Sources */,
|
AF43A70A1FC4F415008E9347 /* MVMCoreCache.m in Sources */,
|
||||||
AF43A6FF1FBE3252008E9347 /* Reachability.m in Sources */,
|
AF43A6FF1FBE3252008E9347 /* Reachability.m in Sources */,
|
||||||
|
|||||||
@ -14,7 +14,6 @@
|
|||||||
#import "MVMCoreSessionTimeHandler.h"
|
#import "MVMCoreSessionTimeHandler.h"
|
||||||
#import "MVMCoreLoadHandler.h"
|
#import "MVMCoreLoadHandler.h"
|
||||||
#import "MVMCoreNavigationHandler.h"
|
#import "MVMCoreNavigationHandler.h"
|
||||||
#import "MFFreebeeHandler.h"
|
|
||||||
#import "MVMCoreDispatchUtility.h"
|
#import "MVMCoreDispatchUtility.h"
|
||||||
#import "NSDictionary+MFConvenience.h"
|
#import "NSDictionary+MFConvenience.h"
|
||||||
#import "MVMCoreGetterUtility.h"
|
#import "MVMCoreGetterUtility.h"
|
||||||
@ -122,22 +121,6 @@ NSString * const KeyActionTypeOpen = @"openPage";
|
|||||||
// Loads the given page type.
|
// Loads the given page type.
|
||||||
NSString *pageType = [actionInformation stringForKey:KeyPageType];
|
NSString *pageType = [actionInformation stringForKey:KeyPageType];
|
||||||
if (pageType.length > 0) {
|
if (pageType.length > 0) {
|
||||||
|
|
||||||
//if freebee enabled for account,and state isNotDetermined or is expired
|
|
||||||
//launchFreebee auth request
|
|
||||||
//else if invalid or valid or busy do nothing
|
|
||||||
#warning i'd like to move this out of here.
|
|
||||||
MFFreebeeHandler *freebeeHandler = [MFFreebeeHandler sharedHandler];
|
|
||||||
if (YES == [freebeeHandler canProceedWithFreebeeAuthRequest]) {
|
|
||||||
|
|
||||||
MVMCoreLog(@"Processing Freebee Auth request");
|
|
||||||
[freebeeHandler processFreeBeeAuthRequestWithCompletionHandler:^(MVMCoreOperation* _Nullable freebeeOperation, BOOL isValid) {
|
|
||||||
|
|
||||||
MVMCoreLog(@"Processing Freebee Auth request Initiated");
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
MVMCoreLog(@"Continuing operation after freebee request");
|
|
||||||
MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionInformation];
|
MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionInformation];
|
||||||
|
|
||||||
[self updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) {
|
[self updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) {
|
||||||
@ -515,22 +498,6 @@ NSString * const KeyActionTypeOpen = @"openPage";
|
|||||||
// Loads the given page type.
|
// Loads the given page type.
|
||||||
NSString *pageType = [actionInformation stringForKey:KeyPageType];
|
NSString *pageType = [actionInformation stringForKey:KeyPageType];
|
||||||
if (pageType.length > 0) {
|
if (pageType.length > 0) {
|
||||||
|
|
||||||
//if freebee enabled for account,and state isNotDetermined or is expired
|
|
||||||
//launchFreebee auth request
|
|
||||||
//else if invalid or valid or busy do nothing
|
|
||||||
#warning i'd like to move this out of here.
|
|
||||||
MFFreebeeHandler *freebeeHandler = [MFFreebeeHandler sharedHandler];
|
|
||||||
if (YES == [freebeeHandler canProceedWithFreebeeAuthRequest]) {
|
|
||||||
|
|
||||||
MVMCoreLog(@"Processing Freebee Auth request");
|
|
||||||
[freebeeHandler processFreeBeeAuthRequestWithCompletionHandler:^(MVMCoreOperation* _Nullable freebeeOperation, BOOL isValid) {
|
|
||||||
|
|
||||||
MVMCoreLog(@"Processing Freebee Auth request Initiated");
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
MVMCoreLog(@"Continuing operation after freebee request");
|
|
||||||
MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionInformation];
|
MVMCoreRequestParameters *requestParameters = [[MVMCoreRequestParameters alloc] initWithActionMap:actionInformation];
|
||||||
|
|
||||||
[self updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) {
|
[self updateRequestParametersBeforeHandleOpenPageAction:requestParameters callBack:^(MVMCoreRequestParameters * _Nonnull requestParameters) {
|
||||||
|
|||||||
@ -1,23 +0,0 @@
|
|||||||
//
|
|
||||||
// FreeBeeAuthObject.h
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Bansal, Tapan on 20/01/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@class FreeBeeUrlObject;
|
|
||||||
|
|
||||||
@interface FreeBeeAuthObject : NSObject
|
|
||||||
|
|
||||||
- (BOOL)isValidFreeBeeSessionAuthObject;
|
|
||||||
|
|
||||||
- (void)updateWithDictionary:(nullable NSDictionary*)inDict;
|
|
||||||
- (nullable NSDictionary*)proxyDictionaryForUrl:(nullable NSURL*)url;
|
|
||||||
- (nullable NSDictionary*)campaignHeaderForUrl:(nullable NSURL*)url;
|
|
||||||
|
|
||||||
- (nullable FreeBeeUrlObject*)freebeeUrlObjectForUrl:(nullable NSURL *)url;
|
|
||||||
- (BOOL)isExpired ;
|
|
||||||
@end
|
|
||||||
@ -1,117 +0,0 @@
|
|||||||
//
|
|
||||||
// FreeBeeAuthObject.m
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Bansal, Tapan on 20/01/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FreeBeeAuthObject.h"
|
|
||||||
#import <MVMCore/NSDictionary+MFConvenience.h>
|
|
||||||
#import "MFFreebeeHandler.h"
|
|
||||||
#import "FreeBeeUrlObject.h"
|
|
||||||
|
|
||||||
@interface FreeBeeAuthObject ()
|
|
||||||
|
|
||||||
@property(nullable,strong,nonatomic) NSString *vidToken;
|
|
||||||
@property(nullable,strong,nonatomic) NSMutableArray *freeBeeUrlObjects;
|
|
||||||
|
|
||||||
- (FreeBeeUrlObject*)freebeeUrlObjectForUrl:(NSURL*)url;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation FreeBeeAuthObject
|
|
||||||
|
|
||||||
#pragma mark -
|
|
||||||
#pragma mark Public Methods
|
|
||||||
- (BOOL)isValidFreeBeeSessionAuthObject {
|
|
||||||
|
|
||||||
if (self.vidToken.length && self.freeBeeUrlObjects.count)
|
|
||||||
return YES;
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
}
|
|
||||||
- (void)updateWithDictionary:(nullable NSDictionary*)inDict {
|
|
||||||
|
|
||||||
//Remove Previously Existing Expired Ones
|
|
||||||
[self.freeBeeUrlObjects removeAllObjects];
|
|
||||||
|
|
||||||
if (inDict && [inDict isKindOfClass:[NSDictionary class]]) {
|
|
||||||
|
|
||||||
self.vidToken = [inDict objectForKey:@"vidToken"];
|
|
||||||
if (self.vidToken && self.vidToken.length) {
|
|
||||||
|
|
||||||
NSArray* sdAuthResp = [inDict objectChainOfKeysOrIndexes:@[@"sdAuthResp"] ofType:[NSArray class]];
|
|
||||||
__block FreeBeeUrlObject* freeBeeUrlObject = nil;
|
|
||||||
for (NSDictionary* inDict in sdAuthResp) {
|
|
||||||
|
|
||||||
freeBeeUrlObject = [[FreeBeeUrlObject alloc] init];
|
|
||||||
[freeBeeUrlObject updateWithDictionary:inDict];
|
|
||||||
|
|
||||||
if (!self.freeBeeUrlObjects)
|
|
||||||
self.freeBeeUrlObjects = [NSMutableArray array];
|
|
||||||
|
|
||||||
//Assigning the requested url to have a mapping b/w sdurl and request url
|
|
||||||
freeBeeUrlObject.requestUrl = [[MFFreebeeHandler sharedHandler] urlForidFromConfigDict:freeBeeUrlObject.urlId];
|
|
||||||
|
|
||||||
//Adding Only Valid Objects to Array
|
|
||||||
if (freeBeeUrlObject.sdUrl.length && NO == [freeBeeUrlObject isExpired])
|
|
||||||
[self.freeBeeUrlObjects addObject:freeBeeUrlObject];
|
|
||||||
freeBeeUrlObject = nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSDictionary*)proxyDictionaryForUrl:(nullable NSURL*)url; {
|
|
||||||
|
|
||||||
FreeBeeUrlObject* urlObject = [self freebeeUrlObjectForUrl:url];
|
|
||||||
if (urlObject)
|
|
||||||
|
|
||||||
return [urlObject proxyDictionary];
|
|
||||||
return nil;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSDictionary*)campaignHeaderForUrl:(nullable NSURL*)url {
|
|
||||||
|
|
||||||
if (self.vidToken.length) {
|
|
||||||
|
|
||||||
FreeBeeUrlObject* urlObject = [self freebeeUrlObjectForUrl:url];
|
|
||||||
if (urlObject)
|
|
||||||
return [urlObject campaignHeader];
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
//http://mobile.vzw.com/abc.png
|
|
||||||
- (nullable FreeBeeUrlObject*)freebeeUrlObjectForUrl:(NSURL*)url {
|
|
||||||
|
|
||||||
if (url) {
|
|
||||||
|
|
||||||
NSString *host = [url host];
|
|
||||||
//if freebeeobjects has url as part of
|
|
||||||
|
|
||||||
if (host) {
|
|
||||||
|
|
||||||
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"requestUrl contains %@", host];
|
|
||||||
NSArray* freeBeeUrlObject = [self.freeBeeUrlObjects filteredArrayUsingPredicate:predicate];
|
|
||||||
|
|
||||||
if (freeBeeUrlObject.count)
|
|
||||||
return freeBeeUrlObject[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isExpired {
|
|
||||||
|
|
||||||
if (self.freeBeeUrlObjects.count) {
|
|
||||||
|
|
||||||
return [(( FreeBeeUrlObject*)self.freeBeeUrlObjects[0]) isExpired];
|
|
||||||
}
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
//
|
|
||||||
// FreeBeeUrlObject.h
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Bansal, Tapan on 08/02/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@interface FreeBeeUrlObject : NSObject
|
|
||||||
|
|
||||||
|
|
||||||
@property(nullable,strong,nonatomic) NSString *urlId;
|
|
||||||
@property(nullable,strong,nonatomic) NSNumber *httpsProxyIP;
|
|
||||||
@property(nullable,strong,nonatomic) NSString *sdUrl;
|
|
||||||
@property(nullable,strong,nonatomic) NSNumber *sdConfExpiry;
|
|
||||||
@property(nullable,strong,nonatomic) NSNumber *sdPort;
|
|
||||||
@property(nullable,strong,nonatomic) NSString *requestUrl;
|
|
||||||
@property(assign,nonatomic) NSInteger authStatus;
|
|
||||||
|
|
||||||
- (void)updateWithDictionary:(nullable NSDictionary*)inDict;
|
|
||||||
|
|
||||||
- (nullable NSDictionary*)proxyDictionary;
|
|
||||||
- (nullable NSDictionary*)campaignHeader;
|
|
||||||
- (BOOL)isValidFreeBeeObj;
|
|
||||||
- (BOOL)isExpired;
|
|
||||||
@end
|
|
||||||
@ -1,100 +0,0 @@
|
|||||||
//
|
|
||||||
// FreeBeeUrlObject.m
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Bansal, Tapan on 08/02/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FreeBeeUrlObject.h"
|
|
||||||
|
|
||||||
static NSUInteger const kHTTPSProxyAuthorized = 1200;
|
|
||||||
|
|
||||||
@interface FreeBeeUrlObject()
|
|
||||||
|
|
||||||
@property(nonatomic) NSDictionary* proxyDictionary;
|
|
||||||
@property(nonatomic) NSDictionary* campaignHeaderDictionary;
|
|
||||||
|
|
||||||
// The time that we started the last session timer.
|
|
||||||
@property(nullable,strong,nonatomic) NSDate* expirationDate;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation FreeBeeUrlObject
|
|
||||||
|
|
||||||
- (void)updateWithDictionary:(nullable NSDictionary*)inDict {
|
|
||||||
|
|
||||||
if (inDict && [inDict isKindOfClass:[NSDictionary class]]) {
|
|
||||||
|
|
||||||
NSNumber* authCode = [inDict objectForKey:@"authRespCode"];
|
|
||||||
if ([authCode intValue] == kHTTPSProxyAuthorized) {
|
|
||||||
|
|
||||||
self.urlId = [inDict objectForKey:@"urlId"];
|
|
||||||
self.httpsProxyIP = [inDict objectForKey:@"httpsProxyIP"];
|
|
||||||
self.sdUrl = [inDict objectForKey:@"sdUrl"];
|
|
||||||
|
|
||||||
self.sdPort = [inDict objectForKey:@"sdPort"];
|
|
||||||
self.authStatus = kHTTPSProxyAuthorized;
|
|
||||||
|
|
||||||
self.sdConfExpiry = [inDict objectForKey:@"sdConfExpiry"];
|
|
||||||
self.expirationDate = [NSDate dateWithTimeIntervalSince1970:[self.sdConfExpiry doubleValue]];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
self.authStatus = [authCode intValue];
|
|
||||||
self.expirationDate = [NSDate distantPast];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSDictionary*)proxyDictionary {
|
|
||||||
|
|
||||||
if (nil != _proxyDictionary)
|
|
||||||
return _proxyDictionary;
|
|
||||||
|
|
||||||
NSMutableDictionary *proxyDict = [[NSMutableDictionary alloc]init];
|
|
||||||
|
|
||||||
// depricated constants with HTTPS
|
|
||||||
[proxyDict setObject:@1 forKey:@"HTTPSEnable"];
|
|
||||||
[proxyDict setObject:self.httpsProxyIP forKey:(NSString *)kCFStreamPropertyHTTPSProxyHost];
|
|
||||||
[proxyDict setObject:self.sdPort forKey:(NSString *)kCFStreamPropertyHTTPSProxyPort];
|
|
||||||
|
|
||||||
self.proxyDictionary = [proxyDict copy];
|
|
||||||
return self.proxyDictionary;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSDictionary*)campaignHeader {
|
|
||||||
|
|
||||||
if (YES == [self isValidFreeBeeObj]) {
|
|
||||||
|
|
||||||
if (self.campaignHeaderDictionary)
|
|
||||||
return self.campaignHeaderDictionary;
|
|
||||||
|
|
||||||
NSArray *urlPieces = [self.sdUrl componentsSeparatedByString:@"?"];
|
|
||||||
NSMutableString *pass = [[NSMutableString alloc]init];
|
|
||||||
pass = urlPieces[1];
|
|
||||||
|
|
||||||
NSData *plainData = [[NSString stringWithFormat:@"vzServices:%@", pass] dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
NSString *base64string = [@"Basic " stringByAppendingString:[plainData base64EncodedStringWithOptions:0]];
|
|
||||||
|
|
||||||
if (base64string.length) {
|
|
||||||
|
|
||||||
self.campaignHeaderDictionary = @{@"Proxy-Authorization":base64string};
|
|
||||||
return self.campaignHeaderDictionary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isValidFreeBeeObj {
|
|
||||||
|
|
||||||
if (self.sdUrl)
|
|
||||||
return YES;
|
|
||||||
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isExpired {
|
|
||||||
|
|
||||||
return [[NSDate date] compare:self.expirationDate] == NSOrderedDescending ? YES : NO;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
@ -1,52 +0,0 @@
|
|||||||
//
|
|
||||||
// MFFreebeeHandler.h
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Patrick Sommer on 1/3/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@class FreeBeeAuthObject;
|
|
||||||
@class MVMCoreOperation;
|
|
||||||
@class MFFreebeeOperation;
|
|
||||||
|
|
||||||
typedef void(^FreebeeLoadFinishedHandler)(MVMCoreOperation* _Nullable freebeeOperation, BOOL isValid);
|
|
||||||
|
|
||||||
@interface MFFreebeeHandler : NSObject
|
|
||||||
|
|
||||||
@property(nullable, nonatomic, strong, readonly) FreeBeeAuthObject* freeBeeAuthObj;
|
|
||||||
|
|
||||||
@property(nonatomic, readonly) BOOL isValidCampaign;
|
|
||||||
@property(nonatomic, readonly) MFFreebeeOperation* _Nullable freebeeOperation;
|
|
||||||
|
|
||||||
+ (nullable instancetype)sharedHandler;
|
|
||||||
|
|
||||||
- (void)activateFreeBeeIfServerEnabled;
|
|
||||||
- (void)invalidateFreeBeeState;
|
|
||||||
|
|
||||||
- (void)processFreeBeeAuthRequestWithCompletionHandler:(nullable FreebeeLoadFinishedHandler)completionHandler;
|
|
||||||
- (BOOL)canProceedWithFreebeeAuthRequest;
|
|
||||||
- (BOOL)isFreeBeeEnabled;
|
|
||||||
- (BOOL)isExpired;
|
|
||||||
|
|
||||||
- (void)enableFreeBeeForCurrentModule:(BOOL)enable;
|
|
||||||
- (BOOL)isFreeBeeEnabledForCurrentModule;
|
|
||||||
- (BOOL)isExcludedModule:(nullable NSString*)parentPageType;
|
|
||||||
- (BOOL)isAllowedPage:(nullable NSString*)pageType;
|
|
||||||
|
|
||||||
- (void)printStatusDescription;
|
|
||||||
|
|
||||||
- (nullable NSDictionary*)proxyDictionaryforUrl:(nullable NSURL*)url;
|
|
||||||
- (nullable NSDictionary*)campaignHeaderforUrl:(nullable NSURL*)url;
|
|
||||||
|
|
||||||
- (BOOL)isFreeBeeAuthorizedValidUrl:(nullable NSURL*)url;
|
|
||||||
- (nullable NSString*)urlForidFromConfigDict:(nonnull NSString*)urlId;
|
|
||||||
|
|
||||||
// Tries to get the data using freebee. If freebee is not enabled, gets the data without freebee.
|
|
||||||
- (nullable NSData*)freebee_dataWithContentsOfURL:(NSURL *_Nullable)url;
|
|
||||||
- (nullable NSCachedURLResponse*)freebee_dataWithImageURL:(NSURL *_Nullable)imageURL;
|
|
||||||
|
|
||||||
- (void)configureFreeBeeWithDict:(nullable NSDictionary*)configDict withSessionReset:(BOOL)isReset;
|
|
||||||
@end
|
|
||||||
@ -1,654 +0,0 @@
|
|||||||
//
|
|
||||||
// MFFreebeeHandler.m
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Patrick Sommer on 1/3/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "MFFreebeeHandler.h"
|
|
||||||
#import <MVMCore/NSDictionary+MFConvenience.h>
|
|
||||||
#import "FreeBeeAuthObject.h"
|
|
||||||
#import "FreeBeeUrlObject.h"
|
|
||||||
#import "Reachability.h"
|
|
||||||
#import "MFFreebeeOperation.h"
|
|
||||||
#import "MVMCoreConstants.h"
|
|
||||||
#import "MVMCoreSessionObject.h"
|
|
||||||
#import "MVMCoreJSONConstants.h"
|
|
||||||
#import "MVMCoreLoadHandler.h"
|
|
||||||
#import "MVMCoreLoggingHandler.h"
|
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, FreeBeeCampaignState) {
|
|
||||||
|
|
||||||
FreeBeeCampaignStateNotDetermined,
|
|
||||||
FreeBeeCampaignStateBusy,
|
|
||||||
FreeBeeCampaignStateInvalid,
|
|
||||||
FreeBeeCampaignStateValid,
|
|
||||||
FreeBeeCampaignStateExpired,
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ENABLE_FREEBEE_LOCAL_TEST 0
|
|
||||||
@interface MFFreebeeHandler()<FreeBeeTaskFinished>
|
|
||||||
|
|
||||||
@property(nonatomic, strong) NSString* authString;
|
|
||||||
|
|
||||||
@property(nonatomic, strong) FreeBeeAuthObject* freeBeeAuthObj;
|
|
||||||
@property(nonatomic, assign) NSTimeInterval requestTimeoutInterval;
|
|
||||||
@property(nonatomic, assign) FreeBeeCampaignState currentFreeBeeCampaignState;
|
|
||||||
@property(nonatomic, strong) NSMutableArray* freeBeeUrls;
|
|
||||||
@property(nonatomic, strong) NSArray* excludedModulesForFreeBee;
|
|
||||||
@property(nonatomic, strong) NSArray* enabledRootPagesForFreebee;
|
|
||||||
|
|
||||||
@property(nonatomic, strong) NSMutableDictionary* configDictionary;
|
|
||||||
@property(nonatomic) BOOL freeBeeEnabled;
|
|
||||||
@property(nonatomic) BOOL freeBeeEnabledForCurrentModule;
|
|
||||||
@property(nonatomic) BOOL isFreeBeeServerEnabled;
|
|
||||||
|
|
||||||
@property(nonatomic) Reachability* reachability;
|
|
||||||
|
|
||||||
@property(nonatomic) MFFreebeeOperation* freebeeOperation;
|
|
||||||
@property(nonatomic) FreebeeLoadFinishedHandler completionHandler;
|
|
||||||
|
|
||||||
// An operation queue for top alerts
|
|
||||||
@property (nonnull, strong, nonatomic) NSOperationQueue *freebeeOperationQueue;
|
|
||||||
|
|
||||||
- (void)processFreeBeeState:(nullable FreebeeLoadFinishedHandler)completionHandler;
|
|
||||||
- (void)processAuthRequest:(nullable FreebeeLoadFinishedHandler)completionHandler;
|
|
||||||
|
|
||||||
- (void)updateWithConfigDictionary:(nullable NSDictionary*)configDict;
|
|
||||||
- (NSURLRequest*)authRequestWithConfigDict:(NSDictionary*)configDict;
|
|
||||||
|
|
||||||
- (BOOL)isCampaignStateNotDetermined;
|
|
||||||
|
|
||||||
- (FreeBeeCampaignState)processResponse:(NSData*)data withExtraParams:(NSDictionary*)extraParams;
|
|
||||||
- (void)configureMFFreeBeeSession;
|
|
||||||
- (NSData *)sendSynchronousRequest:(NSURL *)url
|
|
||||||
returningResponse:(__autoreleasing NSURLResponse **)response
|
|
||||||
error:(__autoreleasing NSError **)error;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation MFFreebeeHandler
|
|
||||||
|
|
||||||
+ (nullable instancetype)sharedHandler {
|
|
||||||
static dispatch_once_t once;
|
|
||||||
static MFFreebeeHandler* sharedHandler;
|
|
||||||
|
|
||||||
dispatch_once(&once, ^ {
|
|
||||||
|
|
||||||
sharedHandler = [[self alloc] init];
|
|
||||||
sharedHandler.authString = nil;
|
|
||||||
sharedHandler.freeBeeAuthObj = nil;
|
|
||||||
sharedHandler.currentFreeBeeCampaignState = FreeBeeCampaignStateNotDetermined;
|
|
||||||
sharedHandler.excludedModulesForFreeBee = nil;
|
|
||||||
sharedHandler.freeBeeEnabledForCurrentModule = NO;
|
|
||||||
sharedHandler.requestTimeoutInterval = 1;
|
|
||||||
sharedHandler.isFreeBeeServerEnabled = NO;
|
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:sharedHandler selector:@selector(responseJSONUpdated:) name:NotificationResponseLoaded object:nil];
|
|
||||||
|
|
||||||
sharedHandler.freebeeOperationQueue = [[NSOperationQueue alloc] init];
|
|
||||||
sharedHandler.freebeeOperationQueue.maxConcurrentOperationCount = 1;
|
|
||||||
});
|
|
||||||
|
|
||||||
return sharedHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark -
|
|
||||||
#pragma mark Public Methods
|
|
||||||
|
|
||||||
//Activate FreeBee Feature at certain point
|
|
||||||
- (void)activateFreeBeeIfServerEnabled {
|
|
||||||
|
|
||||||
if (self.isFreeBeeServerEnabled)
|
|
||||||
self.freeBeeEnabled = YES;
|
|
||||||
else
|
|
||||||
self.freeBeeEnabled = NO;
|
|
||||||
|
|
||||||
MVMCoreLog(@"FreeBee status is %d", [[MFFreebeeHandler sharedHandler] isFreeBeeEnabled]);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)invalidateFreeBeeState {
|
|
||||||
|
|
||||||
MVMCoreLog(@"FreeBee State Invalidated");
|
|
||||||
if (self.currentFreeBeeCampaignState != FreeBeeCampaignStateBusy) {
|
|
||||||
self.currentFreeBeeCampaignState = FreeBeeCampaignStateNotDetermined;
|
|
||||||
[[MVMCoreSessionObject sharedGlobal].freeBeeSession invalidateAndCancel];
|
|
||||||
[MVMCoreSessionObject sharedGlobal].freeBeeSession = nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)processFreeBeeAuthRequestWithCompletionHandler:(nullable FreebeeLoadFinishedHandler)completionHandler {
|
|
||||||
|
|
||||||
if ([self isExpired]) {
|
|
||||||
[self invalidateFreeBeeState];
|
|
||||||
}
|
|
||||||
[self processFreeBeeState:completionHandler];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)canProceedWithFreebeeAuthRequest {
|
|
||||||
|
|
||||||
if ([self isFreeBeeEnabled] && ([self isCampaignStateNotDetermined] || [self isExpired]))
|
|
||||||
return YES;
|
|
||||||
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isFreeBeeEnabled {
|
|
||||||
return self.freeBeeEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isValidCampaign {
|
|
||||||
if (self.currentFreeBeeCampaignState == FreeBeeCampaignStateValid ) {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isExpired {
|
|
||||||
return [self.freeBeeAuthObj isExpired];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)enableFreeBeeForCurrentModule:(BOOL)enable {
|
|
||||||
if (self.isFreeBeeEnabled)
|
|
||||||
self.freeBeeEnabledForCurrentModule = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isFreeBeeEnabledForCurrentModule {
|
|
||||||
return self.freeBeeEnabledForCurrentModule;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isExcludedModule:(nullable NSString*)parentPageType {
|
|
||||||
|
|
||||||
if (self.excludedModulesForFreeBee.count == 0)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
if (parentPageType.length) {
|
|
||||||
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"%@ =[cd] SELF", parentPageType];
|
|
||||||
NSArray* subArray = [self.excludedModulesForFreeBee filteredArrayUsingPredicate:predicate];
|
|
||||||
if (subArray.count)
|
|
||||||
return YES;
|
|
||||||
else
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isAllowedPage:(nullable NSString*)pageType {
|
|
||||||
|
|
||||||
if (!self.enabledRootPagesForFreebee.count) {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
if (pageType.length) {
|
|
||||||
return [self.enabledRootPagesForFreebee containsObject:pageType];
|
|
||||||
}
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)printStatusDescription {
|
|
||||||
|
|
||||||
if ([[MFFreebeeHandler sharedHandler] isValidCampaign]) {
|
|
||||||
MVMCoreLog(@"FreeBee Valid Campaign");
|
|
||||||
} else {
|
|
||||||
MVMCoreLog(@"FreeBee Invalid Campaign");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSDictionary*)proxyDictionaryforUrl:(nullable NSURL*)url {
|
|
||||||
|
|
||||||
return [self.freeBeeAuthObj proxyDictionaryForUrl:url];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSDictionary*)campaignHeaderforUrl:(nullable NSURL*)url {
|
|
||||||
|
|
||||||
return [self.freeBeeAuthObj campaignHeaderForUrl:url];
|
|
||||||
}
|
|
||||||
|
|
||||||
//make it protocol dependent
|
|
||||||
- (BOOL)isFreeBeeAuthorizedValidUrl:(nullable NSURL*)url {
|
|
||||||
|
|
||||||
//if validated url has prefix, then return YES
|
|
||||||
FreeBeeUrlObject* urlObject = [self.freeBeeAuthObj freebeeUrlObjectForUrl:url];
|
|
||||||
|
|
||||||
if (urlObject)
|
|
||||||
return YES;
|
|
||||||
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSString*)urlForidFromConfigDict:(nonnull NSString*)urlId {
|
|
||||||
|
|
||||||
NSArray* authUrls = [self.configDictionary arrayForKey:@"authUrls"];
|
|
||||||
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"urlId = %@",urlId];
|
|
||||||
|
|
||||||
NSArray* matchedUrl = [authUrls filteredArrayUsingPredicate:predicate];
|
|
||||||
if (matchedUrl.count) {
|
|
||||||
|
|
||||||
NSDictionary* authUrl = matchedUrl[0];
|
|
||||||
return authUrl[@"authUrl"];
|
|
||||||
}
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark FreeBee Helper for NSData
|
|
||||||
|
|
||||||
- (nullable NSData *)freebeeDataWithURL:(NSURL *)url response:(NSURLResponse **)response {
|
|
||||||
NSData *data = nil;
|
|
||||||
NSDictionary *proxyDict = [self proxyDictionaryforUrl:url];
|
|
||||||
|
|
||||||
if ([self isFreeBeeEnabled] &&
|
|
||||||
[self isValidCampaign] && proxyDict &&
|
|
||||||
![self isExpired] && [self isFreeBeeEnabledForCurrentModule]) {
|
|
||||||
|
|
||||||
MVMCoreLog(@"Free Data Url, %@", url);
|
|
||||||
NSError *error = nil;
|
|
||||||
data = [self sendSynchronousRequest:url returningResponse:response error:&error];
|
|
||||||
if (error) {
|
|
||||||
data = nil;
|
|
||||||
}
|
|
||||||
MVMCoreLog(@"freebee_dataWithContentsOfURL:Free Data, %lu", (unsigned long)data.length);
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSData*)freebee_dataWithContentsOfURL:(NSURL *)url {
|
|
||||||
NSData *data = [self freebeeDataWithURL:url response:nil];
|
|
||||||
if (!data) {
|
|
||||||
data = [NSData dataWithContentsOfURL:url];
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (nullable NSCachedURLResponse*)freebee_dataWithImageURL:(NSURL *)imageURL {
|
|
||||||
|
|
||||||
NSURLResponse *response = nil;
|
|
||||||
NSData *data = [self freebeeDataWithURL:imageURL response:&response];
|
|
||||||
if (data) {
|
|
||||||
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:data];
|
|
||||||
return cachedResponse;
|
|
||||||
}
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - FreeBee Registration
|
|
||||||
- (void)responseJSONUpdated:(nonnull NSNotification *)notification {
|
|
||||||
|
|
||||||
#if !ENABLE_FREEBEE_LOCAL_TEST
|
|
||||||
NSDictionary *module = [notification.userInfo dictWithChainOfKeysOrIndexes:@[KeyModuleMap, @"FreeBeeRollout"]];
|
|
||||||
#else
|
|
||||||
NSDictionary *module = [notification.userInfo dictWithChainOfKeysOrIndexes:@[KeyModuleMap, @"DeepLinkMapping"]];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (module) {
|
|
||||||
// Enable for testing hardcoded response
|
|
||||||
#if ENABLE_FREEBEE_LOCAL_TEST
|
|
||||||
NSString *plistPath = [[MVMCoreUtility bundleForMVMCore] pathForResource:@"freebeelaunchApp" ofType:@"json"];
|
|
||||||
NSData* data = [NSData dataWithContentsOfFile:plistPath];
|
|
||||||
NSDictionary* freeBeeConfigDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
|
|
||||||
module = [freeBeeConfigDictionary dictionaryForKey:@"FreeBeeRollout"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MVMCoreLog(@"*********************************FreeBee Logs Start**********************************");
|
|
||||||
MVMCoreLog(@"FreeBee launch App Json is %@", module);
|
|
||||||
MVMCoreLog(@"*********************************FreeBee Logs End**********************************");
|
|
||||||
NSString* freeBeeEnabledFlag = [module stringForKey:@"freeBeeEnabled"];
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeData" withExtraInfo:module];
|
|
||||||
|
|
||||||
if ([freeBeeEnabledFlag isEqualToString:@"Y"]) {
|
|
||||||
|
|
||||||
self.isFreeBeeServerEnabled = YES;
|
|
||||||
self.authString = [module stringForKey:@"proxyServerUrl"];
|
|
||||||
if (self.authString) {
|
|
||||||
|
|
||||||
NSDictionary* configDict = [module dictionaryForKey:@"freeBeeData"];
|
|
||||||
[self configureFreeBeeWithDict:configDict withSessionReset:NO];
|
|
||||||
self.excludedModulesForFreeBee = [module arrayForKey:@"disabledModules"];
|
|
||||||
self.enabledRootPagesForFreebee = [module arrayForKey:@"enabledPages"];
|
|
||||||
|
|
||||||
NSString* timeOut = [module stringForKey:@"authRequestTimeOut"];
|
|
||||||
NSTimeInterval time = [timeOut doubleValue];
|
|
||||||
if (time > 0.f)
|
|
||||||
self.requestTimeoutInterval = time;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
[self configureFreeBeeWithDict:nil withSessionReset:NO];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
[self configureFreeBeeWithDict:nil withSessionReset:NO];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)configureFreeBeeWithDict:(nullable NSDictionary*)configDict withSessionReset:(BOOL)isReset {
|
|
||||||
|
|
||||||
if (configDict) {
|
|
||||||
|
|
||||||
[self updateWithConfigDictionary:configDict];
|
|
||||||
[self enableReachability:YES];
|
|
||||||
} else {
|
|
||||||
|
|
||||||
[self invalidateFreeBeeState];
|
|
||||||
[self updateWithConfigDictionary:nil];
|
|
||||||
if (isReset) {
|
|
||||||
|
|
||||||
[self enableReachability:NO];
|
|
||||||
[[MVMCoreSessionObject sharedGlobal].freeBeeSession invalidateAndCancel];
|
|
||||||
[MVMCoreSessionObject sharedGlobal].freeBeeSession = nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - FreeBee State Machine SetUp
|
|
||||||
- (void)processFreeBeeState:(nullable FreebeeLoadFinishedHandler)completionHandler {
|
|
||||||
|
|
||||||
switch (self.currentFreeBeeCampaignState) {
|
|
||||||
|
|
||||||
case FreeBeeCampaignStateBusy:
|
|
||||||
[self processBusyState];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FreeBeeCampaignStateNotDetermined:
|
|
||||||
[self processAuthRequest:completionHandler];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FreeBeeCampaignStateValid:
|
|
||||||
[self enableReachability:YES];
|
|
||||||
self.completionHandler(nil, YES);
|
|
||||||
self.completionHandler = nil;
|
|
||||||
//start a timer request
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FreeBeeCampaignStateInvalid:
|
|
||||||
[self enableReachability:YES];
|
|
||||||
self.completionHandler(nil, YES);
|
|
||||||
self.completionHandler = nil;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)processBusyState {
|
|
||||||
if (!self.configDictionary) {
|
|
||||||
MVMCoreLog(@"FreeBee Response failed with error configDictionary:Empty");
|
|
||||||
self.freeBeeAuthObj = nil;
|
|
||||||
self.currentFreeBeeCampaignState = FreeBeeCampaignStateInvalid;
|
|
||||||
}
|
|
||||||
self.completionHandler(self.freebeeOperation, YES);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - Auth Request Handler
|
|
||||||
- (void)processAuthRequest:(nullable FreebeeLoadFinishedHandler)completionHandler {
|
|
||||||
|
|
||||||
if (self.freebeeOperation) {
|
|
||||||
|
|
||||||
self.currentFreeBeeCampaignState = FreeBeeCampaignStateBusy;
|
|
||||||
[self processBusyState];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
[self enableReachability:NO];
|
|
||||||
|
|
||||||
[[MVMCoreLoadHandler sharedGlobal] registerLoadQueue:self.freebeeOperationQueue];
|
|
||||||
|
|
||||||
self.completionHandler = completionHandler;
|
|
||||||
|
|
||||||
MVMCoreLog(@"Initializing Freebee Auth Session Call");
|
|
||||||
|
|
||||||
__weak MFFreebeeHandler* wSelf = self;
|
|
||||||
self.currentFreeBeeCampaignState = FreeBeeCampaignStateBusy;
|
|
||||||
|
|
||||||
NSURLRequest* request = [self authRequestWithConfigDict:self.configDictionary];
|
|
||||||
if (!request) {
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeError" withExtraInfo:nil];
|
|
||||||
wSelf.currentFreeBeeCampaignState = FreeBeeCampaignStateInvalid;
|
|
||||||
[self processFreeBeeState:nil];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//add operation to queue
|
|
||||||
self.freebeeOperation = [[MFFreebeeOperation alloc] initWithConfigDict:request Delegate:wSelf];
|
|
||||||
[self.freebeeOperationQueue addOperation:self.freebeeOperation];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updateWithConfigDictionary:(nullable NSDictionary*)configDict {
|
|
||||||
|
|
||||||
if (configDict && configDict.count) {
|
|
||||||
self.configDictionary = [NSMutableDictionary dictionaryWithDictionary:configDict];
|
|
||||||
} else {
|
|
||||||
|
|
||||||
[self.configDictionary removeAllObjects];
|
|
||||||
self.isFreeBeeServerEnabled = NO;
|
|
||||||
self.freeBeeEnabled = NO;
|
|
||||||
self.freeBeeEnabledForCurrentModule = NO;
|
|
||||||
self.enabledRootPagesForFreebee = nil;
|
|
||||||
self.excludedModulesForFreeBee = nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//warning:this needs to be modified for actual dictionary
|
|
||||||
- (NSURLRequest*)authRequestWithConfigDict:(NSDictionary*)configDict {
|
|
||||||
|
|
||||||
//Need to modify this code with config dictionary
|
|
||||||
if (self.authString.length == 0)
|
|
||||||
return nil;
|
|
||||||
|
|
||||||
NSURL *url = [NSURL URLWithString:self.authString];
|
|
||||||
|
|
||||||
//warning: For Initial testing we are putting
|
|
||||||
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:self.requestTimeoutInterval];
|
|
||||||
|
|
||||||
//Update headers
|
|
||||||
[request setHTTPMethod:@"POST"];
|
|
||||||
[request setValue:@"no-cache, no-store" forHTTPHeaderField:@"Cache-Control"];
|
|
||||||
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
|
||||||
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
|
|
||||||
|
|
||||||
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
|
||||||
[parameters setObject:@[configDict] forKey:@"sdAuthReq"];
|
|
||||||
|
|
||||||
MVMCoreLog(@"Freebee AuthRequest Params = %@",parameters);
|
|
||||||
NSError *error = nil;
|
|
||||||
NSData *data = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error];
|
|
||||||
[request setHTTPBody:data];
|
|
||||||
return [request copy];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - Helper Functions
|
|
||||||
- (BOOL)isCampaignStateNotDetermined {
|
|
||||||
|
|
||||||
if (self.currentFreeBeeCampaignState == FreeBeeCampaignStateNotDetermined)
|
|
||||||
return YES;
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - FreeBeeTaskFinished Protocol
|
|
||||||
- (void)updateWithResponse:(NSData*)data Error:(NSError*)error ExtraParams:(NSDictionary*) extraParams {
|
|
||||||
|
|
||||||
if (data.length > 0) {
|
|
||||||
self.currentFreeBeeCampaignState = [self processResponse:data withExtraParams:extraParams];
|
|
||||||
[self processFreeBeeState:nil];
|
|
||||||
} else {
|
|
||||||
// Empty response.
|
|
||||||
MVMCoreLog(@"FreeBee Auth Request failed with empty response");
|
|
||||||
self.currentFreeBeeCampaignState = FreeBeeCampaignStateInvalid;
|
|
||||||
|
|
||||||
if (error.description) {
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeError" withExtraInfo:@{@"description":error.description}];
|
|
||||||
} else {
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeError" withExtraInfo:extraParams];
|
|
||||||
}
|
|
||||||
[self processFreeBeeState:nil];
|
|
||||||
}
|
|
||||||
self.freebeeOperation = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (FreeBeeCampaignState)processResponse:(NSData*)data withExtraParams:(NSDictionary*)extraParams {
|
|
||||||
|
|
||||||
__weak MFFreebeeHandler* wSelf = self;
|
|
||||||
|
|
||||||
NSDictionary *jsonDictionary = nil;
|
|
||||||
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
|
||||||
MVMCoreLog(@"FreeBee Response is %@",responseString);
|
|
||||||
// Serialize the downloaded data to json object.
|
|
||||||
NSError *error = nil;
|
|
||||||
jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
|
|
||||||
|
|
||||||
MVMCoreLog(@"FreeBee init success with response %@", jsonDictionary);
|
|
||||||
if ([jsonDictionary isKindOfClass:[NSDictionary class]]) {
|
|
||||||
|
|
||||||
if (!self.freeBeeAuthObj) {
|
|
||||||
//warning:this needs to be modified for multiple urls
|
|
||||||
wSelf.freeBeeAuthObj = [[FreeBeeAuthObject alloc] init];
|
|
||||||
[wSelf.freeBeeAuthObj updateWithDictionary:jsonDictionary];
|
|
||||||
} else {
|
|
||||||
[wSelf.freeBeeAuthObj updateWithDictionary:jsonDictionary];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSMutableDictionary* logDict = [NSMutableDictionary dictionary];
|
|
||||||
|
|
||||||
if (jsonDictionary)
|
|
||||||
[logDict addEntriesFromDictionary:jsonDictionary];
|
|
||||||
|
|
||||||
if (extraParams)
|
|
||||||
[logDict addEntriesFromDictionary:extraParams];
|
|
||||||
|
|
||||||
if ([self.freeBeeAuthObj isValidFreeBeeSessionAuthObject]) {
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeSuccess" withExtraInfo:logDict];
|
|
||||||
MVMCoreLog(@"FreeBee Response Validated");
|
|
||||||
[self configureMFFreeBeeSession];
|
|
||||||
return FreeBeeCampaignStateValid;
|
|
||||||
}
|
|
||||||
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeError" withExtraInfo:logDict];
|
|
||||||
|
|
||||||
MVMCoreLog(@"FreeBee Response failed with error");
|
|
||||||
wSelf.freeBeeAuthObj = nil;
|
|
||||||
return FreeBeeCampaignStateInvalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error.description) {
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeError" withExtraInfo:@{@"description":error.description}];
|
|
||||||
} else {
|
|
||||||
[MVMCoreLoggingHandler logWithDelegateWithObject:nil withName:@"freeBeeError" withExtraInfo:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
return FreeBeeCampaignStateInvalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)configureMFFreeBeeSession {
|
|
||||||
|
|
||||||
MVMCoreLog(@"FreeBee Configure Session");
|
|
||||||
|
|
||||||
//Assign The new Session Configuration sice its not possible to modify the existing session, we need to
|
|
||||||
MVMCoreSessionObject *sessionSingleton = [MVMCoreSessionObject sharedGlobal];
|
|
||||||
NSURLSession* session = sessionSingleton.session;
|
|
||||||
NSURLSessionConfiguration *configuration = session.configuration;
|
|
||||||
|
|
||||||
NSURL* baseUrl = sessionSingleton.baseURL;
|
|
||||||
configuration.connectionProxyDictionary = [[MFFreebeeHandler sharedHandler] proxyDictionaryforUrl:baseUrl];
|
|
||||||
|
|
||||||
if (configuration.connectionProxyDictionary) {
|
|
||||||
|
|
||||||
MVMCoreLog("Creating New MFSSeeion object with configuration dict %@",configuration.connectionProxyDictionary);
|
|
||||||
MVMCoreLog("Creating New MFSSeeion object with Delegate %@, Op Queue %@",session.delegate, session.delegateQueue);
|
|
||||||
sessionSingleton.freeBeeSession = [NSURLSession sessionWithConfiguration:configuration delegate:session.delegate delegateQueue:session.delegateQueue];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Syncchronous request to fetch NSData
|
|
||||||
- (NSData *)sendSynchronousRequest:(NSURL *)url
|
|
||||||
returningResponse:(__autoreleasing NSURLResponse **)response
|
|
||||||
error:(__autoreleasing NSError **)error {
|
|
||||||
|
|
||||||
dispatch_group_t group = dispatch_group_create();
|
|
||||||
dispatch_group_enter(group);
|
|
||||||
|
|
||||||
NSError __block *err = NULL;
|
|
||||||
NSData __block *data;
|
|
||||||
NSURLResponse __block *resp;
|
|
||||||
|
|
||||||
NSURLSession *session = nil;
|
|
||||||
NSOperationQueue* queue = [NSOperationQueue currentQueue];
|
|
||||||
|
|
||||||
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
|
|
||||||
|
|
||||||
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
|
|
||||||
configuration.connectionProxyDictionary = [[MFFreebeeHandler sharedHandler] proxyDictionaryforUrl:url];
|
|
||||||
|
|
||||||
session = [NSURLSession sessionWithConfiguration:configuration delegate:session.delegate delegateQueue:queue];
|
|
||||||
|
|
||||||
NSDictionary* campaignDictionary = [[MFFreebeeHandler sharedHandler] campaignHeaderforUrl:url];
|
|
||||||
if (campaignDictionary) {
|
|
||||||
[request addValue:campaignDictionary[@"Proxy-Authorization"] forHTTPHeaderField:@"Proxy-Authorization"];
|
|
||||||
}
|
|
||||||
|
|
||||||
[[session dataTaskWithRequest:request
|
|
||||||
completionHandler:^(NSData* _data, NSURLResponse* _response, NSError* _error) {
|
|
||||||
|
|
||||||
resp = _response;
|
|
||||||
err = _error;
|
|
||||||
data = _data;
|
|
||||||
dispatch_group_leave(group);
|
|
||||||
|
|
||||||
}] resume];
|
|
||||||
|
|
||||||
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
|
|
||||||
|
|
||||||
if (response) {
|
|
||||||
*response = resp;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
*error = err;
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
#pragma mark - Reachibility Integration
|
|
||||||
- (void)enableReachability:(BOOL)enable {
|
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
|
||||||
if (enable) {
|
|
||||||
self->_reachability = [Reachability reachabilityForInternetConnection];
|
|
||||||
// Observe the kNetworkReachabilityChangedNotification. When that notification is posted, the method reachabilityChanged will be called.
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityDidChange:) name:kReachabilityChangedNotification object:nil];
|
|
||||||
[self->_reachability startNotifier];
|
|
||||||
} else if (self->_reachability) {
|
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
|
|
||||||
[self->_reachability stopNotifier];
|
|
||||||
self->_reachability = nil;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)reachabilityDidChange:(NSNotification *)notification {
|
|
||||||
|
|
||||||
MVMCoreLog(@"Device Reachability Changed");
|
|
||||||
Reachability *reachability = (Reachability *)[notification object];
|
|
||||||
|
|
||||||
switch (reachability.currentReachabilityStatus) {
|
|
||||||
case NotReachable: {
|
|
||||||
MVMCoreLog(@"Unreachable");
|
|
||||||
[self invalidateFreeBeeState];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ReachableViaWWAN: {
|
|
||||||
MVMCoreLog(@"Reachable via wlan");
|
|
||||||
[self invalidateFreeBeeState];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ReachableViaWiFi: {
|
|
||||||
MVMCoreLog(@"Reachable via wifi");
|
|
||||||
[self invalidateFreeBeeState];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - NSObject Methods
|
|
||||||
- (void)dealloc {
|
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:NotificationResponseLoaded object:nil];
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
//
|
|
||||||
// MFFreebeeOperation.h
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Bansal, Tapan on 07/09/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
|
||||||
#import "MVMCoreOperation.h"
|
|
||||||
|
|
||||||
@protocol FreeBeeTaskFinished<NSObject>
|
|
||||||
|
|
||||||
-(void)updateWithResponse:(NSData*)data Error:(NSError*)error ExtraParams:(NSDictionary*) extraParams;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface MFFreebeeOperation : MVMCoreOperation
|
|
||||||
|
|
||||||
-(instancetype)initWithConfigDict:(NSURLRequest*)freeBeeAuthRequest Delegate:(id<FreeBeeTaskFinished>)delegate;
|
|
||||||
|
|
||||||
@end
|
|
||||||
@ -1,106 +0,0 @@
|
|||||||
//
|
|
||||||
// MFFreebeeOperation.m
|
|
||||||
// mobilefirst
|
|
||||||
//
|
|
||||||
// Created by Bansal, Tapan on 07/09/17.
|
|
||||||
// Copyright © 2017 Verizon Wireless. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "MFFreebeeOperation.h"
|
|
||||||
#import "MVMCoreLoggingHandler.h"
|
|
||||||
|
|
||||||
@interface MFFreebeeOperation()
|
|
||||||
|
|
||||||
@property(nonatomic, strong) NSURLRequest *freeBeeAuthRequest;
|
|
||||||
@property(weak) id<FreeBeeTaskFinished> delegate;
|
|
||||||
@property(nonatomic) dispatch_semaphore_t semaphore;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation MFFreebeeOperation
|
|
||||||
|
|
||||||
-(instancetype)initWithConfigDict:(NSURLRequest*)freeBeeAuthRequest Delegate:(id<FreeBeeTaskFinished>)delegate {
|
|
||||||
|
|
||||||
if(self = [super init]) {
|
|
||||||
|
|
||||||
self.freeBeeAuthRequest = freeBeeAuthRequest;
|
|
||||||
self.delegate = delegate;
|
|
||||||
_semaphore = dispatch_semaphore_create(0);
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
-(void)main {
|
|
||||||
|
|
||||||
[super main];
|
|
||||||
|
|
||||||
if ([self checkAndHandleForCancellation]){
|
|
||||||
[self markAsFinished];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
[self processAuthRequest];
|
|
||||||
[self markAsFinished];
|
|
||||||
}
|
|
||||||
|
|
||||||
-(void)unlock {
|
|
||||||
|
|
||||||
dispatch_semaphore_signal(_semaphore);
|
|
||||||
}
|
|
||||||
|
|
||||||
-(void)processAuthRequest {
|
|
||||||
|
|
||||||
NSURLRequest *request = self.freeBeeAuthRequest;
|
|
||||||
|
|
||||||
if (request == nil) {
|
|
||||||
[self.delegate updateWithResponse:nil Error:nil ExtraParams:nil];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
MVMCoreLog(@"*********************************FreeBee Auth Call Start**********************************");
|
|
||||||
|
|
||||||
NSURLResponse *response = nil;
|
|
||||||
NSError *error = nil;
|
|
||||||
|
|
||||||
NSDate *date = [NSDate date];
|
|
||||||
NSData *data = [self sendSynchronousRequest:request returningResponse:&response error:&error];
|
|
||||||
NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:date];
|
|
||||||
|
|
||||||
MVMCoreLog(@"Freebee Auth Call Request Time response for freebee is %f", interval);
|
|
||||||
NSDictionary *extraParams = @{@"ResponseTime":@(interval)};
|
|
||||||
[self.delegate updateWithResponse:[data copy] Error:error ExtraParams:extraParams];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response
|
|
||||||
error:(NSError **)error {
|
|
||||||
|
|
||||||
NSError __block *err = NULL;
|
|
||||||
NSData __block *data;
|
|
||||||
NSURLResponse __block *resp;
|
|
||||||
|
|
||||||
[[[NSURLSession sharedSession] dataTaskWithRequest:request
|
|
||||||
completionHandler:^(NSData* _data, NSURLResponse* _response, NSError* _error) {
|
|
||||||
resp = _response;
|
|
||||||
err = _error;
|
|
||||||
data = _data;
|
|
||||||
// this is for local testing
|
|
||||||
#if 0
|
|
||||||
NSString *plistPath = [[MVMCoreUtility bundleForMVMCore] pathForResource:@"freebee" ofType:@"json"];
|
|
||||||
data = [NSData dataWithContentsOfFile:plistPath];
|
|
||||||
err = nil;
|
|
||||||
#endif
|
|
||||||
[self unlock];
|
|
||||||
}] resume];
|
|
||||||
|
|
||||||
dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER);
|
|
||||||
|
|
||||||
if (response) {
|
|
||||||
*response = resp;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
*error = err;
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"statusCode": 200,
|
|
||||||
"message": "Success",
|
|
||||||
"vidToken": "OAlTpG0WFQ_qKHdnjBQueUB_SjZk46rjTGxxSGppKd8=",
|
|
||||||
"sdAuthResp": [
|
|
||||||
{
|
|
||||||
"urlId": "1",
|
|
||||||
"authRespCode": 1200,
|
|
||||||
"httpsProxyIP": "152.198.7.159",
|
|
||||||
"sdPort": 22779,
|
|
||||||
"sdUrl": "mobile-eqa6.vzw.com:443?vzSvc=OAlTpG0WFQ_qKHdnjBQueUB_SjZk46rjTGxxSGppKd8=&vispVzKey=44595039&vispIconFg=1&vispUsr=44595039:sNNHcJP2nYGtcuiCaVZcHQ==&vispAuthSid=CIAAACAKJwE&vispExpTime=1511370770&vispAuthKey=25858536&vispAuthSign=0.19._y9flLw7123TMhTcHUe7IVUmzJZK4MhC5kC3A6FTvXw",
|
|
||||||
"sdConfExpiry": 1512370770
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"FreeBeeRollout": {
|
|
||||||
"ResponseInfo": {
|
|
||||||
"locale": "EN",
|
|
||||||
"type": "Success",
|
|
||||||
"code": "00000",
|
|
||||||
"message": "0",
|
|
||||||
"userMessage": "0"
|
|
||||||
},
|
|
||||||
"authRequestTimeOut": "1",
|
|
||||||
"freeBeeEnabled": "Y",
|
|
||||||
"freeBeeData": {
|
|
||||||
"campaignToken": "CIAAIYAKqAE",
|
|
||||||
"authUrls": [
|
|
||||||
{
|
|
||||||
"urlId": "1",
|
|
||||||
"authUrl": "mobile-eqa6.vzw.com:443"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"disabledModules": ["gridwall"
|
|
||||||
],
|
|
||||||
"enabledPages": ["billOverview","myData","accountLanding", "deviceLanding"
|
|
||||||
],
|
|
||||||
|
|
||||||
"proxyServerUrl": "https://auth.svcs.verizon.com:22790/sd/v2/sdAuthorization/httpsProxy"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -12,7 +12,6 @@
|
|||||||
#import "MVMCoreLoadRequestOperation.h"
|
#import "MVMCoreLoadRequestOperation.h"
|
||||||
#import "MVMCoreCache.h"
|
#import "MVMCoreCache.h"
|
||||||
#import "MFHardCodedServerResponse.h"
|
#import "MFHardCodedServerResponse.h"
|
||||||
#import "MFFreebeeHandler.h"
|
|
||||||
#import "MVMCoreNavigationHandler.h"
|
#import "MVMCoreNavigationHandler.h"
|
||||||
#import "MVMCoreLoadObject.h"
|
#import "MVMCoreLoadObject.h"
|
||||||
#import "MVMCoreSessionObject.h"
|
#import "MVMCoreSessionObject.h"
|
||||||
@ -161,25 +160,6 @@
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
//adding Free Bee header
|
|
||||||
if ([[MFFreebeeHandler sharedHandler] isFreeBeeEnabled]
|
|
||||||
&& [[MFFreebeeHandler sharedHandler] isValidCampaign]) {
|
|
||||||
BOOL isAllowedPage = [[MFFreebeeHandler sharedHandler] isAllowedPage:requestParameters.pageType];
|
|
||||||
if (requestParameters.parentPageType.length) {
|
|
||||||
BOOL isExcluded = [[MFFreebeeHandler sharedHandler] isExcludedModule:requestParameters.parentPageType];
|
|
||||||
[[MFFreebeeHandler sharedHandler] enableFreeBeeForCurrentModule:!isExcluded];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isAllowedPage || (!isAllowedPage && [[MFFreebeeHandler sharedHandler] isFreeBeeEnabledForCurrentModule])) {
|
|
||||||
|
|
||||||
NSDictionary* campaignDictionary = [[MFFreebeeHandler sharedHandler] campaignHeaderforUrl:request.URL];
|
|
||||||
if (campaignDictionary) {
|
|
||||||
MVMCoreLog(@"Freebee Request Campaign Dictionary : %@", campaignDictionary);
|
|
||||||
[request addValue:campaignDictionary[@"Proxy-Authorization"] forHTTPHeaderField:@"Proxy-Authorization"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NSError *bodyError;
|
NSError *bodyError;
|
||||||
NSData *body = jsonData;
|
NSData *body = jsonData;
|
||||||
if (requestParameters.imageData) {
|
if (requestParameters.imageData) {
|
||||||
@ -331,20 +311,6 @@
|
|||||||
requestFinished(nil,error);
|
requestFinished(nil,error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([[MFFreebeeHandler sharedHandler] isFreeBeeEnabled]
|
|
||||||
&& [[MFFreebeeHandler sharedHandler] isValidCampaign]) {
|
|
||||||
BOOL isAllowedPage = [[MFFreebeeHandler sharedHandler] isAllowedPage:requestParameters.pageType];
|
|
||||||
//In case of error for time out, we need to revert to normal session object
|
|
||||||
if (isAllowedPage || (!isAllowedPage && [[MFFreebeeHandler sharedHandler] isFreeBeeEnabledForCurrentModule])) {
|
|
||||||
|
|
||||||
// to enable only for self server module
|
|
||||||
if ([MVMCoreSessionObject sharedGlobal].freeBeeSession) {
|
|
||||||
session = [MVMCoreSessionObject sharedGlobal].freeBeeSession;
|
|
||||||
MVMCoreLog(@"*********************************FreeBee Sponsored Request Start**********************************");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MVMCoreLog(@"********************************* Cookie Sent *********************************");
|
MVMCoreLog(@"********************************* Cookie Sent *********************************");
|
||||||
[[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] enumerateObjectsUsingBlock:^(NSHTTPCookie * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
[[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] enumerateObjectsUsingBlock:^(NSHTTPCookie * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
MVMCoreLog(@"Cookie Name: %@, Cookie Value: %@",obj.name, obj.value);
|
MVMCoreLog(@"Cookie Name: %@, Cookie Value: %@",obj.name, obj.value);
|
||||||
|
|||||||
@ -95,9 +95,3 @@ FOUNDATION_EXPORT const unsigned char MVMCoreVersionString[];
|
|||||||
#import <MVMCore/MVMCoreCache.h>
|
#import <MVMCore/MVMCoreCache.h>
|
||||||
#import <MVMCore/MVMCoreSessionTimeHandler.h>
|
#import <MVMCore/MVMCoreSessionTimeHandler.h>
|
||||||
#import <MVMCore/MVMCoreSessionObject.h>
|
#import <MVMCore/MVMCoreSessionObject.h>
|
||||||
|
|
||||||
// Main Views
|
|
||||||
|
|
||||||
|
|
||||||
//Freebee
|
|
||||||
#import <MVMCore/MFFreebeeHandler.h>
|
|
||||||
|
|||||||
@ -10,7 +10,6 @@
|
|||||||
#import <MVMCore/NSDictionary+MFConvenience.h>
|
#import <MVMCore/NSDictionary+MFConvenience.h>
|
||||||
#import "MVMCoreErrorObject.h"
|
#import "MVMCoreErrorObject.h"
|
||||||
#import "MVMCoreLoggingHandler.h"
|
#import "MVMCoreLoggingHandler.h"
|
||||||
#import "MFFreebeeHandler.h"
|
|
||||||
#import "MVMCoreGetterUtility.h"
|
#import "MVMCoreGetterUtility.h"
|
||||||
#import "MVMCoreObject.h"
|
#import "MVMCoreObject.h"
|
||||||
#import "MVMCoreConstants.h"
|
#import "MVMCoreConstants.h"
|
||||||
@ -575,18 +574,6 @@ static NSString * const STATIC_CACHE_COMPONENT = @"StaticCache.txt";
|
|||||||
NSURLSession *session = [MVMCoreSessionObject sharedGlobal].session;
|
NSURLSession *session = [MVMCoreSessionObject sharedGlobal].session;
|
||||||
NSURLCache *sharedCache = session.configuration.URLCache;
|
NSURLCache *sharedCache = session.configuration.URLCache;
|
||||||
NSURLRequest *request = [NSURLRequest requestWithURL:s7URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:ImageTimeOut];
|
NSURLRequest *request = [NSURLRequest requestWithURL:s7URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:ImageTimeOut];
|
||||||
|
|
||||||
//use Freebee to download image first if it is not already in the cache, then store image to cache
|
|
||||||
NSCachedURLResponse *cachedResponse = [sharedCache cachedResponseForRequest:request];
|
|
||||||
if (!cachedResponse.data) {
|
|
||||||
cachedResponse = [[MFFreebeeHandler sharedHandler] freebee_dataWithImageURL:s7URL];
|
|
||||||
if (cachedResponse) {
|
|
||||||
//system stores cache based datatask and check cache based on response,
|
|
||||||
//need to manually store cache for response
|
|
||||||
[sharedCache storeCachedResponse:cachedResponse forRequest:request];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//call nsurlsession again, if image is cached by Freebee, the second session will grab image data from cache instead of making another server call
|
|
||||||
NSURLSessionDownloadTask *downloadImageTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
|
NSURLSessionDownloadTask *downloadImageTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
|
||||||
NSData *data = [NSData dataWithContentsOfURL:location];
|
NSData *data = [NSData dataWithContentsOfURL:location];
|
||||||
//check data and response first, since they are nullable
|
//check data and response first, since they are nullable
|
||||||
|
|||||||
@ -13,9 +13,6 @@
|
|||||||
/// the session used for all requests.
|
/// the session used for all requests.
|
||||||
@property (nullable, strong, nonatomic) NSURLSession *session;
|
@property (nullable, strong, nonatomic) NSURLSession *session;
|
||||||
|
|
||||||
/// the session used for all Freebee requests.
|
|
||||||
@property (nullable, strong, nonatomic) NSURLSession *freeBeeSession;
|
|
||||||
|
|
||||||
/// The server base url (Until prepay is native, this will always be postpay).
|
/// The server base url (Until prepay is native, this will always be postpay).
|
||||||
@property (nullable, strong, nonatomic) NSURL *baseURL;
|
@property (nullable, strong, nonatomic) NSURL *baseURL;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user