Mael ETIENNE 3 years ago
parent
commit
fecceb04f5
4 changed files with 35 additions and 44 deletions
  1. 6
    20
      Entity/ZipFile.php
  2. 23
    18
      LogiproSCORMBundle.php
  3. 5
    5
      README.md
  4. 1
    1
      Services/ScormEngine.php

+ 6
- 20
Entity/ZipFile.php View File

@@ -330,31 +330,17 @@ class ZipFile extends AbstractEntity
330 330
      * @param string $zipPath
331 331
      * @param string $uploadPath
332 332
      *
333
-     * @return array
333
+     * @return bool
334 334
      */
335
-    public function uploadZipFromPath(string $zipPath, string $uploadPath)
335
+    public function uploadZipFromPath(string $zipPath, string $uploadPath) : bool
336 336
     {
337
-        $response = array();
338
-        $response['existingFile'] = null;
339
-        $response['upload'] = false;
340
-
341 337
         if (file_exists($zipPath)) {
342 338
             // Récupération de la signature du zip
343
-            $hash = md5_file($zipPath);
344
-
345
-            // Test de l'existance de la signature
346
-            $repository = $this->entityManager->getRepository(ZipFile::class);
347
-            $oldZipFile = $repository->findOneBy(['zip_fileprint' => $hash]);
348
-            // si le fichier existe déjà, on renvoie son id
349
-            if (!empty($oldZipFile)) {
350
-                $response['existingFile'] = $oldZipFile;
351
-                return $response;
352
-            }
353
-
354 339
             //upload du fichier coté moteur
355 340
             $uploadDate = new \DateTime('NOW');
356 341
             $fileName = pathinfo($zipPath)['filename'];
357
-            $filePath = $uploadPath . $fileName;
342
+            $hash = md5_file($zipPath);
343
+            $filePath = $uploadPath . '/'.$hash;
358 344
             if (copy($zipPath, $filePath)) {
359 345
                 $this->importStatus = self::IMPORT_STATUS_PROCESSING;
360 346
             }
@@ -365,10 +351,10 @@ class ZipFile extends AbstractEntity
365 351
             $this->uploadDate = $uploadDate;
366 352
             $this->endUploadDate = $endUploadDate;
367 353
 
368
-            $response['upload'] = true;
354
+            return true;
369 355
         }
370 356
 
371
-        return $response;
357
+        return false;
372 358
     }
373 359
 
