source: lmd/trunk/fuentes/admin-center-ltsp.install/adminroot/uploadiso.php @ 6716

Last change on this file since 6716 was 6716, checked in by kbut, 20 months ago

Do secure upload file

File size: 1.9 KB
Line 
1<?php
2include('./n4d_lib.php');
3include("./libphp/cryptojs-aes.php");
4
5class UploadManager{
6        const ISOSPATH = "/opt/ltsp/isos/";
7        const FORMISONAME = "isofile";
8        private $info;
9        private $original_name;
10        private $ext;
11        private $FILES;
12       
13        function __construct($FILESTOUPLOAD,$POST){
14                $this->file_info = pathinfo($FILESTOUPLOAD[self::FORMISONAME]['name']);
15                $this->original_name = $this->file_info['filename'];
16                $this->ext = $this->file_info['extension'];
17                $this->FILES = $FILESTOUPLOAD;
18                $this->user = $this->RSADecrypt($POST['user']);
19                $this->password = $this->RSADecrypt($POST['password']);
20        }
21
22        private function get_valid_name(){
23                $dest = self::ISOSPATH . $this->original_name . "." .$this->ext;
24                if(!file_exists($dest)){
25                        return $dest;
26                }
27                for($i=1; $i<100; $i++){
28                        $dest = self::ISOSPATH . $this->original_name . $i . "." .$this->ext;
29                        if(!file_exists($dest)) return $dest;
30                }
31                return null;
32        }
33        public function save_file(){
34
35                $cliente = new N4D('localhost');
36                try{
37                                $result = $cliente->execute('validate_user',[$this->user,$this->password]);
38                                $groups = array('adm','admin');
39                                if(!($result[0] && count(array_intersect($result[1],$groups)) >= 1)){
40                                        return array("result"=>"False","msg"=>"");
41                                }
42                }
43                catch (Exception $e){
44                        return array("result"=>"False","msg"=>$e);
45                }
46
47                $target = $this->get_valid_name();
48                $result = ["target"=>$target,"result"=>False];
49                if (!is_null($target)){
50                        $result['result'] = move_uploaded_file($this->FILES[self::FORMISONAME]['tmp_name'],$target);
51                }
52                return $result;
53        }
54
55        private function RSADecrypt($crypttext){
56                $priv_key = openssl_pkey_get_private("file:///etc/admin-center/private_key.pem");
57                openssl_private_decrypt(base64_decode($crypttext), $newsource, $priv_key );
58                return $newsource;
59          }
60}
61$uploadManager = new UploadManager($_FILES,$_POST);
62$result = $uploadManager->save_file();
63
64# Response
65header('Content-Type: application/json');
66echo json_encode($result);
67
68?>
Note: See TracBrowser for help on using the repository browser.