Hex Artifact Content
Not logged in

Artifact a4af848a6615acb2d32ac7ac194751e81baaa288:


0000: 2f 2f 20 43 6f 70 79 72 69 67 68 74 20 32 30 31  // Copyright 201
0010: 36 20 4d 61 69 64 53 61 66 65 2e 6e 65 74 20 6c  6 MaidSafe.net l
0020: 69 6d 69 74 65 64 2e 0a 2f 2f 0a 2f 2f 20 54 68  imited..//.// Th
0030: 69 73 20 53 41 46 45 20 4e 65 74 77 6f 72 6b 20  is SAFE Network 
0040: 53 6f 66 74 77 61 72 65 20 69 73 20 6c 69 63 65  Software is lice
0050: 6e 73 65 64 20 74 6f 20 79 6f 75 20 75 6e 64 65  nsed to you unde
0060: 72 20 28 31 29 20 74 68 65 20 4d 61 69 64 53 61  r (1) the MaidSa
0070: 66 65 2e 6e 65 74 20 43 6f 6d 6d 65 72 63 69 61  fe.net Commercia
0080: 6c 20 4c 69 63 65 6e 73 65 2c 0a 2f 2f 20 76 65  l License,.// ve
0090: 72 73 69 6f 6e 20 31 2e 30 20 6f 72 20 6c 61 74  rsion 1.0 or lat
00a0: 65 72 2c 20 6f 72 20 28 32 29 20 54 68 65 20 47  er, or (2) The G
00b0: 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69  eneral Public Li
00c0: 63 65 6e 73 65 20 28 47 50 4c 29 2c 20 76 65 72  cense (GPL), ver
00d0: 73 69 6f 6e 20 33 2c 20 64 65 70 65 6e 64 69 6e  sion 3, dependin
00e0: 67 20 6f 6e 20 77 68 69 63 68 0a 2f 2f 20 6c 69  g on which.// li
00f0: 63 65 6e 63 65 20 79 6f 75 20 61 63 63 65 70 74  cence you accept
0100: 65 64 20 6f 6e 20 69 6e 69 74 69 61 6c 20 61 63  ed on initial ac
0110: 63 65 73 73 20 74 6f 20 74 68 65 20 53 6f 66 74  cess to the Soft
0120: 77 61 72 65 20 28 74 68 65 20 22 4c 69 63 65 6e  ware (the "Licen
0130: 63 65 73 22 29 2e 0a 2f 2f 0a 2f 2f 20 42 79 20  ces")..//.// By 
0140: 63 6f 6e 74 72 69 62 75 74 69 6e 67 20 63 6f 64  contributing cod
0150: 65 20 74 6f 20 74 68 65 20 53 41 46 45 20 4e 65  e to the SAFE Ne
0160: 74 77 6f 72 6b 20 53 6f 66 74 77 61 72 65 2c 20  twork Software, 
0170: 6f 72 20 74 6f 20 74 68 69 73 20 70 72 6f 6a 65  or to this proje
0180: 63 74 20 67 65 6e 65 72 61 6c 6c 79 2c 20 79 6f  ct generally, yo
0190: 75 20 61 67 72 65 65 20 74 6f 20 62 65 0a 2f 2f  u agree to be.//
01a0: 20 62 6f 75 6e 64 20 62 79 20 74 68 65 20 74 65   bound by the te
01b0: 72 6d 73 20 6f 66 20 74 68 65 20 4d 61 69 64 53  rms of the MaidS
01c0: 61 66 65 20 43 6f 6e 74 72 69 62 75 74 6f 72 20  afe Contributor 
01d0: 41 67 72 65 65 6d 65 6e 74 2e 20 20 54 68 69 73  Agreement.  This
01e0: 2c 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65  , along with the
01f0: 20 4c 69 63 65 6e 73 65 73 20 63 61 6e 20 62 65   Licenses can be
0200: 0a 2f 2f 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  .// found in the
0210: 20 72 6f 6f 74 20 64 69 72 65 63 74 6f 72 79 20   root directory 
0220: 6f 66 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20  of this project 
0230: 61 74 20 4c 49 43 45 4e 53 45 2c 20 43 4f 50 59  at LICENSE, COPY
0240: 49 4e 47 20 61 6e 64 20 43 4f 4e 54 52 49 42 55  ING and CONTRIBU
0250: 54 4f 52 2e 0a 2f 2f 0a 2f 2f 20 55 6e 6c 65 73  TOR..//.// Unles
0260: 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 70  s required by ap
0270: 70 6c 69 63 61 62 6c 65 20 6c 61 77 20 6f 72 20  plicable law or 
0280: 61 67 72 65 65 64 20 74 6f 20 69 6e 20 77 72 69  agreed to in wri
0290: 74 69 6e 67 2c 20 74 68 65 20 53 41 46 45 20 4e  ting, the SAFE N
02a0: 65 74 77 6f 72 6b 20 53 6f 66 74 77 61 72 65 20  etwork Software 
02b0: 64 69 73 74 72 69 62 75 74 65 64 0a 2f 2f 20 75  distributed.// u
02c0: 6e 64 65 72 20 74 68 65 20 47 50 4c 20 4c 69 63  nder the GPL Lic
02d0: 65 6e 63 65 20 69 73 20 64 69 73 74 72 69 62 75  ence is distribu
02e0: 74 65 64 20 6f 6e 20 61 6e 20 22 41 53 20 49 53  ted on an "AS IS
02f0: 22 20 42 41 53 49 53 2c 20 57 49 54 48 4f 55 54  " BASIS, WITHOUT
0300: 20 57 41 52 52 41 4e 54 49 45 53 20 4f 52 20 43   WARRANTIES OR C
0310: 4f 4e 44 49 54 49 4f 4e 53 20 4f 46 20 41 4e 59  ONDITIONS OF ANY
0320: 0a 2f 2f 20 4b 49 4e 44 2c 20 65 69 74 68 65 72  .// KIND, either
0330: 20 65 78 70 72 65 73 73 20 6f 72 20 69 6d 70 6c   express or impl
0340: 69 65 64 2e 0a 2f 2f 0a 2f 2f 20 50 6c 65 61 73  ied..//.// Pleas
0350: 65 20 72 65 76 69 65 77 20 74 68 65 20 4c 69 63  e review the Lic
0360: 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 73 70  ences for the sp
0370: 65 63 69 66 69 63 20 6c 61 6e 67 75 61 67 65 20  ecific language 
0380: 67 6f 76 65 72 6e 69 6e 67 20 70 65 72 6d 69 73  governing permis
0390: 73 69 6f 6e 73 20 61 6e 64 20 6c 69 6d 69 74 61  sions and limita
03a0: 74 69 6f 6e 73 0a 2f 2f 20 72 65 6c 61 74 69 6e  tions.// relatin
03b0: 67 20 74 6f 20 75 73 65 20 6f 66 20 74 68 65 20  g to use of the 
03c0: 53 41 46 45 20 4e 65 74 77 6f 72 6b 20 53 6f 66  SAFE Network Sof
03d0: 74 77 61 72 65 2e 0a 0a 75 73 65 20 44 49 52 5f  tware...use DIR_
03e0: 54 41 47 3b 0a 75 73 65 20 63 6c 69 65 6e 74 3a  TAG;.use client:
03f0: 3a 7b 43 6c 69 65 6e 74 2c 20 4d 44 61 74 61 49  :{Client, MDataI
0400: 6e 66 6f 7d 3b 0a 75 73 65 20 65 72 72 6f 72 73  nfo};.use errors
0410: 3a 3a 43 6f 72 65 45 72 72 6f 72 3b 0a 75 73 65  ::CoreError;.use
0420: 20 66 75 74 75 72 65 73 3a 3a 46 75 74 75 72 65   futures::Future
0430: 3b 0a 75 73 65 20 6e 66 73 3a 3a 7b 4e 66 73 45  ;.use nfs::{NfsE
0440: 72 72 6f 72 2c 20 4e 66 73 46 75 74 75 72 65 7d  rror, NfsFuture}
0450: 3b 0a 75 73 65 20 72 6f 75 74 69 6e 67 3a 3a 4d  ;.use routing::M
0460: 75 74 61 62 6c 65 44 61 74 61 3b 0a 75 73 65 20  utableData;.use 
0470: 73 74 64 3a 3a 63 6f 6c 6c 65 63 74 69 6f 6e 73  std::collections
0480: 3a 3a 7b 42 54 72 65 65 4d 61 70 2c 20 42 54 72  ::{BTreeMap, BTr
0490: 65 65 53 65 74 7d 3b 0a 75 73 65 20 75 74 69 6c  eeSet};.use util
04a0: 73 3a 3a 46 75 74 75 72 65 45 78 74 3b 0a 0a 2f  s::FutureExt;../
04b0: 2f 2f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  // create a new 
04c0: 64 69 72 65 63 74 6f 72 79 20 65 6d 75 6c 61 74  directory emulat
04d0: 69 6f 6e 0a 70 75 62 20 66 6e 20 63 72 65 61 74  ion.pub fn creat
04e0: 65 5f 64 69 72 28 63 6c 69 65 6e 74 3a 20 26 43  e_dir(client: &C
04f0: 6c 69 65 6e 74 2c 20 69 73 5f 70 75 62 6c 69 63  lient, is_public
0500: 3a 20 62 6f 6f 6c 29 20 2d 3e 20 42 6f 78 3c 4e  : bool) -> Box<N
0510: 66 73 46 75 74 75 72 65 3c 4d 44 61 74 61 49 6e  fsFuture<MDataIn
0520: 66 6f 3e 3e 20 7b 0a 20 20 20 20 6d 61 74 63 68  fo>> {.    match
0530: 20 63 6c 69 65 6e 74 2e 6f 77 6e 65 72 5f 6b 65   client.owner_ke
0540: 79 28 29 20 7b 0a 20 20 20 20 20 20 20 20 4f 6b  y() {.        Ok
0550: 28 70 75 62 5f 6b 65 79 29 20 3d 3e 20 7b 0a 20  (pub_key) => {. 
0560: 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 64             let d
0570: 69 72 20 3d 20 69 66 20 69 73 5f 70 75 62 6c 69  ir = if is_publi
0580: 63 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  c {.            
0590: 20 20 20 20 66 72 79 21 28 4d 44 61 74 61 49 6e      fry!(MDataIn
05a0: 66 6f 3a 3a 72 61 6e 64 6f 6d 5f 70 75 62 6c 69  fo::random_publi
05b0: 63 28 44 49 52 5f 54 41 47 29 29 0a 20 20 20 20  c(DIR_TAG)).    
05c0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
05d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
05e0: 20 66 72 79 21 28 4d 44 61 74 61 49 6e 66 6f 3a   fry!(MDataInfo:
05f0: 3a 72 61 6e 64 6f 6d 5f 70 72 69 76 61 74 65 28  :random_private(
0600: 44 49 52 5f 54 41 47 29 29 0a 20 20 20 20 20 20  DIR_TAG)).      
0610: 20 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20 20 20        };..      
0620: 20 20 20 20 20 20 6c 65 74 20 6d 75 74 20 6f 77        let mut ow
0630: 6e 65 72 73 20 3d 20 42 54 72 65 65 53 65 74 3a  ners = BTreeSet:
0640: 3a 6e 65 77 28 29 3b 0a 20 20 20 20 20 20 20 20  :new();.        
0650: 20 20 20 20 6f 77 6e 65 72 73 2e 69 6e 73 65 72      owners.inser
0660: 74 28 70 75 62 5f 6b 65 79 29 3b 0a 20 20 20 20  t(pub_key);.    
0670: 20 20 20 20 20 20 20 20 6c 65 74 20 64 69 72 5f          let dir_
0680: 6d 64 20 3d 20 66 72 79 21 28 4d 75 74 61 62 6c  md = fry!(Mutabl
0690: 65 44 61 74 61 3a 3a 6e 65 77 28 64 69 72 2e 6e  eData::new(dir.n
06a0: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 20 20 64 69 72 2e 74 79 70 65 5f 74 61 67      dir.type_tag
06e0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0710: 20 42 54 72 65 65 4d 61 70 3a 3a 6e 65 77 28 29   BTreeMap::new()
0720: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0750: 20 42 54 72 65 65 4d 61 70 3a 3a 6e 65 77 28 29   BTreeMap::new()
0760: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0790: 20 6f 77 6e 65 72 73 29 0a 20 20 20 20 20 20 20   owners).       
07a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
07c0: 6d 61 70 5f 65 72 72 28 43 6f 72 65 45 72 72 6f  map_err(CoreErro
07d0: 72 3a 3a 66 72 6f 6d 29 29 3b 0a 20 20 20 20 20  r::from));.     
07e0: 20 20 20 20 20 20 20 63 6c 69 65 6e 74 2e 70 75         client.pu
07f0: 74 5f 6d 64 61 74 61 28 64 69 72 5f 6d 64 29 0a  t_mdata(dir_md).
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 2e 61 6e 64 5f 74 68 65 6e 28 7c 28 29 7c 20 4f  .and_then(|()| O
0820: 6b 28 64 69 72 29 29 0a 20 20 20 20 20 20 20 20  k(dir)).        
0830: 20 20 20 20 20 20 20 20 2e 6d 61 70 5f 65 72 72          .map_err
0840: 28 4e 66 73 45 72 72 6f 72 3a 3a 66 72 6f 6d 29  (NfsError::from)
0850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0860: 20 2e 69 6e 74 6f 5f 62 6f 78 28 29 0a 20 20 20   .into_box().   
0870: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 45       }.        E
0880: 72 72 28 65 72 72 29 20 3d 3e 20 65 72 72 21 28  rr(err) => err!(
0890: 4e 66 73 45 72 72 6f 72 3a 3a 66 72 6f 6d 28 65  NfsError::from(e
08a0: 72 72 29 29 2e 69 6e 74 6f 5f 62 6f 78 28 29 2c  rr)).into_box(),
08b0: 0a 20 20 20 20 7d 0a 7d 0a                       .    }.}.