Untitled
unknown
plain_text
10 months ago
14 kB
9
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