def post(self): user = users.get_current_user() if user == None: self.redirect('/') else: current_user = MyUser.get(user.user_id()) dir_id = self.request.get('dir') owner_user, directory, parent = check(current_user.key, dir_id) if owner_user and directory and ( directory.is_users_dir(current_user.key) or has_write_permission(current_user.key, parent)): for upload in self.get_uploads(): blobinfo = blobstore.BlobInfo(upload.key()) my_file = File(name=blobinfo.filename, blob=upload.key()) if not directory.file_exists(my_file.name): directory.files.append(my_file) directory.put() self.redirect(self.request.referer)
def check(current_user_key, cwd_id): owner = MyUser.get(cwd_id.split('/')[0]) if owner: directory = Directory.get_by_id(cwd_id, owner.key) if directory: parent = None is_shared = directory.is_users_dir(current_user_key) if not is_shared: parent = directory while parent and not is_shared and current_user_key not in parent.lock: is_shared = parent.is_shared_to_me(current_user_key) if not is_shared: parent = parent.get_parent() if is_shared: return owner, directory, parent return None, None, None
def get(self, abs_path): user = users.get_current_user() if user == None: self.redirect('/') else: current_user = MyUser.get(user.user_id()) abs_path = abs_path.split('/') file_index = abs_path[len(abs_path) - 1 if len(abs_path) > 2 else 1] abs_path[len(abs_path) - 1] = '' abs_path = '/'.join(abs_path) owner_user, directory, parent = check(current_user.key, abs_path) if file_index and owner_user and directory: my_file = directory.files[int(file_index)] self.send_blob(my_file.blob, save_as=my_file.name) else: self.redirect('/')