mirror of
https://github.com/xevidos/codiad.git
synced 2024-11-11 05:36:34 +01:00
110 lines
2.8 KiB
PHP
Executable File
110 lines
2.8 KiB
PHP
Executable File
<?php
|
|
|
|
/*
|
|
* Copyright (c) Codiad & Kent Safranski (codiad.com), distributed
|
|
* as-is and without warranty under the MIT License. See
|
|
* [root]/license.txt for more. This information must remain intact.
|
|
*/
|
|
|
|
require_once( '../../common.php' );
|
|
require_once( './class.archive.php' );
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Verify Session or Key
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
checkSession();
|
|
|
|
$response = array(
|
|
"status" => "none",
|
|
"message" => null,
|
|
);
|
|
|
|
if( ! isset( $_GET["path"] ) && ! isset( $_POST["path"] ) ) {
|
|
|
|
$response["status"] = "error";
|
|
$response["message"] = "Missing path.";
|
|
exit( json_encode( $response ) );
|
|
}
|
|
|
|
$path = ( isset( $_GET["path"] ) ) ? $_GET["path"] : $_POST["path"];
|
|
$full_path = "";
|
|
|
|
if( Common::isAbsPath( $path ) ) {
|
|
|
|
$full_path = realpath( $path );
|
|
} else {
|
|
|
|
$full_path = WORKSPACE . "/$path";
|
|
$full_path = realpath( $full_path );
|
|
}
|
|
|
|
if( $full_path === false ) {
|
|
|
|
$response["status"] = "error";
|
|
$response["message"] = "Invalid path.";
|
|
exit( json_encode( $response ) );
|
|
}
|
|
|
|
if( ! Permissions::has_read( $path ) ) {
|
|
|
|
$response["status"] = "error";
|
|
$response["message"] = "You do not have access to this path.";
|
|
exit( json_encode( $response ) );
|
|
}
|
|
|
|
if( is_dir( $full_path ) ) {
|
|
|
|
$temp_path = tempnam( sys_get_temp_dir(), 'codiad_download_' . date( "U" ) );
|
|
$result = Archive::compress( $full_path, $temp_path, 'default' );
|
|
$mime_type = mime_content_type( $temp_path );
|
|
|
|
if( in_array( $mime_type, array_keys( Archive::MIME_TYPE_EXTENSIONS ) ) ) {
|
|
|
|
$extension = Archive::MIME_TYPE_EXTENSIONS["$mime_type"];
|
|
}
|
|
|
|
if( $result ) {
|
|
|
|
header( 'Content-Description: File Transfer' );
|
|
header( 'Content-Type: application/octet-stream' );
|
|
header( 'Content-Disposition: attachment; filename="' . basename( $full_path ) . ".$extension" . '"' );
|
|
header( 'Content-Transfer-Encoding: binary' );
|
|
header( 'Expires: 0' );
|
|
header( 'Cache-Control: must-revalidate' );
|
|
header( 'Pragma: public' );
|
|
header( 'Content-Length: ' . filesize( $temp_path ) );
|
|
|
|
if( ob_get_contents() ) {
|
|
|
|
ob_end_clean();
|
|
}
|
|
|
|
flush();
|
|
file_put_contents( "php://output", file_get_contents( $temp_path ) );
|
|
} else {
|
|
|
|
$response["status"] = "error";
|
|
$response["message"] = "An archive could not be created.";
|
|
}
|
|
unlink( $temp_path );
|
|
} else {
|
|
|
|
header( 'Content-Description: File Transfer' );
|
|
header( 'Content-Type: application/octet-stream' );
|
|
header( 'Content-Disposition: attachment; filename="' . basename( $full_path ) . '"' );
|
|
header( 'Content-Transfer-Encoding: binary' );
|
|
header( 'Expires: 0' );
|
|
header( 'Cache-Control: must-revalidate' );
|
|
header( 'Pragma: public' );
|
|
header( 'Content-Length: ' . filesize( $full_path ) );
|
|
|
|
if( ob_get_contents() ) {
|
|
|
|
ob_end_clean();
|
|
}
|
|
|
|
flush();
|
|
readfile( $full_path );
|
|
}
|