374 360
     /**

+ 23
- 18
LogiproSCORMBundle.php View File

@@ -16,11 +16,17 @@ class LogiproSCORMBundle extends Bundle
16 16
     {
17 17
         parent::build($container);
18 18
     }
19
-
20
-    private function initialiseFolders()
19
+/**
20
+ * *creation du repertoire qui contiendra les ressources accesibles :
21
+ * ** stockage des paquets scorms (logipro_scorm.content_folder)
22
+ * * creation du fichier .htaccess qui restreindra l'acces aux ressources
23
+ *
24
+ * @return void
25
+ */
26
+    private function initialiseFolders() : void
21 27
     {
22 28
         $contentFolder = $this->container->getParameter('logipro_scorm.content_folder');
23
-        // creation du repertoir de reception  du contenu
29
+        // creation du repertoire de reception  du contenu
24 30
         if (!file_exists($contentFolder)) {
25 31
             mkdir($contentFolder, 0755, true);
26 32
         }
@@ -29,39 +35,39 @@ class LogiproSCORMBundle extends Bundle
29 35
         
30 36
         $htaccess = $contentFolder.'/.htaccess';
31 37
         // on prendra garde de doubler le \ en \\
38
+        $now = $today = date("Y-m-d H:i:s");
32 39
         $content=<<<EOT
40
+# automatically generated by LogiproSCORMBundle.initialiseFolders at $now
33 41
 Options +FollowSymlinks
34 42
 RewriteEngine On
35 43
 
36 44
 RewriteBase "$contentUrlPrefix/"
37 45
 
38
-# l'acces au ressource est donnée a une url qui contient un code correspondant à
39
-# une operation de transofrmation de la valeur du cookie
46
+#en cas d'acces à un fichier/existant existant laisse l'acces... 
47
+#...a condition d'un environnement phpsession indice (insuffisant) que c'est un utilisateur connu
48
+# (a ameliorer)
49
+RewriteCond %{REQUEST_FILENAME} -f [OR]
50
+RewriteCond %{REQUEST_FILENAME} -d
51
+RewriteCond %{HTTP_COOKIE} !PHPSESSID= [NC]
52
+RewriteRule .* - [L]
40 53
 
54
+# l'acces au ressource est donnée a une url qui contient un code correspondant à
55
+# une operation de transformation de la valeur du cookie
41 56
 
42
-#si le coockie n'existe pas alors pas droit d'acces à la ressource403 
57
+#si le coockie n'existe pas alors pas droit d'acces à la ressource : 403 
43 58
 RewriteCond %{HTTP_COOKIE} !SCORMBundle= [NC]
44 59
 RewriteRule .* - [R=403,L]
45 60
 
46
-
47 61
 #on stocke la valeur du cookie...
48 62
 RewriteCond %{HTTP_COOKIE} SCORMBundle=([^;]+)
49 63
 RewriteRule ^(.*) $1 [E=md5scormkey:%1]
50 64
 
51
-#RewriteRule .* https://www.logipro.com/%{ENV:md5scormkey} [L]
52
-
53
-# on recupere la clef contenu dans la chaine
65
+# on recupere la clef contenue dans la chaine
54 66
 RewriteCond %{REQUEST_URI} ^$contentUrlPrefix/([^/]+)/(.+)$
55 67
 RewriteRule .* - [E=key:%1,E=resource:%2]
68
+RewriteCond expr "md5('%{ENV:key}') == %{ENV:md5scormkey}"
56 69
 
57
-RewriteCond expr "md5('%{ENV:key}') = '%{ENV:md5scormkey}'"
58
-
59
-#on compare la valeur du cookie à ce qu'il y dans l'url : oui il faut connaitre un peu les expression perl
60
-# une reference arriere est noté \\n dans une chaine
61
-#RewriteCond %{ENV:md5scormkey}:%{ENV:key} ^(.*):\\1
62
-#RewriteCond %{REQUEST_FILENAME} !-f
63 70
 RewriteRule .* $contentUrlPrefix/%{ENV:resource} [L]
64
-
65 71
 EOT;
66 72
 
67 73
         $handle = fopen($htaccess, 'w');
@@ -73,6 +79,5 @@ EOT;
73 79
         if (!file_exists($packageFolder)) {
74 80
             mkdir($packageFolder, 0777, true);
75 81
         }
76
-
77 82
     }
78 83
 }

+ 5
- 5
README.md View File

@@ -41,8 +41,8 @@ php bin/console doctrine:schema:update --force
41 41
 Security
42 42
 --------
43 43
 
44
-Package resources access has cookie authentification. It allows application access only to user 
45
-owning resources. For instance none would be able to access diurecly by url.
44
+Package resources access has cookie authentification. It allows application access only to user
45
+owning resources. For instance none would be able to access directly by url.
46 46
 (example : http://yourdomaine/content/SeqPostSCORM20044th/imsmanifest.xml will return a 403)
47 47
 
48 48
 You must configure the following things :
@@ -51,11 +51,11 @@ You must configure the following things :
51 51
 logipro_scorm:
52 52
   package_folder: '%kernel.project_dir%/private/packages'
53 53
   content_folder: '%kernel.project_dir%/public/content'
54
-  content_url_prefix: '/lms/content'
54
+  content_url_prefix: '/content'
55 55
 ```
56 56
 
57
-A special .htacces will be autogenerated in content_folder and url_prefix will be used to
58
-create url access to ressources, like this : https://yourdomain/content_url_prefix/CODE/ressourceofapackage
57
+A special .htacces file will be autogenerated in content_folder and url_prefix will be used to
58
+create url access to resources, like this : https://yourdomain/content_url_prefix/CODE/ressourceofapackage
59 59
 
60 60
 Resources
61 61
 ---------

+ 1
- 1
Services/ScormEngine.php View File

@@ -105,7 +105,7 @@ class ScormEngine implements ContainerAwareInterface
105 105
 
106 106
             if ($course) {
107 107
                 $response['code'] = 400;
108
-                $response['error'] = 'La clef de cours existe déjà. Utilser \'updateCourse\' pour mettre à jour un cours existant';
108
+                $response['error'] = 'La clef de cours existe déjà. Utiliser \'updateCourse\' pour mettre à jour un cours existant';
109 109
                 return $response;
110 110
             }
111 111
 

Loading…
Cancel
Save