Hex Artifact Content
Not logged in

Artifact dab4207e30769faea170cdb13a69e6b364e2137b:


0000: 2f 2a 0a 20 2a 20 4e 65 78 74 63 6c 6f 75 64 20  /*. * Nextcloud 
0010: 41 6e 64 72 6f 69 64 20 63 6c 69 65 6e 74 20 61  Android client a
0020: 70 70 6c 69 63 61 74 69 6f 6e 0a 20 2a 0a 20 2a  pplication. *. *
0030: 20 40 61 75 74 68 6f 72 20 41 6e 64 79 20 53 63   @author Andy Sc
0040: 68 65 72 7a 69 6e 67 65 72 0a 20 2a 20 43 6f 70  herzinger. * Cop
0050: 79 72 69 67 68 74 20 28 43 29 20 32 30 31 37 20  yright (C) 2017 
0060: 41 6e 64 79 20 53 63 68 65 72 7a 69 6e 67 65 72  Andy Scherzinger
0070: 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 43  . * Copyright (C
0080: 29 20 32 30 31 32 20 42 61 72 74 65 6b 20 50 72  ) 2012 Bartek Pr
0090: 7a 79 62 79 6c 73 6b 69 0a 20 2a 0a 20 2a 20 54  zybylski. *. * T
00a0: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
00b0: 72 65 65 20 73 6f 66 74 77 61 72 65 3a 20 79 6f  ree software: yo
00c0: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
00d0: 74 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64  te it and/or mod
00e0: 69 66 79 0a 20 2a 20 69 74 20 75 6e 64 65 72 20  ify. * it under 
00f0: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0100: 20 47 4e 55 20 41 66 66 65 72 6f 20 47 65 6e 65   GNU Affero Gene
0110: 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e  ral Public Licen
0120: 73 65 20 61 73 20 70 75 62 6c 69 73 68 65 64 20  se as published 
0130: 62 79 0a 20 2a 20 74 68 65 20 46 72 65 65 20 53  by. * the Free S
0140: 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69  oftware Foundati
0150: 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72 73 69  on, either versi
0160: 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69 63 65  on 3 of the Lice
0170: 6e 73 65 2c 20 6f 72 0a 20 2a 20 61 74 20 79 6f  nse, or. * at yo
0180: 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c  ur option) any l
0190: 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 20 2a  ater version.. *
01a0: 0a 20 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d  . * This program
01b0: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20   is distributed 
01c0: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74  in the hope that
01d0: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66   it will be usef
01e0: 75 6c 2c 0a 20 2a 20 62 75 74 20 57 49 54 48 4f  ul,. * but WITHO
01f0: 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  UT ANY WARRANTY;
0200: 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68   without even th
0210: 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  e implied warran
0220: 74 79 20 6f 66 0a 20 2a 20 4d 45 52 43 48 41 4e  ty of. * MERCHAN
0230: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
0240: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
0250: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
0260: 65 65 20 74 68 65 0a 20 2a 20 47 4e 55 20 41 66  ee the. * GNU Af
0270: 66 65 72 6f 20 47 65 6e 65 72 61 6c 20 50 75 62  fero General Pub
0280: 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20  lic License for 
0290: 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 20 2a  more details.. *
02a0: 0a 20 2a 20 59 6f 75 20 73 68 6f 75 6c 64 20 68  . * You should h
02b0: 61 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63  ave received a c
02c0: 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 41  opy of the GNU A
02d0: 66 66 65 72 6f 20 47 65 6e 65 72 61 6c 20 50 75  ffero General Pu
02e0: 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 20 2a 20  blic License. * 
02f0: 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73 20  along with this 
0300: 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f 74  program.  If not
0310: 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f 2f 77 77  , see <http://ww
0320: 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e 73  w.gnu.org/licens
0330: 65 73 2f 3e 2e 0a 20 2a 2f 0a 0a 70 61 63 6b 61  es/>.. */..packa
0340: 67 65 20 63 6f 6d 2e 6f 77 6e 63 6c 6f 75 64 2e  ge com.owncloud.
0350: 61 6e 64 72 6f 69 64 2e 61 75 74 68 65 6e 74 69  android.authenti
0360: 63 61 74 69 6f 6e 3b 0a 0a 69 6d 70 6f 72 74 20  cation;..import 
0370: 63 6f 6d 2e 6f 77 6e 63 6c 6f 75 64 2e 61 6e 64  com.owncloud.and
0380: 72 6f 69 64 2e 4d 61 69 6e 41 70 70 3b 0a 69 6d  roid.MainApp;.im
0390: 70 6f 72 74 20 63 6f 6d 2e 6f 77 6e 63 6c 6f 75  port com.ownclou
03a0: 64 2e 61 6e 64 72 6f 69 64 2e 6c 69 62 2e 63 6f  d.android.lib.co
03b0: 6d 6d 6f 6e 2e 61 63 63 6f 75 6e 74 73 2e 41 63  mmon.accounts.Ac
03c0: 63 6f 75 6e 74 54 79 70 65 55 74 69 6c 73 3b 0a  countTypeUtils;.
03d0: 69 6d 70 6f 72 74 20 63 6f 6d 2e 6f 77 6e 63 6c  import com.owncl
03e0: 6f 75 64 2e 61 6e 64 72 6f 69 64 2e 6c 69 62 2e  oud.android.lib.
03f0: 72 65 73 6f 75 72 63 65 73 2e 73 74 61 74 75 73  resources.status
0400: 2e 4f 77 6e 43 6c 6f 75 64 56 65 72 73 69 6f 6e  .OwnCloudVersion
0410: 3b 0a 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 75  ;..import java.u
0420: 74 69 6c 2e 4c 6f 63 61 6c 65 3b 0a 0a 2f 2a 2a  til.Locale;../**
0430: 0a 20 2a 20 48 65 6c 70 65 72 20 63 6c 61 73 73  . * Helper class
0440: 20 66 6f 72 20 61 75 74 68 65 6e 74 69 63 61 74   for authenticat
0450: 6f 72 2d 55 52 4c 20 72 65 6c 61 74 65 64 20 6c  or-URL related l
0460: 6f 67 69 63 2e 0a 20 2a 2f 0a 70 75 62 6c 69 63  ogic.. */.public
0470: 20 61 62 73 74 72 61 63 74 20 63 6c 61 73 73 20   abstract class 
0480: 41 75 74 68 65 6e 74 69 63 61 74 6f 72 55 72 6c  AuthenticatorUrl
0490: 55 74 69 6c 73 20 7b 0a 20 20 20 20 70 75 62 6c  Utils {.    publ
04a0: 69 63 20 73 74 61 74 69 63 20 66 69 6e 61 6c 20  ic static final 
04b0: 53 74 72 69 6e 67 20 57 45 42 44 41 56 5f 50 41  String WEBDAV_PA
04c0: 54 48 5f 34 5f 30 5f 41 4e 44 5f 4c 41 54 45 52  TH_4_0_AND_LATER
04d0: 20 3d 20 22 2f 72 65 6d 6f 74 65 2e 70 68 70 2f   = "/remote.php/
04e0: 77 65 62 64 61 76 22 3b 0a 0a 20 20 20 20 70 72  webdav";..    pr
04f0: 69 76 61 74 65 20 73 74 61 74 69 63 20 66 69 6e  ivate static fin
0500: 61 6c 20 53 74 72 69 6e 67 20 48 54 54 50 53 5f  al String HTTPS_
0510: 50 52 4f 54 4f 43 4f 4c 20 3d 20 22 68 74 74 70  PROTOCOL = "http
0520: 73 3a 2f 2f 22 3b 0a 20 20 20 20 70 72 69 76 61  s://";.    priva
0530: 74 65 20 73 74 61 74 69 63 20 66 69 6e 61 6c 20  te static final 
0540: 53 74 72 69 6e 67 20 48 54 54 50 5f 50 52 4f 54  String HTTP_PROT
0550: 4f 43 4f 4c 20 3d 20 22 68 74 74 70 3a 2f 2f 22  OCOL = "http://"
0560: 3b 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ;..    private s
0570: 74 61 74 69 63 20 66 69 6e 61 6c 20 53 74 72 69  tatic final Stri
0580: 6e 67 20 4f 44 41 56 5f 50 41 54 48 20 3d 20 22  ng ODAV_PATH = "
0590: 2f 72 65 6d 6f 74 65 2e 70 68 70 2f 6f 64 61 76  /remote.php/odav
05a0: 22 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ";.    private s
05b0: 74 61 74 69 63 20 66 69 6e 61 6c 20 53 74 72 69  tatic final Stri
05c0: 6e 67 20 53 41 4d 4c 5f 53 53 4f 5f 50 41 54 48  ng SAML_SSO_PATH
05d0: 20 3d 20 22 2f 72 65 6d 6f 74 65 2e 70 68 70 2f   = "/remote.php/
05e0: 77 65 62 64 61 76 22 3b 0a 0a 20 20 20 20 2f 2a  webdav";..    /*
05f0: 2a 0a 20 20 20 20 20 2a 20 52 65 74 75 72 6e 73  *.     * Returns
0600: 20 74 68 65 20 70 72 6f 70 65 72 20 55 52 4c 20   the proper URL 
0610: 70 61 74 68 20 74 6f 20 61 63 63 65 73 73 20 74  path to access t
0620: 68 65 20 57 65 62 44 41 56 20 69 6e 74 65 72 66  he WebDAV interf
0630: 61 63 65 20 6f 66 20 61 6e 20 6f 77 6e 43 6c 6f  ace of an ownClo
0640: 75 64 20 73 65 72 76 65 72 2c 0a 20 20 20 20 20  ud server,.     
0650: 2a 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 69  * according to i
0660: 74 73 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 74  ts version and t
0670: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
0680: 20 6d 65 74 68 6f 64 20 75 73 65 64 2e 0a 20 20   method used..  
0690: 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72     *.     * @par
06a0: 61 6d 20 20 20 76 65 72 73 69 6f 6e 20 20 20 20  am   version    
06b0: 20 20 20 20 20 56 65 72 73 69 6f 6e 20 6f 66 20       Version of 
06c0: 6f 77 6e 43 6c 6f 75 64 20 73 65 72 76 65 72 2e  ownCloud server.
06d0: 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 20  .     * @param  
06e0: 20 61 75 74 68 54 6f 6b 65 6e 54 79 70 65 20 20   authTokenType  
06f0: 20 41 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 74   Authorization t
0700: 6f 6b 65 6e 20 74 79 70 65 2c 20 6d 61 74 63 68  oken type, match
0710: 69 6e 67 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  ing some of the 
0720: 41 55 54 48 5f 54 4f 4b 45 4e 5f 54 59 50 45 5f  AUTH_TOKEN_TYPE_
0730: 2a 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 0a 20  * constants in. 
0740: 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20      *           
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0760: 40 6c 69 6e 6b 20 41 63 63 6f 75 6e 74 41 75 74  @link AccountAut
0770: 68 65 6e 74 69 63 61 74 6f 72 7d 2e 0a 20 20 20  henticator}..   
0780: 20 20 2a 20 40 72 65 74 75 72 6e 20 20 20 20 20    * @return     
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 65 62               Web
07a0: 44 41 56 20 70 61 74 68 20 66 6f 72 20 67 69 76  DAV path for giv
07b0: 65 6e 20 4f 43 20 76 65 72 73 69 6f 6e 20 61 6e  en OC version an
07c0: 64 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  d authorization 
07d0: 6d 65 74 68 6f 64 2c 20 6e 75 6c 6c 20 69 66 20  method, null if 
07e0: 4f 43 20 76 65 72 73 69 6f 6e 0a 20 20 20 20 20  OC version.     
07f0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
0800: 20 20 20 20 20 20 20 20 20 20 20 69 73 20 75 6e             is un
0810: 6b 6e 6f 77 6e 3b 20 76 65 72 73 69 6f 6e 73 20  known; versions 
0820: 70 72 69 6f 72 20 74 6f 20 6f 77 6e 43 6c 6f 75  prior to ownClou
0830: 64 20 34 20 61 72 65 20 6e 6f 74 20 73 75 70 70  d 4 are not supp
0840: 6f 72 74 65 64 20 61 6e 79 6d 6f 72 65 0a 20 20  orted anymore.  
0850: 20 20 20 2a 2f 0a 20 20 20 20 70 75 62 6c 69 63     */.    public
0860: 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 20 67   static String g
0870: 65 74 57 65 62 64 61 76 50 61 74 68 28 4f 77 6e  etWebdavPath(Own
0880: 43 6c 6f 75 64 56 65 72 73 69 6f 6e 20 76 65 72  CloudVersion ver
0890: 73 69 6f 6e 2c 20 53 74 72 69 6e 67 20 61 75 74  sion, String aut
08a0: 68 54 6f 6b 65 6e 54 79 70 65 29 20 7b 0a 20 20  hTokenType) {.  
08b0: 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f        if (versio
08c0: 6e 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20  n != null) {.   
08d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 41 63 63           if (Acc
08e0: 6f 75 6e 74 54 79 70 65 55 74 69 6c 73 2e 67 65  ountTypeUtils.ge
08f0: 74 41 75 74 68 54 6f 6b 65 6e 54 79 70 65 41 63  tAuthTokenTypeAc
0900: 63 65 73 73 54 6f 6b 65 6e 28 4d 61 69 6e 41 70  cessToken(MainAp
0910: 70 2e 67 65 74 41 63 63 6f 75 6e 74 54 79 70 65  p.getAccountType
0920: 28 29 29 2e 65 71 75 61 6c 73 28 61 75 74 68 54  ()).equals(authT
0930: 6f 6b 65 6e 54 79 70 65 29 29 20 7b 0a 20 20 20  okenType)) {.   
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
0950: 75 72 6e 20 4f 44 41 56 5f 50 41 54 48 3b 0a 20  urn ODAV_PATH;. 
0960: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
0970: 20 20 20 20 20 20 20 20 20 69 66 20 28 41 63 63           if (Acc
0980: 6f 75 6e 74 54 79 70 65 55 74 69 6c 73 2e 67 65  ountTypeUtils.ge
0990: 74 41 75 74 68 54 6f 6b 65 6e 54 79 70 65 53 61  tAuthTokenTypeSa
09a0: 6d 6c 53 65 73 73 69 6f 6e 43 6f 6f 6b 69 65 28  mlSessionCookie(
09b0: 4d 61 69 6e 41 70 70 2e 67 65 74 41 63 63 6f 75  MainApp.getAccou
09c0: 6e 74 54 79 70 65 28 29 29 2e 65 71 75 61 6c 73  ntType()).equals
09d0: 28 61 75 74 68 54 6f 6b 65 6e 54 79 70 65 29 29  (authTokenType))
09e0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
09f0: 20 20 20 72 65 74 75 72 6e 20 53 41 4d 4c 5f 53     return SAML_S
0a00: 53 4f 5f 50 41 54 48 3b 0a 20 20 20 20 20 20 20  SO_PATH;.       
0a10: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
0a20: 20 20 20 20 72 65 74 75 72 6e 20 57 45 42 44 41      return WEBDA
0a30: 56 5f 50 41 54 48 5f 34 5f 30 5f 41 4e 44 5f 4c  V_PATH_4_0_AND_L
0a40: 41 54 45 52 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ATER;.        }.
0a50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
0a60: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ull;.    }..    
0a70: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74  public static St
0a80: 72 69 6e 67 20 6e 6f 72 6d 61 6c 69 7a 65 55 72  ring normalizeUr
0a90: 6c 53 75 66 66 69 78 28 53 74 72 69 6e 67 20 75  lSuffix(String u
0aa0: 72 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 53 74  rl) {.        St
0ab0: 72 69 6e 67 20 6e 6f 72 6d 61 6c 69 7a 65 64 55  ring normalizedU
0ac0: 72 6c 20 3d 20 75 72 6c 3b 0a 20 20 20 20 20 20  rl = url;.      
0ad0: 20 20 69 66 20 28 6e 6f 72 6d 61 6c 69 7a 65 64    if (normalized
0ae0: 55 72 6c 2e 65 6e 64 73 57 69 74 68 28 22 2f 22  Url.endsWith("/"
0af0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
0b00: 20 6e 6f 72 6d 61 6c 69 7a 65 64 55 72 6c 20 3d   normalizedUrl =
0b10: 20 6e 6f 72 6d 61 6c 69 7a 65 64 55 72 6c 2e 73   normalizedUrl.s
0b20: 75 62 73 74 72 69 6e 67 28 30 2c 20 6e 6f 72 6d  ubstring(0, norm
0b30: 61 6c 69 7a 65 64 55 72 6c 2e 6c 65 6e 67 74 68  alizedUrl.length
0b40: 28 29 20 2d 20 31 29 3b 0a 20 20 20 20 20 20 20  () - 1);.       
0b50: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
0b60: 6e 20 74 72 69 6d 55 72 6c 57 65 62 64 61 76 28  n trimUrlWebdav(
0b70: 6e 6f 72 6d 61 6c 69 7a 65 64 55 72 6c 29 3b 0a  normalizedUrl);.
0b80: 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69      }..    publi
0b90: 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 20  c static String 
0ba0: 6e 6f 72 6d 61 6c 69 7a 65 55 72 6c 28 53 74 72  normalizeUrl(Str
0bb0: 69 6e 67 20 75 72 6c 2c 20 62 6f 6f 6c 65 61 6e  ing url, boolean
0bc0: 20 73 73 6c 57 68 65 6e 55 6e 70 72 65 66 69 78   sslWhenUnprefix
0bd0: 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 53 74  ed) {.        St
0be0: 72 69 6e 67 20 6e 6f 72 6d 61 6c 69 7a 65 64 55  ring normalizedU
0bf0: 72 6c 20 3d 20 75 72 6c 3b 0a 0a 20 20 20 20 20  rl = url;..     
0c00: 20 20 20 69 66 20 28 6e 6f 72 6d 61 6c 69 7a 65     if (normalize
0c10: 64 55 72 6c 20 21 3d 20 6e 75 6c 6c 20 26 26 20  dUrl != null && 
0c20: 6e 6f 72 6d 61 6c 69 7a 65 64 55 72 6c 2e 6c 65  normalizedUrl.le
0c30: 6e 67 74 68 28 29 20 3e 20 30 29 20 7b 0a 20 20  ngth() > 0) {.  
0c40: 20 20 20 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c            normal
0c50: 69 7a 65 64 55 72 6c 20 3d 20 6e 6f 72 6d 61 6c  izedUrl = normal
0c60: 69 7a 65 64 55 72 6c 2e 74 72 69 6d 28 29 3b 0a  izedUrl.trim();.
0c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
0c80: 28 21 6e 6f 72 6d 61 6c 69 7a 65 64 55 72 6c 2e  (!normalizedUrl.
0c90: 74 6f 4c 6f 77 65 72 43 61 73 65 28 4c 6f 63 61  toLowerCase(Loca
0ca0: 6c 65 2e 52 4f 4f 54 29 2e 73 74 61 72 74 73 57  le.ROOT).startsW
0cb0: 69 74 68 28 48 54 54 50 5f 50 52 4f 54 4f 43 4f  ith(HTTP_PROTOCO
0cc0: 4c 29 20 26 26 0a 20 20 20 20 20 20 20 20 20 20  L) &&.          
0cd0: 20 20 20 20 20 20 20 20 20 20 21 6e 6f 72 6d 61            !norma
0ce0: 6c 69 7a 65 64 55 72 6c 2e 74 6f 4c 6f 77 65 72  lizedUrl.toLower
0cf0: 43 61 73 65 28 4c 6f 63 61 6c 65 2e 52 4f 4f 54  Case(Locale.ROOT
0d00: 29 2e 73 74 61 72 74 73 57 69 74 68 28 48 54 54  ).startsWith(HTT
0d10: 50 5f 50 52 4f 54 4f 43 4f 4c 29 29 20 7b 0a 20  P_PROTOCOL)) {. 
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
0d30: 66 20 28 73 73 6c 57 68 65 6e 55 6e 70 72 65 66  f (sslWhenUnpref
0d40: 69 78 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20  ixed) {.        
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 6d              norm
0d60: 61 6c 69 7a 65 64 55 72 6c 20 3d 20 48 54 54 50  alizedUrl = HTTP
0d70: 53 5f 50 52 4f 54 4f 43 4f 4c 20 2b 20 6e 6f 72  S_PROTOCOL + nor
0d80: 6d 61 6c 69 7a 65 64 55 72 6c 3b 0a 20 20 20 20  malizedUrl;.    
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
0da0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
0db0: 20 20 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 69           normali
0dc0: 7a 65 64 55 72 6c 20 3d 20 48 54 54 50 5f 50 52  zedUrl = HTTP_PR
0dd0: 4f 54 4f 43 4f 4c 20 2b 20 6e 6f 72 6d 61 6c 69  OTOCOL + normali
0de0: 7a 65 64 55 72 6c 3b 0a 20 20 20 20 20 20 20 20  zedUrl;.        
0df0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0e00: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
0e10: 20 20 20 20 20 6e 6f 72 6d 61 6c 69 7a 65 64 55       normalizedU
0e20: 72 6c 20 3d 20 6e 6f 72 6d 61 6c 69 7a 65 55 72  rl = normalizeUr
0e30: 6c 53 75 66 66 69 78 28 6e 6f 72 6d 61 6c 69 7a  lSuffix(normaliz
0e40: 65 64 55 72 6c 29 3b 0a 20 20 20 20 20 20 20 20  edUrl);.        
0e50: 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
0e60: 20 28 6e 6f 72 6d 61 6c 69 7a 65 64 55 72 6c 20   (normalizedUrl 
0e70: 21 3d 20 6e 75 6c 6c 20 3f 20 6e 6f 72 6d 61 6c  != null ? normal
0e80: 69 7a 65 64 55 72 6c 20 3a 20 22 22 29 3b 0a 20  izedUrl : "");. 
0e90: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
0ea0: 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 20 74   static String t
0eb0: 72 69 6d 57 65 62 64 61 76 53 75 66 66 69 78 28  rimWebdavSuffix(
0ec0: 53 74 72 69 6e 67 20 75 72 6c 29 20 7b 0a 20 20  String url) {.  
0ed0: 20 20 20 20 20 20 53 74 72 69 6e 67 20 74 72 69        String tri
0ee0: 6d 6d 65 64 55 72 6c 20 3d 20 75 72 6c 3b 0a 20  mmedUrl = url;. 
0ef0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 74 72 69         while(tri
0f00: 6d 6d 65 64 55 72 6c 2e 65 6e 64 73 57 69 74 68  mmedUrl.endsWith
0f10: 28 22 2f 22 29 29 20 7b 0a 20 20 20 20 20 20 20  ("/")) {.       
0f20: 20 20 20 20 20 74 72 69 6d 6d 65 64 55 72 6c 20       trimmedUrl 
0f30: 3d 20 74 72 69 6d 6d 65 64 55 72 6c 2e 73 75 62  = trimmedUrl.sub
0f40: 73 74 72 69 6e 67 28 30 2c 20 75 72 6c 2e 6c 65  string(0, url.le
0f50: 6e 67 74 68 28 29 20 2d 20 31 29 3b 0a 20 20 20  ngth() - 1);.   
0f60: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
0f70: 69 6e 74 20 70 6f 73 20 3d 20 74 72 69 6d 6d 65  int pos = trimme
0f80: 64 55 72 6c 2e 6c 61 73 74 49 6e 64 65 78 4f 66  dUrl.lastIndexOf
0f90: 28 57 45 42 44 41 56 5f 50 41 54 48 5f 34 5f 30  (WEBDAV_PATH_4_0
0fa0: 5f 41 4e 44 5f 4c 41 54 45 52 29 3b 0a 20 20 20  _AND_LATER);.   
0fb0: 20 20 20 20 20 69 66 20 28 70 6f 73 20 3e 3d 20       if (pos >= 
0fc0: 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0) {.           
0fd0: 20 74 72 69 6d 6d 65 64 55 72 6c 20 3d 20 74 72   trimmedUrl = tr
0fe0: 69 6d 6d 65 64 55 72 6c 2e 73 75 62 73 74 72 69  immedUrl.substri
0ff0: 6e 67 28 30 2c 20 70 6f 73 29 3b 0a 0a 20 20 20  ng(0, pos);..   
1000: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
1010: 20 20 20 20 20 20 20 20 20 20 70 6f 73 20 3d 20            pos = 
1020: 74 72 69 6d 6d 65 64 55 72 6c 2e 6c 61 73 74 49  trimmedUrl.lastI
1030: 6e 64 65 78 4f 66 28 4f 44 41 56 5f 50 41 54 48  ndexOf(ODAV_PATH
1040: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
1050: 66 20 28 70 6f 73 20 3e 3d 20 30 29 20 7b 0a 20  f (pos >= 0) {. 
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1070: 72 69 6d 6d 65 64 55 72 6c 20 3d 20 74 72 69 6d  rimmedUrl = trim
1080: 6d 65 64 55 72 6c 2e 73 75 62 73 74 72 69 6e 67  medUrl.substring
1090: 28 30 2c 20 70 6f 73 29 3b 0a 20 20 20 20 20 20  (0, pos);.      
10a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
10b0: 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
10c0: 6e 20 74 72 69 6d 6d 65 64 55 72 6c 3b 0a 20 20  n trimmedUrl;.  
10d0: 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65    }..    private
10e0: 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 20 74   static String t
10f0: 72 69 6d 55 72 6c 57 65 62 64 61 76 28 53 74 72  rimUrlWebdav(Str
1100: 69 6e 67 20 75 72 6c 29 20 7b 0a 20 20 20 20 20  ing url) {.     
1110: 20 20 20 69 66 20 28 75 72 6c 2e 74 6f 4c 6f 77     if (url.toLow
1120: 65 72 43 61 73 65 28 4c 6f 63 61 6c 65 2e 52 4f  erCase(Locale.RO
1130: 4f 54 29 2e 65 6e 64 73 57 69 74 68 28 57 45 42  OT).endsWith(WEB
1140: 44 41 56 5f 50 41 54 48 5f 34 5f 30 5f 41 4e 44  DAV_PATH_4_0_AND
1150: 5f 4c 41 54 45 52 29 29 20 7b 0a 20 20 20 20 20  _LATER)) {.     
1160: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 72         return ur
1170: 6c 2e 73 75 62 73 74 72 69 6e 67 28 30 2c 20 75  l.substring(0, u
1180: 72 6c 2e 6c 65 6e 67 74 68 28 29 20 2d 20 57 45  rl.length() - WE
1190: 42 44 41 56 5f 50 41 54 48 5f 34 5f 30 5f 41 4e  BDAV_PATH_4_0_AN
11a0: 44 5f 4c 41 54 45 52 2e 6c 65 6e 67 74 68 28 29  D_LATER.length()
11b0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  );.        }..  
11c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 72 6c        return url
11d0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  ;.    }..    pub
11e0: 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e  lic static Strin
11f0: 67 20 73 74 72 69 70 49 6e 64 65 78 50 68 70 4f  g stripIndexPhpO
1200: 72 41 70 70 73 46 69 6c 65 73 28 53 74 72 69 6e  rAppsFiles(Strin
1210: 67 20 75 72 6c 29 20 7b 0a 20 20 20 20 20 20 20  g url) {.       
1220: 20 53 74 72 69 6e 67 20 73 74 72 69 70 70 65 64   String stripped
1230: 55 72 6c 20 3d 20 75 72 6c 3b 0a 20 20 20 20 20  Url = url;.     
1240: 20 20 20 69 66 20 28 73 74 72 69 70 70 65 64 55     if (strippedU
1250: 72 6c 2e 65 6e 64 73 57 69 74 68 28 22 2f 69 6e  rl.endsWith("/in
1260: 64 65 78 2e 70 68 70 22 29 29 20 7b 0a 20 20 20  dex.php")) {.   
1270: 20 20 20 20 20 20 20 20 20 73 74 72 69 70 70 65           strippe
1280: 64 55 72 6c 20 3d 20 73 74 72 69 70 70 65 64 55  dUrl = strippedU
1290: 72 6c 2e 73 75 62 73 74 72 69 6e 67 28 30 2c 20  rl.substring(0, 
12a0: 73 74 72 69 70 70 65 64 55 72 6c 2e 6c 61 73 74  strippedUrl.last
12b0: 49 6e 64 65 78 4f 66 28 22 2f 69 6e 64 65 78 2e  IndexOf("/index.
12c0: 70 68 70 22 29 29 3b 0a 20 20 20 20 20 20 20 20  php"));.        
12d0: 7d 20 65 6c 73 65 20 69 66 20 28 73 74 72 69 70  } else if (strip
12e0: 70 65 64 55 72 6c 2e 63 6f 6e 74 61 69 6e 73 28  pedUrl.contains(
12f0: 22 2f 69 6e 64 65 78 2e 70 68 70 2f 61 70 70 73  "/index.php/apps
1300: 2f 22 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20  /")) {.         
1310: 20 20 20 73 74 72 69 70 70 65 64 55 72 6c 20 3d     strippedUrl =
1320: 20 73 74 72 69 70 70 65 64 55 72 6c 2e 73 75 62   strippedUrl.sub
1330: 73 74 72 69 6e 67 28 30 2c 20 73 74 72 69 70 70  string(0, stripp
1340: 65 64 55 72 6c 2e 6c 61 73 74 49 6e 64 65 78 4f  edUrl.lastIndexO
1350: 66 28 22 2f 69 6e 64 65 78 2e 70 68 70 2f 61 70  f("/index.php/ap
1360: 70 73 2f 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ps/"));.        
1370: 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
1380: 6e 20 73 74 72 69 70 70 65 64 55 72 6c 3b 0a 20  n strippedUrl;. 
1390: 20 20 20 7d 0a 7d 0a                                }.}.