From 4ee4692cd67094cb3a1d74f182a653d43ec2d921 Mon Sep 17 00:00:00 2001
From: Dani Palou <dani@moodle.com>
Date: Wed, 21 Aug 2019 11:05:10 +0200
Subject: [PATCH] MOBILE-3106 login: Check redirect if get site info fails

---
 src/classes/site.ts    | 10 +++++++++-
 src/providers/sites.ts | 14 ++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/classes/site.ts b/src/classes/site.ts
index e01cb15cc..07bf12cca 100644
--- a/src/classes/site.ts
+++ b/src/classes/site.ts
@@ -1454,7 +1454,15 @@ export class CoreSite {
                 preSets.noLogin = true;
                 preSets.useGet = true;
 
-                return this.wsProvider.callAjax('tool_mobile_get_public_config', {}, preSets);
+                return this.wsProvider.callAjax('tool_mobile_get_public_config', {}, preSets).catch((error2) => {
+                    if (this.getInfo() && this.isVersionGreaterEqualThan('3.8')) {
+                        // GET is supported, return the second error.
+                        return Promise.reject(error2);
+                    } else {
+                        // GET not supported or we don't know if it's supported. Return first error.
+                        return Promise.reject(error);
+                    }
+                });
             }
 
             return Promise.reject(error);
diff --git a/src/providers/sites.ts b/src/providers/sites.ts
index a80aca762..9588a3e60 100644
--- a/src/providers/sites.ts
+++ b/src/providers/sites.ts
@@ -470,6 +470,20 @@ export class CoreSitesProvider {
                             // Service supported but an error happened. Return error.
                             error.critical = true;
 
+                            if (error.errorcode == 'codingerror') {
+                                // This could be caused by a redirect. Check if it's the case.
+                                return this.utils.checkRedirect(siteUrl).then((redirect) => {
+                                    if (redirect) {
+                                        error.error = this.translate.instant('core.login.sitehasredirect');
+                                    } else {
+                                        // We can't be sure if there is a redirect or not. Display cannot connect error.
+                                        error.error = this.translate.instant('core.cannotconnect');
+                                    }
+
+                                    return Promise.reject(error);
+                                });
+                            }
+
                             return Promise.reject(error);
                         }