summaryrefslogtreecommitdiffstats
path: root/apps/files_publiclink/get.php
blob: d3e3022e76177c8c0d61435dc4c998752905d612 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
$RUNTIME_NOAPPS=true; //no need to load the apps
$RUNTIME_NOSETUPFS=true; //don't setup the fs yet

require_once '../../lib/base.php';
require( 'template.php' );

require_once 'lib_public.php';

//get the path of the shared file
$token=$_GET['token'];
$path=OC_PublicLink::getPath($token);
$root=$path;

if($path!==false){
	if(isset($_GET['path']) and !strstr($_GET['path'],'..')){
		$subPath=$_GET['path'];
	}else{
		$subPath='';
	}
	$path.=$subPath;
	if(!OC_FILESYSTEM::file_exists($path)){
		header("HTTP/1.0 404 Not Found");
		$tmpl = new OC_TEMPLATE( '', '404', 'guest' );
		$tmpl->assign('file',$subPath);
		$tmpl->printPage();
		exit;
	}
	if(OC_FILESYSTEM::is_dir($path)){
		$files = array();
		$rootLength=strlen($root);
		foreach( OC_FILES::getdirectorycontent( $path ) as $i ){
			$i['date'] = OC_UTIL::formatDate($i['mtime'] );
			$i['directory']=substr($i['directory'],$rootLength);
			if($i['directory']=='/'){
				$i['directory']='';
			}
			$files[] = $i;
		}
		
		// Make breadcrumb
		$breadcrumb = array();
		$pathtohere = "/";
		foreach( explode( "/", $subPath ) as $i ){
			if( $i != "" ){
				$pathtohere .= "$i/";
				$breadcrumb[] = array( "dir" => $pathtohere, "name" => $i );
			}
		}
		
		$breadcrumbNav = new OC_TEMPLATE( "files_publiclink", "breadcrumb", "" );
		$breadcrumbNav->assign( "breadcrumb", $breadcrumb );
		$breadcrumbNav->assign('token',$token);
		
		$list = new OC_TEMPLATE( 'files_publiclink', 'files', '' );
		$list->assign( 'files', $files );
		$list->assign('token',$token);
		
		$tmpl = new OC_TEMPLATE( 'files_publiclink', 'index', 'user' );
		$tmpl->assign('fileList', $list->fetchPage());
		$tmpl->assign( "breadcrumb", $breadcrumbNav->fetchPage() );
		$tmpl->printPage();
	}else{
		//get time mimetype and set the headers
		$mimetype=OC_FILESYSTEM::getMimeType($path);
		header('Content-Transfer-Encoding: binary');
		header('Content-Disposition: attachment; filename="'.basename($path).'"');
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		header('Content-Type: ' . $mimetype);
		header('Content-Length: ' . OC_FILESYSTEM::filesize($path));
		
		//download the file
		@ob_clean();
		OC_FILESYSTEM::readfile($path);
	}
}else{
	header("HTTP/1.0 404 Not Found");
	$tmpl = new OC_TEMPLATE( '', '404', 'guest' );
	$tmpl->printPage();
	die();
}
?>