Hex Artifact Content
Not logged in

Artifact 97a9e52f1a423ceb7c2c8157cf00f02061f7dfe0:


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 54 6f 62 69 61 73 20   @author Tobias 
0040: 4b 61 6d 69 6e 73 6b 79 0a 20 2a 20 43 6f 70 79  Kaminsky. * Copy
0050: 72 69 67 68 74 20 28 43 29 20 32 30 31 37 20 54  right (C) 2017 T
0060: 6f 62 69 61 73 20 4b 61 6d 69 6e 73 6b 79 0a 20  obias Kaminsky. 
0070: 2a 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20  * Copyright (C) 
0080: 32 30 31 37 20 4e 65 78 74 63 6c 6f 75 64 20 47  2017 Nextcloud G
0090: 6d 62 48 2e 0a 20 2a 0a 20 2a 20 54 68 69 73 20  mbH.. *. * This 
00a0: 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65 20  program is free 
00b0: 73 6f 66 74 77 61 72 65 3a 20 79 6f 75 20 63 61  software: you ca
00c0: 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69  n redistribute i
00d0: 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a  t and/or modify.
00e0: 20 2a 20 69 74 20 75 6e 64 65 72 20 74 68 65 20   * it under the 
00f0: 74 65 72 6d 73 20 6f 66 20 74 68 65 20 47 4e 55  terms of the GNU
0100: 20 41 66 66 65 72 6f 20 47 65 6e 65 72 61 6c 20   Affero General 
0110: 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 61  Public License a
0120: 73 20 70 75 62 6c 69 73 68 65 64 20 62 79 0a 20  s published by. 
0130: 2a 20 74 68 65 20 46 72 65 65 20 53 6f 66 74 77  * the Free Softw
0140: 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20  are Foundation, 
0150: 65 69 74 68 65 72 20 76 65 72 73 69 6f 6e 20 33  either version 3
0160: 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c   of the License,
0170: 20 6f 72 0a 20 2a 20 61 74 20 79 6f 75 72 20 6f   or. * at your o
0180: 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72  ption) any later
0190: 20 76 65 72 73 69 6f 6e 2e 0a 20 2a 0a 20 2a 20   version.. *. * 
01a0: 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20  This program is 
01b0: 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 74  distributed in t
01c0: 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74 20  he hope that it 
01d0: 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a  will be useful,.
01e0: 20 2a 20 62 75 74 20 57 49 54 48 4f 55 54 20 41   * but WITHOUT A
01f0: 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74  NY WARRANTY; wit
0200: 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d  hout even the im
0210: 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f  plied warranty o
0220: 66 0a 20 2a 20 4d 45 52 43 48 41 4e 54 41 42 49  f. * MERCHANTABI
0230: 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20  LITY or FITNESS 
0240: 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52  FOR A PARTICULAR
0250: 20 50 55 52 50 4f 53 45 2e 20 53 65 65 20 74 68   PURPOSE. See th
0260: 65 0a 20 2a 20 47 4e 55 20 41 66 66 65 72 6f 20  e. * GNU Affero 
0270: 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c  General Public L
0280: 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20  icense for more 
0290: 64 65 74 61 69 6c 73 2e 0a 20 2a 0a 20 2a 20 59  details.. *. * Y
02a0: 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72  ou should have r
02b0: 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f  eceived a copy o
02c0: 66 20 74 68 65 20 47 4e 55 20 41 66 66 65 72 6f  f the GNU Affero
02d0: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20   General Public 
02e0: 4c 69 63 65 6e 73 65 0a 20 2a 20 61 6c 6f 6e 67  License. * along
02f0: 20 77 69 74 68 20 74 68 69 73 20 70 72 6f 67 72   with this progr
0300: 61 6d 2e 20 49 66 20 6e 6f 74 2c 20 73 65 65 20  am. If not, see 
0310: 3c 68 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e  <http://www.gnu.
0320: 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a  org/licenses/>..
0330: 20 2a 2f 0a 70 61 63 6b 61 67 65 20 63 6f 6d 2e   */.package com.
0340: 6f 77 6e 63 6c 6f 75 64 2e 61 6e 64 72 6f 69 64  owncloud.android
0350: 2e 6c 69 62 2e 72 65 73 6f 75 72 63 65 73 2e 66  .lib.resources.f
0360: 69 6c 65 73 3b 0a 0a 69 6d 70 6f 72 74 20 63 6f  iles;..import co
0370: 6d 2e 6f 77 6e 63 6c 6f 75 64 2e 61 6e 64 72 6f  m.owncloud.andro
0380: 69 64 2e 6c 69 62 2e 63 6f 6d 6d 6f 6e 2e 4f 77  id.lib.common.Ow
0390: 6e 43 6c 6f 75 64 43 6c 69 65 6e 74 3b 0a 69 6d  nCloudClient;.im
03a0: 70 6f 72 74 20 63 6f 6d 2e 6f 77 6e 63 6c 6f 75  port com.ownclou
03b0: 64 2e 61 6e 64 72 6f 69 64 2e 6c 69 62 2e 63 6f  d.android.lib.co
03c0: 6d 6d 6f 6e 2e 6f 70 65 72 61 74 69 6f 6e 73 2e  mmon.operations.
03d0: 52 65 6d 6f 74 65 4f 70 65 72 61 74 69 6f 6e 3b  RemoteOperation;
03e0: 0a 69 6d 70 6f 72 74 20 63 6f 6d 2e 6f 77 6e 63  .import com.ownc
03f0: 6c 6f 75 64 2e 61 6e 64 72 6f 69 64 2e 6c 69 62  loud.android.lib
0400: 2e 63 6f 6d 6d 6f 6e 2e 6f 70 65 72 61 74 69 6f  .common.operatio
0410: 6e 73 2e 52 65 6d 6f 74 65 4f 70 65 72 61 74 69  ns.RemoteOperati
0420: 6f 6e 52 65 73 75 6c 74 3b 0a 69 6d 70 6f 72 74  onResult;.import
0430: 20 63 6f 6d 2e 6f 77 6e 63 6c 6f 75 64 2e 61 6e   com.owncloud.an
0440: 64 72 6f 69 64 2e 6c 69 62 2e 63 6f 6d 6d 6f 6e  droid.lib.common
0450: 2e 75 74 69 6c 73 2e 4c 6f 67 5f 4f 43 3b 0a 0a  .utils.Log_OC;..
0460: 69 6d 70 6f 72 74 20 6f 72 67 2e 61 70 61 63 68  import org.apach
0470: 65 2e 63 6f 6d 6d 6f 6e 73 2e 68 74 74 70 63 6c  e.commons.httpcl
0480: 69 65 6e 74 2e 48 74 74 70 53 74 61 74 75 73 3b  ient.HttpStatus;
0490: 0a 69 6d 70 6f 72 74 20 6f 72 67 2e 61 70 61 63  .import org.apac
04a0: 68 65 2e 63 6f 6d 6d 6f 6e 73 2e 68 74 74 70 63  he.commons.httpc
04b0: 6c 69 65 6e 74 2e 6d 65 74 68 6f 64 73 2e 44 65  lient.methods.De
04c0: 6c 65 74 65 4d 65 74 68 6f 64 3b 0a 0a 0a 2f 2a  leteMethod;.../*
04d0: 2a 0a 20 2a 20 55 6e 6c 6f 63 6b 20 61 20 66 69  *. * Unlock a fi
04e0: 6c 65 0a 20 2a 2f 0a 70 75 62 6c 69 63 20 63 6c  le. */.public cl
04f0: 61 73 73 20 55 6e 6c 6f 63 6b 46 69 6c 65 4f 70  ass UnlockFileOp
0500: 65 72 61 74 69 6f 6e 20 65 78 74 65 6e 64 73 20  eration extends 
0510: 52 65 6d 6f 74 65 4f 70 65 72 61 74 69 6f 6e 20  RemoteOperation 
0520: 7b 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  {..    private s
0530: 74 61 74 69 63 20 66 69 6e 61 6c 20 53 74 72 69  tatic final Stri
0540: 6e 67 20 54 41 47 20 3d 20 55 6e 6c 6f 63 6b 46  ng TAG = UnlockF
0550: 69 6c 65 4f 70 65 72 61 74 69 6f 6e 2e 63 6c 61  ileOperation.cla
0560: 73 73 2e 67 65 74 53 69 6d 70 6c 65 4e 61 6d 65  ss.getSimpleName
0570: 28 29 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  ();.    private 
0580: 73 74 61 74 69 63 20 66 69 6e 61 6c 20 69 6e 74  static final int
0590: 20 53 59 4e 43 5f 52 45 41 44 5f 54 49 4d 45 4f   SYNC_READ_TIMEO
05a0: 55 54 20 3d 20 34 30 30 30 30 3b 0a 20 20 20 20  UT = 40000;.    
05b0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 66  private static f
05c0: 69 6e 61 6c 20 69 6e 74 20 53 59 4e 43 5f 43 4f  inal int SYNC_CO
05d0: 4e 4e 45 43 54 49 4f 4e 5f 54 49 4d 45 4f 55 54  NNECTION_TIMEOUT
05e0: 20 3d 20 35 30 30 30 3b 0a 20 20 20 20 70 72 69   = 5000;.    pri
05f0: 76 61 74 65 20 73 74 61 74 69 63 20 66 69 6e 61  vate static fina
0600: 6c 20 53 74 72 69 6e 67 20 4c 4f 43 4b 5f 46 49  l String LOCK_FI
0610: 4c 45 5f 55 52 4c 20 3d 20 22 2f 6f 63 73 2f 76  LE_URL = "/ocs/v
0620: 32 2e 70 68 70 2f 61 70 70 73 2f 65 6e 64 5f 74  2.php/apps/end_t
0630: 6f 5f 65 6e 64 5f 65 6e 63 72 79 70 74 69 6f 6e  o_end_encryption
0640: 2f 61 70 69 2f 76 31 2f 6c 6f 63 6b 2f 22 3b 0a  /api/v1/lock/";.
0650: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
0660: 69 63 20 66 69 6e 61 6c 20 53 74 72 69 6e 67 20  ic final String 
0670: 54 4f 4b 45 4e 20 3d 20 22 74 6f 6b 65 6e 22 3b  TOKEN = "token";
0680: 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 74  ..    private St
0690: 72 69 6e 67 20 6c 6f 63 61 6c 49 64 3b 0a 20 20  ring localId;.  
06a0: 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67    private String
06b0: 20 74 6f 6b 65 6e 3b 0a 0a 20 20 20 20 2f 2a 2a   token;..    /**
06c0: 0a 20 20 20 20 20 2a 20 43 6f 6e 73 74 72 75 63  .     * Construc
06d0: 74 6f 72 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  tor.     */.    
06e0: 70 75 62 6c 69 63 20 55 6e 6c 6f 63 6b 46 69 6c  public UnlockFil
06f0: 65 4f 70 65 72 61 74 69 6f 6e 28 53 74 72 69 6e  eOperation(Strin
0700: 67 20 6c 6f 63 61 6c 49 64 2c 20 53 74 72 69 6e  g localId, Strin
0710: 67 20 74 6f 6b 65 6e 29 20 7b 0a 20 20 20 20 20  g token) {.     
0720: 20 20 20 74 68 69 73 2e 6c 6f 63 61 6c 49 64 20     this.localId 
0730: 3d 20 6c 6f 63 61 6c 49 64 3b 0a 20 20 20 20 20  = localId;.     
0740: 20 20 20 74 68 69 73 2e 74 6f 6b 65 6e 20 3d 20     this.token = 
0750: 74 6f 6b 65 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20  token;.    }..  
0760: 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 40 70 61    /**.     * @pa
0770: 72 61 6d 20 63 6c 69 65 6e 74 20 43 6c 69 65 6e  ram client Clien
0780: 74 20 6f 62 6a 65 63 74 0a 20 20 20 20 20 2a 2f  t object.     */
0790: 0a 20 20 20 20 40 4f 76 65 72 72 69 64 65 0a 20  .    @Override. 
07a0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 52 65 6d     protected Rem
07b0: 6f 74 65 4f 70 65 72 61 74 69 6f 6e 52 65 73 75  oteOperationResu
07c0: 6c 74 20 72 75 6e 28 4f 77 6e 43 6c 6f 75 64 43  lt run(OwnCloudC
07d0: 6c 69 65 6e 74 20 63 6c 69 65 6e 74 29 20 7b 0a  lient client) {.
07e0: 20 20 20 20 20 20 20 20 52 65 6d 6f 74 65 4f 70          RemoteOp
07f0: 65 72 61 74 69 6f 6e 52 65 73 75 6c 74 20 72 65  erationResult re
0800: 73 75 6c 74 3b 0a 20 20 20 20 20 20 20 20 44 65  sult;.        De
0810: 6c 65 74 65 4d 65 74 68 6f 64 20 64 65 6c 65 74  leteMethod delet
0820: 65 4d 65 74 68 6f 64 20 3d 20 6e 75 6c 6c 3b 0a  eMethod = null;.
0830: 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20  .        try {. 
0840: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
0850: 6d 6f 74 65 20 72 65 71 75 65 73 74 0a 20 20 20  mote request.   
0860: 20 20 20 20 20 20 20 20 20 64 65 6c 65 74 65 4d           deleteM
0870: 65 74 68 6f 64 20 3d 20 6e 65 77 20 44 65 6c 65  ethod = new Dele
0880: 74 65 4d 65 74 68 6f 64 28 63 6c 69 65 6e 74 2e  teMethod(client.
0890: 67 65 74 42 61 73 65 55 72 69 28 29 20 2b 20 4c  getBaseUri() + L
08a0: 4f 43 4b 5f 46 49 4c 45 5f 55 52 4c 20 2b 20 6c  OCK_FILE_URL + l
08b0: 6f 63 61 6c 49 64 29 3b 0a 20 20 20 20 20 20 20  ocalId);.       
08c0: 20 20 20 20 20 64 65 6c 65 74 65 4d 65 74 68 6f       deleteMetho
08d0: 64 2e 61 64 64 52 65 71 75 65 73 74 48 65 61 64  d.addRequestHead
08e0: 65 72 28 4f 43 53 5f 41 50 49 5f 48 45 41 44 45  er(OCS_API_HEADE
08f0: 52 2c 20 4f 43 53 5f 41 50 49 5f 48 45 41 44 45  R, OCS_API_HEADE
0900: 52 5f 56 41 4c 55 45 29 3b 0a 20 20 20 20 20 20  R_VALUE);.      
0910: 20 20 20 20 20 20 64 65 6c 65 74 65 4d 65 74 68        deleteMeth
0920: 6f 64 2e 61 64 64 52 65 71 75 65 73 74 48 65 61  od.addRequestHea
0930: 64 65 72 28 43 4f 4e 54 45 4e 54 5f 54 59 50 45  der(CONTENT_TYPE
0940: 2c 20 46 4f 52 4d 5f 55 52 4c 45 4e 43 4f 44 45  , FORM_URLENCODE
0950: 44 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  D);.            
0960: 64 65 6c 65 74 65 4d 65 74 68 6f 64 2e 61 64 64  deleteMethod.add
0970: 52 65 71 75 65 73 74 48 65 61 64 65 72 28 54 4f  RequestHeader(TO
0980: 4b 45 4e 2c 20 74 6f 6b 65 6e 29 3b 0a 0a 20 20  KEN, token);..  
0990: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 74            int st
09a0: 61 74 75 73 20 3d 20 63 6c 69 65 6e 74 2e 65 78  atus = client.ex
09b0: 65 63 75 74 65 4d 65 74 68 6f 64 28 64 65 6c 65  ecuteMethod(dele
09c0: 74 65 4d 65 74 68 6f 64 2c 20 53 59 4e 43 5f 52  teMethod, SYNC_R
09d0: 45 41 44 5f 54 49 4d 45 4f 55 54 2c 20 53 59 4e  EAD_TIMEOUT, SYN
09e0: 43 5f 43 4f 4e 4e 45 43 54 49 4f 4e 5f 54 49 4d  C_CONNECTION_TIM
09f0: 45 4f 55 54 29 3b 0a 0a 20 20 20 20 20 20 20 20  EOUT);..        
0a00: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 6e 65 77      result = new
0a10: 20 52 65 6d 6f 74 65 4f 70 65 72 61 74 69 6f 6e   RemoteOperation
0a20: 52 65 73 75 6c 74 28 73 74 61 74 75 73 20 3d 3d  Result(status ==
0a30: 20 48 74 74 70 53 74 61 74 75 73 2e 53 43 5f 4f   HttpStatus.SC_O
0a40: 4b 2c 20 64 65 6c 65 74 65 4d 65 74 68 6f 64 29  K, deleteMethod)
0a50: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 0a 20  ;.            . 
0a60: 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e             clien
0a70: 74 2e 65 78 68 61 75 73 74 52 65 73 70 6f 6e 73  t.exhaustRespons
0a80: 65 28 64 65 6c 65 74 65 4d 65 74 68 6f 64 2e 67  e(deleteMethod.g
0a90: 65 74 52 65 73 70 6f 6e 73 65 42 6f 64 79 41 73  etResponseBodyAs
0aa0: 53 74 72 65 61 6d 28 29 29 3b 0a 20 20 20 20 20  Stream());.     
0ab0: 20 20 20 7d 20 63 61 74 63 68 20 28 45 78 63 65     } catch (Exce
0ac0: 70 74 69 6f 6e 20 65 29 20 7b 0a 20 20 20 20 20  ption e) {.     
0ad0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
0ae0: 6e 65 77 20 52 65 6d 6f 74 65 4f 70 65 72 61 74  new RemoteOperat
0af0: 69 6f 6e 52 65 73 75 6c 74 28 65 29 3b 0a 20 20  ionResult(e);.  
0b00: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 5f 4f 43            Log_OC
0b10: 2e 65 28 54 41 47 2c 20 22 55 6e 6c 6f 63 6b 20  .e(TAG, "Unlock 
0b20: 66 69 6c 65 20 77 69 74 68 20 69 64 20 22 20 2b  file with id " +
0b30: 20 6c 6f 63 61 6c 49 64 20 2b 20 22 20 66 61 69   localId + " fai
0b40: 6c 65 64 3a 20 22 20 2b 20 72 65 73 75 6c 74 2e  led: " + result.
0b50: 67 65 74 4c 6f 67 4d 65 73 73 61 67 65 28 29 2c  getLogMessage(),
0b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0b70: 20 20 20 20 20 72 65 73 75 6c 74 2e 67 65 74 45       result.getE
0b80: 78 63 65 70 74 69 6f 6e 28 29 29 3b 0a 20 20 20  xception());.   
0b90: 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b       } finally {
0ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
0bb0: 28 64 65 6c 65 74 65 4d 65 74 68 6f 64 20 21 3d  (deleteMethod !=
0bc0: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20   null).         
0bd0: 20 20 20 20 20 20 20 64 65 6c 65 74 65 4d 65 74         deleteMet
0be0: 68 6f 64 2e 72 65 6c 65 61 73 65 43 6f 6e 6e 65  hod.releaseConne
0bf0: 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 20 20 20  ction();.       
0c00: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
0c10: 6e 20 72 65 73 75 6c 74 3b 0a 20 20 20 20 7d 0a  n result;.    }.
0c20: 7d 0a                                            }.