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

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

Add security to upload file

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