Untitled
unknown
plain_text
a month ago
14 kB
6
Indexable
// // HomePageWebviewPresenter.swift // UpGrad // // Created by Pawankumar Dhamane on 21/11/23. // Copyright © 2023 Upgrad. All rights reserved. // import UIKit import AppsFlyerLib class HomePageWebviewPresenter: BaseModulePresenter, HomePageWebviewModuleInput, HomePageWebviewViewOutput { var view: HomePageWebviewViewInput? var interactor: HomePageWebviewInteractorInput? var router: HomePageWebviewRouterInput? var webViewType: WebViewPage var redirectionUrl: String var pageName:String? var cookieDomain: String var authCookieName: String var dropLeadViewModel: DropLeadRequestModel! init(webViewType:WebViewPage, name:String?, redirectionUrl:String) { self.redirectionUrl = redirectionUrl self.webViewType = webViewType self.pageName = name let env = Utils.environment switch env { case "Staging": self.authCookieName = "upgrad-auth-token.dev" self.cookieDomain = ".upgrad.dev" break default: self.authCookieName = "upgrad-auth-token.production" self.cookieDomain = ".upgrad.com" break } super.init() } override func viewIsReady() { super.viewIsReady() self.loadWebView() self.dropLeadViewModel = DropLeadRequestModel() } func loadWebView() { var device_type = "mobile" if IS_IPAD { device_type = "tablet" } var homepageUrl = self.redirectionUrl //TODO revert commented only for testing on stage if let subDomain = UGDefaults.getValue(forKey: .homePageWebSubDomain, objectType: String.self), subDomain != "" { homepageUrl = homepageUrl.replacingOccurrences(of: "www", with: subDomain) } // homepageUrl = homepageUrl.replacingOccurrences(of: "www.upgrad.com", with: "staging-infinity-regular-app.upgrad.dev") // homepageUrl = homepageUrl.replacingOccurrences(of: "ww4.upgrad.com", with: "staging-infinity-regular-app.upgrad.dev") if homepageUrl.contains("?") { homepageUrl = homepageUrl + "&device_type=\(device_type)&platform_os=ios&agent_version=\(getCurrentAppVersion())&platform_version=\(UIDevice.current.systemVersion)&platform_agent=\(UIDevice.current.name)" } else { homepageUrl = homepageUrl + "?device_type=\(device_type)&platform_os=ios&agent_version=\(getCurrentAppVersion())&platform_version=\(UIDevice.current.systemVersion)&platform_agent=\(UIDevice.current.name)" } debugPrint("url \(homepageUrl)") let url = homepageUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" debugPrint("url 1\(url)") if let url = URL(string: url) { debugPrint("url web 1\(url)") debugPrint("cookie \(self.getAuthCookie())") if AppUser.isLoginUser() { self.view?.load(url: url, cookie: [self.getAuthCookie()]) } else { self.view?.load(url: url, cookie: [HTTPCookie]()) } } } func getAuthCookie() -> HTTPCookie { guard let authCookie = HTTPCookie(properties: [ .domain: self.cookieDomain, .path: "/", .name: self.authCookieName, .value: AppUser.currentUser().authToken ]) else { return HTTPCookie() } return authCookie } private func getCurrentAppVersion() -> String { guard let infoPlistService = DependencyManager.sharedInstance.resolve(InfoPlistService.self) else { return "" } return infoPlistService.getAppVersion() } override func setView(_ view: BaseModuleViewInput?) { self.view = view as? HomePageWebviewViewInput super.setView(view) } override func setInteractor(_ interactor: BaseModuleInteractorInput?) { self.interactor = interactor as? HomePageWebviewInteractorInput super.setInteractor(interactor) } override func setRouter(_ router: BaseModuleRouterInput?) { self.router = router as? HomePageWebviewRouterInput super.setRouter(router) } func getPageType() -> WebViewPage { return self.webViewType } func getRedirectionUrl() -> String { return self.redirectionUrl } func getPageName() -> String { return self.pageName ?? "" } func openSafariView(url:String) { self.router?.pushSafariView(url: url) } func openInAppWebView(url:String) { guard AppUser.isLoginUser() else { self.openSafariView(url: url) return } self.view?.showLoader(message: "Loading...") let observable = self.interactor?.getOneTimeTokenForWebApplicationForm() observable?.subscribe(onNext: {[weak self] token in guard let self = self else { return } guard let tokenString = token["oneTimeToken"] else { SnackBar.showSnackBarWithMessage(Strings.somethingWentWrong) return } var baseURLString: String? = UpGradCentralAPI.appSettingsService.networkConfig.globalConfigURL baseURLString = baseURLString?.replacingOccurrences(of: "/api", with: "") let mWebAppURL = url if let url = baseURLString, !tokenString.isEmpty { let urlString = (url + "/auto-login/").addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" if var url = URL(string: urlString) { url.appendQueryParam(for: "oneTimeToken", value: "\(tokenString)") url.appendQueryParam(for: "redirectUrl", value: "\(mWebAppURL)") url.appendQueryParam(for: "devicetype", value: "iOS") url.appendQueryParam(for: "app_version", value: "\(HelpAndSupportInteracter().getCurrentAppVersion())") url.appendQueryParam(for: "platform", value: "iOS") url.appendQueryParam(for: "appsflyer_id", value: "\(AppsFlyerLib.shared().getAppsFlyerUID())") var appID = "" if let propertiesPath = Bundle.main.object(forInfoDictionaryKey: Strings.appsFlyerKey) as? [String : String] { if let _ = propertiesPath[Strings.appsFlyerDevKey], let appleAppID = propertiesPath[Strings.appsFlyerAppID] { appID = appleAppID } } url.appendQueryParam(for: "appID", value: "\(appID)") debugPrint("web url \(url)") self.router?.presentSafariViewController(withUrl: url) } } else { self.router?.pushSafariView(url: url) } }, onError: { error in SnackBar.showSnackBarWithMessage(error.localizedDescription.components(separatedBy: ":").last ?? Strings.somethingWentWrong) self.view?.hideLoader() }, onCompleted: nil, onDisposed: nil) .disposed(by: self.bag) } func openWebPage(viewType: WebViewPage, name pageName:String?, redirectionUrl:String, vc:UIViewController?) { self.router?.openHomeWebPages(viewType: viewType, name: pageName, redirectionUrl: redirectionUrl, vc:vc) } func openProgramPage(slug:String) { self.router?.openProgramPage(slug: slug) } func reload(viewType: WebViewPage, name pageName:String?, redirectionUrl:String) { self.redirectionUrl = redirectionUrl self.webViewType = viewType self.pageName = pageName self.loadWebView() } func dismissPresentedViewController() { self.router?.dismissPresentedViewController() } func openSignInPage(title: String, eventModel: AuthEventModel) { self.router?.loadSignInPage(title: title, eventModel: eventModel) } func dropLead(programPackageKey: String?, pageCategory: String?, title: String) { self.dropLeadViewModel = LeadDropHelper.dropLead(leadSection: getPlateFormSection(title: title), course: programPackageKey, pageCategory: "pageCategory") self.interactor?.updateLead(leadViewModel: self.dropLeadViewModel!) .doLogging() .subscribe(onNext: {[weak self] response in if let dropLeadResponse = try? JSONDecoder().decode(DropLeadResponseModel.self, from: response.data) { self?.view?.onDropLeadCompletion?(dropLeadResponse.eventSequence?.firstByUser, dropLeadResponse.eventSequence?.firstByProgramAndUser, dropLeadResponse.leadIdentifier) } }, onError: { error in debugPrint(error) }).disposed(by: bag) } func getPlateFormSection(title: String) -> String { switch title { case ProgramPagePresenter.talkToUs: return Strings.inbound case ProgramPagePresenter.applyNow: return Strings.applyNow case ProgramPagePresenter.downloadBrochure: return Strings.downloadBrochure case ProgramPagePresenter.downloadCareerHandbook: return Strings.downloadPlacementReport case ProgramPagePresenter.downloadSyllabus: return Strings.downloadSyllabus default: return "" } } func getOneTimeToken(redirectUrl:String, pageTitle:String?, pageCategory:String?, action:String?, pageSlug:String?) { self.view?.showLoader(message: "Loading...") let observable = self.interactor?.getOneTimeTokenForWebApplicationForm() observable?.subscribe(onNext: {[weak self] token in guard let self = self else { return } guard let tokenString = token["oneTimeToken"] else { SnackBar.showSnackBarWithMessage(Strings.somethingWentWrong) return } self.invokeApplyNowAction(with: tokenString, redirectUrl: redirectUrl , pageTitle: pageTitle, pageCategory: pageCategory, action: action, pageSlug: pageSlug) }, onError: { error in SnackBar.showSnackBarWithMessage(error.localizedDescription.components(separatedBy: ":").last ?? Strings.somethingWentWrong) self.view?.hideLoader() }, onCompleted: nil, onDisposed: nil) .disposed(by: self.bag) } func invokeApplyNowAction(with token: String, redirectUrl:String, pageTitle:String?, pageCategory:String?, action:String?, pageSlug:String?) { var baseURLString: String? = UpGradCentralAPI.appSettingsService.networkConfig.globalConfigURL baseURLString = baseURLString?.replacingOccurrences(of: "/api", with: "") let mWebAppURL = redirectUrl if let url = baseURLString, !token.isEmpty { let urlString = (url + "/auto-login/").addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" if var url = URL(string: urlString) { url.appendQueryParam(for: "oneTimeToken", value: "\(token)") url.appendQueryParam(for: "redirectUrl", value: "\(mWebAppURL)") url.appendQueryParam(for: "devicetype", value: "iOS") url.appendQueryParam(for: "app_version", value: "\(HelpAndSupportInteracter().getCurrentAppVersion())") url.appendQueryParam(for: "page_title", value: pageTitle ?? "") url.appendQueryParam(for: "page_category", value: pageCategory ?? "") url.appendQueryParam(for: "action", value: action ?? "") url.appendQueryParam(for: "page_slug", value: pageSlug ?? "") url.appendQueryParam(for: "platform", value: "iOS") url.appendQueryParam(for: "manufacturer", value: "Apple") url.appendQueryParam(for: "brand", value: "\(UIDevice.modelName)") url.appendQueryParam(for: "model", value: "\(UIDevice.modelName)") url.appendQueryParam(for: "width", value: "\(UIScreen.main.bounds.width)") url.appendQueryParam(for: "height", value: "\(UIScreen.main.bounds.height)") url.appendQueryParam(for: "platform_version", value: "\(UIDevice.current.systemVersion)") url.appendQueryParam(for: "appsflyer_id", value: "\(AppsFlyerLib.shared().getAppsFlyerUID())") var appID = "" if let propertiesPath = Bundle.main.object(forInfoDictionaryKey: Strings.appsFlyerKey) as? [String : String] { if let _ = propertiesPath[Strings.appsFlyerDevKey], let appleAppID = propertiesPath[Strings.appsFlyerAppID] { appID = appleAppID } } url.appendQueryParam(for: "appID", value: "\(appID)") debugPrint("apply now url \(url)") self.router?.presentSafariViewController(withUrl: url) } } else if let baseURL = baseURLString { let fallBackURLString = baseURL + "/applications" if let url = URL(string: fallBackURLString) { debugPrint("apply now url \(url)") self.router?.presentSafariViewController(withUrl: url) } } } func openLearnForFreeCourseEnrollment(variantKey: String) { self.router?.navigateToLearnForFreeCourseEnrollment(for: variantKey) } func openLearnTabView() { self.router?.openLearnTab() } }
Editor is loading...
Leave a Comment