formation 2 лет назад
Родитель
Сommit
c84ce76443

+ 136 - 23
angular-client/package-lock.json

@@ -2835,6 +2835,24 @@
       "integrity": "sha512-xbV74ulf5BwIA61jASjKxzS0gzD6CQQkqPXDRo8I1tpDMQpEKFKWivw+1Joy6Anm62DWR4xuMEhnj5kjKWemgw==",
       "integrity": "sha512-xbV74ulf5BwIA61jASjKxzS0gzD6CQQkqPXDRo8I1tpDMQpEKFKWivw+1Joy6Anm62DWR4xuMEhnj5kjKWemgw==",
       "dev": true
       "dev": true
     },
     },
+    "@nguniversal/common": {
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/@nguniversal/common/-/common-9.1.1.tgz",
+      "integrity": "sha512-stYQzea9jhbs8XJDZEGcdHRVBrUp4wE3KMVufQNnQMbW/R+JpakGP6XBfPY3NLmqs/xJpVUIcIl3/6l5XxpR5A=="
+    },
+    "@nguniversal/express-engine": {
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-9.1.1.tgz",
+      "integrity": "sha512-K/4cY+mJgJu65HYyFz5L4wrUqtkYqsg/itXOWhPCeuzhBCVpJQntXq2z07sxM+Jl5EIbCi3jGa5wnm/17uti4w==",
+      "requires": {
+        "@nguniversal/common": "9.1.1"
+      }
+    },
+    "@nguniversal/module-map-ngfactory-loader": {
+      "version": "8.2.6",
+      "resolved": "https://registry.npmjs.org/@nguniversal/module-map-ngfactory-loader/-/module-map-ngfactory-loader-8.2.6.tgz",
+      "integrity": "sha512-YcxXSrDZt6iDR+YbesJvprNpHd1nRLeThJwAFlcwvK/GVGSyKeWV6eqk3bRkBkgkw8OwaG/4lOQ4aofxQw+13w=="
+    },
     "@schematics/angular": {
     "@schematics/angular": {
       "version": "9.1.4",
       "version": "9.1.4",
       "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.4.tgz",
       "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.4.tgz",
@@ -3224,7 +3242,7 @@
     "after": {
     "after": {
       "version": "0.8.2",
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
       "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
-      "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+      "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==",
       "dev": true
       "dev": true
     },
     },
     "agent-base": {
     "agent-base": {
@@ -3648,7 +3666,7 @@
     "backo2": {
     "backo2": {
       "version": "1.0.2",
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
       "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
-      "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+      "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==",
       "dev": true
       "dev": true
     },
     },
     "balanced-match": {
     "balanced-match": {
@@ -3920,7 +3938,6 @@
       "version": "3.0.2",
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
       "requires": {
       "requires": {
         "fill-range": "^7.0.1"
         "fill-range": "^7.0.1"
       }
       }
@@ -4579,7 +4596,7 @@
     "component-bind": {
     "component-bind": {
       "version": "1.0.0",
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
       "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
-      "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+      "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==",
       "dev": true
       "dev": true
     },
     },
     "component-emitter": {
     "component-emitter": {
@@ -4591,7 +4608,7 @@
     "component-inherit": {
     "component-inherit": {
       "version": "0.0.3",
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
       "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
-      "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+      "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==",
       "dev": true
       "dev": true
     },
     },
     "compressible": {
     "compressible": {
@@ -4675,7 +4692,7 @@
         "ms": {
         "ms": {
           "version": "2.0.0",
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
           "dev": true
         }
         }
       }
       }
@@ -5269,7 +5286,7 @@
     "custom-event": {
     "custom-event": {
       "version": "1.0.1",
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
       "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
-      "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+      "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==",
       "dev": true
       "dev": true
     },
     },
     "cyclist": {
     "cyclist": {
@@ -5544,7 +5561,7 @@
     "di": {
     "di": {
       "version": "0.0.1",
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
       "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
-      "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+      "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==",
       "dev": true
       "dev": true
     },
     },
     "diff": {
     "diff": {
@@ -5609,7 +5626,7 @@
     "dom-serialize": {
     "dom-serialize": {
       "version": "2.2.1",
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
       "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
-      "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+      "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
         "custom-event": "~1.0.0",
         "custom-event": "~1.0.0",
@@ -5844,7 +5861,7 @@
     "ent": {
     "ent": {
       "version": "2.2.0",
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
       "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
-      "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+      "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==",
       "dev": true
       "dev": true
     },
     },
     "entities": {
     "entities": {
@@ -6547,7 +6564,6 @@
       "version": "7.0.1",
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
       "requires": {
       "requires": {
         "to-regex-range": "^5.0.1"
         "to-regex-range": "^5.0.1"
       }
       }
@@ -6579,7 +6595,7 @@
         "ms": {
         "ms": {
           "version": "2.0.0",
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
           "dev": true
         }
         }
       }
       }
@@ -7225,7 +7241,7 @@
         "isarray": {
         "isarray": {
           "version": "2.0.1",
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
-          "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+          "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==",
           "dev": true
           "dev": true
         }
         }
       }
       }
@@ -7233,7 +7249,7 @@
     "has-cors": {
     "has-cors": {
       "version": "1.1.0",
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
       "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
-      "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+      "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==",
       "dev": true
       "dev": true
     },
     },
     "has-flag": {
     "has-flag": {
@@ -7699,7 +7715,7 @@
     "indexof": {
     "indexof": {
       "version": "0.0.1",
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
       "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
-      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+      "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==",
       "dev": true
       "dev": true
     },
     },
     "infer-owner": {
     "infer-owner": {
@@ -8095,8 +8111,7 @@
     "is-number": {
     "is-number": {
       "version": "7.0.0",
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
     },
     },
     "is-number-object": {
     "is-number-object": {
       "version": "1.0.7",
       "version": "1.0.7",
@@ -14662,7 +14677,7 @@
     "to-array": {
     "to-array": {
       "version": "0.1.4",
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
       "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
-      "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+      "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==",
       "dev": true
       "dev": true
     },
     },
     "to-arraybuffer": {
     "to-arraybuffer": {
@@ -14712,7 +14727,6 @@
       "version": "5.0.1",
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
       "requires": {
       "requires": {
         "is-number": "^7.0.0"
         "is-number": "^7.0.0"
       }
       }
@@ -14738,6 +14752,106 @@
       "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
       "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
       "dev": true
       "dev": true
     },
     },
+    "ts-loader": {
+      "version": "9.4.2",
+      "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz",
+      "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==",
+      "requires": {
+        "chalk": "^4.1.0",
+        "enhanced-resolve": "^5.0.0",
+        "micromatch": "^4.0.0",
+        "semver": "^7.3.4"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+        },
+        "enhanced-resolve": {
+          "version": "5.12.0",
+          "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+          "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
+          "requires": {
+            "graceful-fs": "^4.2.4",
+            "tapable": "^2.2.0"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "micromatch": {
+          "version": "4.0.5",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+          "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+          "requires": {
+            "braces": "^3.0.2",
+            "picomatch": "^2.3.1"
+          }
+        },
+        "picomatch": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+          "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+        },
+        "semver": {
+          "version": "7.3.8",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+          "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "tapable": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+          "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="
+        }
+      }
+    },
     "ts-node": {
     "ts-node": {
       "version": "8.3.0",
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz",
       "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz",
@@ -15223,7 +15337,7 @@
     "void-elements": {
     "void-elements": {
       "version": "2.0.1",
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
       "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
-      "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+      "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==",
       "dev": true
       "dev": true
     },
     },
     "watchpack": {
     "watchpack": {
@@ -16156,8 +16270,7 @@
     "yallist": {
     "yallist": {
       "version": "4.0.0",
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
     },
     "yargs": {
     "yargs": {
       "version": "12.0.5",
       "version": "12.0.5",
@@ -16399,7 +16512,7 @@
     "yeast": {
     "yeast": {
       "version": "0.1.2",
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
       "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
-      "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+      "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==",
       "dev": true
       "dev": true
     },
     },
     "yn": {
     "yn": {

+ 3 - 0
angular-client/package.json

@@ -23,6 +23,8 @@
     "@angular/platform-browser": "~9.1.4",
     "@angular/platform-browser": "~9.1.4",
     "@angular/platform-browser-dynamic": "~9.1.4",
     "@angular/platform-browser-dynamic": "~9.1.4",
     "@angular/router": "~9.1.4",
     "@angular/router": "~9.1.4",
+    "@nguniversal/express-engine": "^9.1.1",
+    "@nguniversal/module-map-ngfactory-loader": "^8.2.6",
     "@types/jwt-decode": "^2.2.1",
     "@types/jwt-decode": "^2.2.1",
     "@types/leaflet": "^1.5.12",
     "@types/leaflet": "^1.5.12",
     "bootstrap": "^4.4.1",
     "bootstrap": "^4.4.1",
@@ -36,6 +38,7 @@
     "ng2-charts": "^2.3.0",
     "ng2-charts": "^2.3.0",
     "rxjs": "~6.5.4",
     "rxjs": "~6.5.4",
     "saturn-datepicker": "^8.0.5",
     "saturn-datepicker": "^8.0.5",
+    "ts-loader": "^9.4.2",
     "tslib": "^1.10.0",
     "tslib": "^1.10.0",
     "zone.js": "^0.11.3"
     "zone.js": "^0.11.3"
   },
   },

+ 1 - 1
angular-client/src/app/components/auth/gain/gain-form/gain-form.component.html

@@ -4,7 +4,7 @@
           <form [formGroup]="formGroup" (ngSubmit)="sendCodeGain()">
           <form [formGroup]="formGroup" (ngSubmit)="sendCodeGain()">
             <!-- <mat-progress-bar class="row " *ngIf="loading" mode="indeterminate"></mat-progress-bar> -->
             <!-- <mat-progress-bar class="row " *ngIf="loading" mode="indeterminate"></mat-progress-bar> -->
             <h1 class="row justify-content-center font-weight-bold">Tentez votre chance, et repartez peut-etre avec votre Range Rover</h1>
             <h1 class="row justify-content-center font-weight-bold">Tentez votre chance, et repartez peut-etre avec votre Range Rover</h1>
-            <h3 class="row justify-content-center">Entrez votre code</h3>
+            <h2 class="row justify-content-center">Entrez votre code</h2>
   
   
   
   
             <div class="row justify-content-center">
             <div class="row justify-content-center">

+ 2 - 2
angular-client/src/app/components/auth/gain/gain-list/gain-list.component.html

@@ -24,9 +24,9 @@
 
 
       <!-- isServed -->
       <!-- isServed -->
       <ng-container matColumnDef="isServed">
       <ng-container matColumnDef="isServed">
-        <th mat-header-cell *matHeaderCellDef> Servé </th>
+        <th mat-header-cell *matHeaderCellDef> Servi </th>
         <td mat-cell *matCellDef="let element"  class="text-left">
         <td mat-cell *matCellDef="let element"  class="text-left">
-            <mat-icon *ngIf="element.isServed === true" class="icon mr-2" style="color:#4FC031">done_outline</mat-icon>
+            <mat-icon *ngIf="element.isServed === true" class="icon mr-2" style="color:#296119">done_outline</mat-icon>
             <mat-icon *ngIf="element.isServed === false" class="icon mr-2" style="color:rgb(67, 151, 230)">hourglass_bottom</mat-icon>
             <mat-icon *ngIf="element.isServed === false" class="icon mr-2" style="color:rgb(67, 151, 230)">hourglass_bottom</mat-icon>
            </td>
            </td>
       </ng-container>
       </ng-container>

+ 11 - 10
angular-client/src/app/components/home/home.component.html

@@ -1,22 +1,23 @@
 <div class="container navtop">
 <div class="container navtop">
+        
+         <h1 class="text-center  gain mb-4">jeu-concours</h1>
 
 
     <div class="range">
     <div class="range">
-        <h4 class="text-center concours font-weight-bold">Du 16 juillet 2020 au 16 septembre 2020</h4>
+        <h2 class="text-center  gain mb-4">Tentez de gagner un Range Rover</h2>
+        <h3 class="text-center concours font-weight-bold">Du 16 juillet 2020 au 16 septembre 2020</h3>
         <h4 class="text-center concours">Pour tout achat d'une valeur de 18€ ou plus dans l'un de nos restaurants reçoit un code
         <h4 class="text-center concours">Pour tout achat d'une valeur de 18€ ou plus dans l'un de nos restaurants reçoit un code
             Promo</h4>
             Promo</h4>
 
 
-        <h1 class="text-center  gain mb-4">Tentez de gagner un Range Rover</h1>
 
 
         <div class="row">
         <div class="row">
             <div class="col-12 col-md-6 order-2 order-md-1">
             <div class="col-12 col-md-6 order-2 order-md-1">
-                <h4 class="col-12 col-md-9">A l'occasion de l'ouverture de notre 100e restaurants Fatboar, Tentez de repartir avec
-                    un Range Rover d'une valeur de 59900€ en participant à notre Grand jeu-concours FatBoar.</h4>
+                <h4 class="col-12 col-md-9">A l'occasion de l'ouverture de notre 100e restaurants Fatboar, Tentez de repartir avec un Range Rover d'une valeur de 59900€ en participant à notre Grand jeu-concours FatBoar.</h4>
                 <h4 class="col-12 col-md-9">Il vous suffi d'une seule participation à notre jeu concours pour avoir une chance d'être tiré au sort et gagner votre Range Rover !</h4>
                 <h4 class="col-12 col-md-9">Il vous suffi d'une seule participation à notre jeu concours pour avoir une chance d'être tiré au sort et gagner votre Range Rover !</h4>
                 <h4 class="col-12 col-md-9">A noter que chacunes de vos participations vous offrons  une récompences !</h4>
                 <h4 class="col-12 col-md-9">A noter que chacunes de vos participations vous offrons  une récompences !</h4>
             </div>
             </div>
 
 
             <div class="col-12 col-md-6 order-1 order-md-2">
             <div class="col-12 col-md-6 order-1 order-md-2">
-                <img class="rangeRover"  [src]="getImgRange()" width="80%">
+                <img class="rangeRover"  [src]="getImgRange()" alt="Image of rangeRover" width="80%">
             </div>
             </div>
 
 
         </div>
         </div>
@@ -34,18 +35,18 @@
 
 
         <div class="row mt-5">
         <div class="row mt-5">
             <div class="col-4">
             <div class="col-4">
-                <img [src]="getDessert()"  width="100%" >
+                <img [src]="getDessert()" alt="A description of dessert au choix"  width="100%" >
                 <h2 class="text-center font-weight-bold dessert">Un dessert au choix</h2>
                 <h2 class="text-center font-weight-bold dessert">Un dessert au choix</h2>
                
                
             </div>
             </div>
             <div class="col-4">
             <div class="col-4">
                
                
-                <img [src]="getBurger()" width="90%">
+                <img [src]="getBurger()" alt="A description burger au choix"  width="90%">
                 <h2 class="text-center font-weight-bold">Un burger au choix</h2>
                 <h2 class="text-center font-weight-bold">Un burger au choix</h2>
             </div>
             </div>
             <div class="col-4">
             <div class="col-4">
                 
                 
-                <img [src]="getMenuJour()" width="60%">
+                <img [src]="getMenuJour()" alt="A description of menu du jour"  width="60%">
                 <h2 class="text-center font-weight-bold">Un menu du jour</h2>
                 <h2 class="text-center font-weight-bold">Un menu du jour</h2>
             </div>
             </div>
         </div>
         </div>
@@ -53,12 +54,12 @@
         <div class="row justify-content-center">
         <div class="row justify-content-center">
             <div class="col-4">
             <div class="col-4">
                 
                 
-                <img [src]="getMenuChoix()" width="90%">
+                <img [src]="getMenuChoix()" alt="A description of menu au choix"  width="90%">
                 <h2 class="text-center font-weight-bold">Un menu au choix</h2>
                 <h2 class="text-center font-weight-bold">Un menu au choix</h2>
             </div>
             </div>
             <div class="col-4">
             <div class="col-4">
                
                
-                <img [src]="getReduction()" width="90%">
+                <img [src]="getReduction()" alt="A description of 70% de réduction"  width="90%">
                 <h2 class="text-center font-weight-bold">70% de réduction</h2>
                 <h2 class="text-center font-weight-bold">70% de réduction</h2>
             </div>
             </div>
         </div>
         </div>

+ 8 - 4
angular-client/src/app/components/login/login.component.html

@@ -13,7 +13,7 @@
           <h1 class="row justify-content-center"><b>Connexion</b></h1>
           <h1 class="row justify-content-center"><b>Connexion</b></h1>
 
 
           <div class="row justify-content-center mb-3">
           <div class="row justify-content-center mb-3">
-            <button mat-raised-button class="col-10 col-md-8 googlelogin" style="background-color: #DB4437; color: white;">
+            <button mat-raised-button class="col-10 col-md-8 googlelogin" style="background-color: #AD0505; color: white;">
               <div class="row mt-1 ml-3">
               <div class="row mt-1 ml-3">
                 <mat-icon class="ml-2" svgIcon="googleLogo"></mat-icon>
                 <mat-icon class="ml-2" svgIcon="googleLogo"></mat-icon>
                 <p class="ml-2 marginButton">Se connecter avec Google</p>
                 <p class="ml-2 marginButton">Se connecter avec Google</p>
@@ -22,7 +22,7 @@
           </div>
           </div>
 
 
           <div class="row justify-content-center ">
           <div class="row justify-content-center ">
-            <button mat-raised-button class="col-10 col-md-8 facebooklogin" style="background-color: #3b5998; color: white;">
+            <button mat-raised-button class="col-10 col-md-8 facebooklogin" style="background-color: #2121A1; color: white;">
               <div class="row mt-1 ml-3">
               <div class="row mt-1 ml-3">
                 <mat-icon class="ml-2" svgIcon="facebookLogo"></mat-icon>
                 <mat-icon class="ml-2" svgIcon="facebookLogo"></mat-icon>
                 <p class="ml-2 marginButton">Se connecter avec Facebook</p>
                 <p class="ml-2 marginButton">Se connecter avec Facebook</p>
@@ -67,8 +67,12 @@
           <div class="row justify-content-center mt-3">
           <div class="row justify-content-center mt-3">
             <button class="col-6 color-theme" mat-raised-button color="primary" type="submit">Se connecter</button>
             <button class="col-6 color-theme" mat-raised-button color="primary" type="submit">Se connecter</button>
           </div>
           </div>
-          <p class="row justify-content-center mt-3"> <a routerLink="/login/lost-password">Mot de passe oublié ?</a></p>
-          <p class="row justify-content-center">Vous n'avez pas encore de compte?<a class="ml-1" routerLink="/register"> Créer un compte</a></p>
+          <p class="row justify-content-center mt-3"> <a _ngcontent-yhd-c250="" routerlink="/login/lost-password" ng-reflect-router-link="/login/lost-password" href="/login/lost-password" style="color: rgb(0, 81, 168); background-color: rgb(255, 255, 255);">
+            Mot de passe oublié ?
+            </a></p>
+          <p class="row justify-content-center">Vous n'avez pas encore de compte?<a _ngcontent-yhd-c250="" routerlink="/register" class="ml-1" ng-reflect-router-link="/register" href="/register" style="color: rgb(0, 81, 168); background-color: rgb(255, 255, 255);">
+Créer un compte
+</a></p>
         </form>
         </form>
       </mat-card-content>
       </mat-card-content>
     </mat-card>
     </mat-card>

+ 17 - 13
angular-client/src/app/components/register/register.component.html

@@ -6,18 +6,17 @@
         <mat-card-content>
         <mat-card-content>
           <form [formGroup]="formGroup" (ngSubmit)="signUp()">
           <form [formGroup]="formGroup" (ngSubmit)="signUp()">
             <mat-progress-bar class="row " *ngIf="loading" mode="indeterminate"></mat-progress-bar>
             <mat-progress-bar class="row " *ngIf="loading" mode="indeterminate"></mat-progress-bar>
+            <h1 class="row justify-content-center"><b>Inscription</b></h1>
+
             <div class="row justify-content-center ">
             <div class="row justify-content-center ">
-              <button (click)="signGoogle()" mat-raised-button class="col-10 col-lg-5 mr-lg-2 mb-2 googlelogin" style="background-color: #DB4437; color: white;">
+              <button (click)="signWithGoogle()" mat-raised-button class="col-10 col-lg-5 mr-lg-2 mb-2 googlelogin" style="background-color: #AD0505; color: white;">
                 <div class="row mt-1 ml-3">
                 <div class="row mt-1 ml-3">
                   <mat-icon class="ml-2" svgIcon="googleLogo"></mat-icon>
                   <mat-icon class="ml-2" svgIcon="googleLogo"></mat-icon>
                   <p class="ml-2 marginButton">Se connecter avec Google</p>
                   <p class="ml-2 marginButton">Se connecter avec Google</p>
                 </div>
                 </div>
               </button>
               </button>
-            <h1 class="row justify-content-center"><b>Inscription</b></h1>
-  
-           
             
             
-              <button mat-raised-button class="col-10 col-lg-5 ml-lg-2 mb-2 facebooklogin" style="background-color: #3b5998; color: white;">
+              <button mat-raised-button class="col-10 col-lg-5 ml-lg-2 mb-2 facebooklogin" style="background-color: #2121A1; color: white;">
                 <div class="row mt-1 ml-3">
                 <div class="row mt-1 ml-3">
                   <mat-icon class="ml-2" svgIcon="facebookLogo"></mat-icon>
                   <mat-icon class="ml-2" svgIcon="facebookLogo"></mat-icon>
                   <p class="ml-2 marginButton">Se connecter avec Facebook</p>
                   <p class="ml-2 marginButton">Se connecter avec Facebook</p>
@@ -110,15 +109,20 @@
               </mat-form-field>
               </mat-form-field>
             </div>
             </div>
             <div class="row justify-content-center">
             <div class="row justify-content-center">
-              <div class="control" controlErrorContainer>
-                <label class="checkbox">
-                <input type="checkbox" formControlName="terms" [customErrors]="customErrors">
-                <p class="row justify-content-center mt-3"> J'ai lu et j'accepte <a href="#"> les conditions générales d'utilisation </a> et j'ai pris connaissance de la <a href="#"> politique de confidentialité.</a></p>
+              
+                <span class="stay-signed in checkbox-container">
+                  <label class="terms">
+                    <input type="checkbox" formControlName="terms" [customErrors]="customErrors">
+                    J'ai lu et j'accepte <a href="#"> les conditions générales d'utilisation </a> et j'ai pris connaissance de la <a href="#"> politique de confidentialité.</a>
+                  </label>
+                
+                <label class="terms">
+                  <mat-error *ngIf="!formGroup.controls['terms'].valid || formGroup.controls['terms'].touched">
+                    {{ getErrorTerms() }}
+                  </mat-error>
                 </label>
                 </label>
-                <mat-error *ngIf="!formGroup.controls['terms'].valid || formGroup.controls['terms'].touched">
-                  {{ getErrorTerms() }}
-                </mat-error>
-              </div>
+              </span>
+
             </div>
             </div>
 
 
 
 

+ 10 - 4
angular-client/src/app/components/register/register.component.scss

@@ -8,10 +8,16 @@
   }
   }
   
   
 .terms{  
 .terms{  
-  display: block;
-  margin-left: 3.5rem;
+  display: inline-block;
+  margin-inline: 4.5rem;
+  margin-top: 0.5rem;
   }
   }
 
 
   .test{ 
   .test{ 
-  font-size: x-small;
-}
+    display: block;
+    margin-left: 3.5rem;
+}
+.checkbox{  
+  display: block;
+  margin-right: 3.5rem;
+  }

+ 15 - 6
angular-client/src/app/components/register/register.component.ts

@@ -18,6 +18,7 @@ const facebookLogoURL = "../assets/img/social/facebook.svg";
   styleUrls: ['./register.component.scss']
   styleUrls: ['./register.component.scss']
 })
 })
 export class RegisterComponent implements OnInit {
 export class RegisterComponent implements OnInit {
+  http: any;
 
 
   constructor(public router: Router, private authService : AuthService, private formBuilder: FormBuilder, private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer) 
   constructor(public router: Router, private authService : AuthService, private formBuilder: FormBuilder, private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer) 
    { this.matIconRegistry.addSvgIcon("googleLogo", this.domSanitizer.bypassSecurityTrustResourceUrl(googleLogoURL)),
    { this.matIconRegistry.addSvgIcon("googleLogo", this.domSanitizer.bypassSecurityTrustResourceUrl(googleLogoURL)),
@@ -52,7 +53,7 @@ export class RegisterComponent implements OnInit {
       firstname: [null, [Validators.required, Validators.pattern(caracereregex)]],
       firstname: [null, [Validators.required, Validators.pattern(caracereregex)]],
       phonenumber: [null,[Validators.required, Validators.pattern(phonenumberregex)]],
       phonenumber: [null,[Validators.required, Validators.pattern(phonenumberregex)]],
       birthday: [null,[Validators.required]],
       birthday: [null,[Validators.required]],
-      terms: ['', Validators.requiredTrue],
+      terms: [false, Validators.requiredTrue],
       adress: [null,[Validators.required, Validators.pattern(adressregex)]],
       adress: [null,[Validators.required, Validators.pattern(adressregex)]],
       email: [null, [Validators.required, Validators.pattern(emailregex)]],
       email: [null, [Validators.required, Validators.pattern(emailregex)]],
       password: [null, [Validators.required, this.checkPassword]],
       password: [null, [Validators.required, this.checkPassword]],
@@ -99,7 +100,7 @@ export class RegisterComponent implements OnInit {
   getErrorTerms(){
   getErrorTerms(){
 
 
     return this.formGroup.get('terms').hasError('required') ? 'Please accept the terms' : 
     return this.formGroup.get('terms').hasError('required') ? 'Please accept the terms' : 
-    this.formGroup.get('terms').hasError('pattern') ? 'Date de naissance non valide' : '';
+    this.formGroup.get('terms').hasError('pattern') ? 'terms not accepted' : '';
 
 
   }
   }
 
 
@@ -139,8 +140,16 @@ export class RegisterComponent implements OnInit {
   //   });
   //   });
   // }
   // }
    //google signIn
    //google signIn
-   signGoogle(){
-    window.location.href =`http://localhost:4000/api/auth/google`
+   
+   signWithGoogle() {
+
+    this.authService.signWithGoogle().subscribe((res) => {
+      console.log(res);
+    });
+        
+
+  }
+    //window.location.href =`http://localhost:4000/api/auth/google`
     // this.authService.signGoogle().subscribe(
     // this.authService.signGoogle().subscribe(
     //   data=> {
     //   data=> {
     //       console.log(data); 
     //       console.log(data); 
@@ -149,10 +158,10 @@ export class RegisterComponent implements OnInit {
     //   error=> {
     //   error=> {
     //       console.log(error);
     //       console.log(error);
     // });
     // });
-  }
+  
 
 
 
 
-   signUp(){
+   signUp(): void{
 
 
     this.submitted = true;
     this.submitted = true;
     if (this.formGroup.invalid) {
     if (this.formGroup.invalid) {

+ 26 - 18
angular-client/src/app/components/shared/contact/information/information.component.html

@@ -1,25 +1,33 @@
-
-    
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>FatBoar - Page de contact où un client peut venir faire une réclamation ou bien si il a besoins d'informations par rapport au jeu concours</title>
+    <!-- autres balises meta ici -->
+  </head>
+  <body>
     <h1 class="text-center">FatBoar</h1>
     <h1 class="text-center">FatBoar</h1>
+  </body>  
 
 
-     <div class="info">
-    <a  mat-list-item >
-        <mat-icon class="icon mr-2">room</mat-icon>
-        <span class="label ">1 Bis Rue Gustave Eiffel, 78280 Guyancourt</span>
-      </a>
+    <div class="info">
+   <a  mat-list-item >
+       <mat-icon class="icon mr-2">room</mat-icon>
+       <span class="label ">1 Bis Rue Gustave Eiffel, 78280 Guyancourt</span>
+     </a>
 
 
-      <a  mat-list-item type="button">
-        <mat-icon class="mr-2">phone_enabled</mat-icon>
-        <label class="">01 74 56 64 31</label>
-      </a>
+     <a  mat-list-item type="button">
+       <mat-icon class="mr-2">phone_enabled</mat-icon>
+       <label class="">01 74 56 64 31</label>
+     </a>
 
 
-      <a  mat-list-item >
-        <mat-icon class="icon mr-2">email</mat-icon>
-        <span class="label "></span>  <label class="">contact@fatboar.fr</label>
-      </a>
+     <a  mat-list-item >
+       <mat-icon class="icon mr-2">email</mat-icon>
+       <span class="label "></span>  <label class="">contact@fatboar.fr</label>
+     </a>
 
 
     </div>
     </div>
+    
+   </html>
 
 
-
-     
-  
+    
+ 

+ 18 - 18
angular-client/src/app/components/shared/footer/footer.component.html

@@ -9,20 +9,20 @@
           
           
           <div class="col-12 mb-2 ">
           <div class="col-12 mb-2 ">
             <a routerLink="/" routerLinkActive="active" class="row justify-content-center" >
             <a routerLink="/" routerLinkActive="active" class="row justify-content-center" >
-              <img  width="80" height="80" src="assets/img/logo-fatboar.png">
+              <img  width="80" height="80" src="assets/img/logo-fatboar.png" alt="An image of logo-fatboar">
             </a>
             </a>
           </div>
           </div>
 
 
           <div class="col-12 mt-2 ">
           <div class="col-12 mt-2 ">
             <div class="row justify-content-center">
             <div class="row justify-content-center">
             <a href="" class="mr-2">
             <a href="" class="mr-2">
-              <img width="30" height="30" src="assets/img/social/twitter.svg"  />
+              <img width="30" height="30" src="assets/img/social/twitter.svg" alt="Twitter logo linking to the Fatboar twitter page"  />
             </a>
             </a>
             <a href="" class="mr-2 ">
             <a href="" class="mr-2 ">
-              <img  width="30" height="30" src="assets/img/social/facebook.svg" />
+              <img  width="30" height="30" src="assets/img/social/facebook.svg" alt="Facebook logo linking to the Fatboar facebook page" />
             </a>
             </a>
             <a href="" class="">
             <a href="" class="">
-              <img  width="30" height="30" src="assets/img/social/instagram.svg" />
+              <img  width="30" height="30" src="assets/img/social/instagram.svg" alt="Instagram logo linking to the FatBoar instagram page" />
             </a>
             </a>
           </div>
           </div>
           </div>
           </div>
@@ -33,15 +33,15 @@
        <!-- 2222222222 -->
        <!-- 2222222222 -->
       <div class="col-md-3  col-12">
       <div class="col-md-3  col-12">
         <div class="row ">
         <div class="row ">
-          <h2 class="col-md-12 text-md-left text-center">Informations utiles</h2>
-          <a class="col-md-12 text-md-left text-center" href="#ccm">
-            <h5 class="col-md-12 text-md-left text-center" style="color: white !important">Comment ça marche ?</h5>
+          <h3 class="col-md-12 text-md-left text-center">Informations utiles</h3>
+          <a class="col-md-12 text-md-left text-center" href="">
+            <h4 class="col-md-12 text-md-left text-center" style="color: white !important">Comment ça marche ?</h4>
           </a>
           </a>
           <a class="col-md-12 text-md-left text-center" href="">
           <a class="col-md-12 text-md-left text-center" href="">
-            <h5 class="col-md-12 text-md-left text-center" style="color: white !important">Qui sommes-nous ?</h5>
+            <h4 class="col-md-12 text-md-left text-center" style="color: white !important">Qui sommes-nous ?</h4>
           </a>
           </a>
           <a class="col-md-12 text-md-left text-center" href="">
           <a class="col-md-12 text-md-left text-center" href="">
-            <h5 class="col-md-12 text-md-left text-center" style="color: white !important">FatBoar pour ses clients</h5>
+            <h4 class="col-md-12 text-md-left text-center" style="color: white !important">FatBoar pour ses clients</h4>
           </a>
           </a>
         </div>
         </div>
       </div>
       </div>
@@ -49,15 +49,15 @@
       <!-- 3333333333333 -->
       <!-- 3333333333333 -->
       <div class="col-md-3 col-12">
       <div class="col-md-3 col-12">
         <div class="row">
         <div class="row">
-          <h2 class="col-md-12 text-md-left text-center">Informations légales</h2>
+          <h3 class="col-md-12 text-md-left text-center">Informations légales</h3>
           <a routerLink="cgu" class="col-md-12">
           <a routerLink="cgu" class="col-md-12">
-            <h5 class="col-md-12 text-md-left text-center">Conditions générales d'utilisation</h5>
+            <h4 class="col-md-12 text-md-left text-center">Conditions générales d'utilisation</h4>
           </a>
           </a>
           <a routerLink="mention-legales" class="col-md-12">
           <a routerLink="mention-legales" class="col-md-12">
-            <h5 class="col-md-12 text-md-left text-center">Mention légales</h5>
+            <h4 class="col-md-12 text-md-left text-center">Mention légales</h4>
           </a>
           </a>
           <a routerLink="politique-de-confidentialite" class="col-md-12">
           <a routerLink="politique-de-confidentialite" class="col-md-12">
-            <h5 class="col-md-12 text-md-left text-center" >Politique de confidentialité</h5>
+            <h4 class="col-md-12 text-md-left text-center" >Politique de confidentialité</h4>
           </a>
           </a>
         </div>
         </div>
       </div>
       </div>
@@ -65,12 +65,12 @@
       <!-- 444444444444 -->
       <!-- 444444444444 -->
       <div class="col-md-3 col-12 mb-3">
       <div class="col-md-3 col-12 mb-3">
         <div class="row">
         <div class="row">
-          <h2 class="col-md-12 text-md-left text-center">Nous contacter</h2>
-          <h5 class="col-md-12 text-md-left text-center">Service client : <b>01 74 56 64 31</b></h5>
-          <h5 class="col-md-12 text-md-left text-center">De 9h à 12h et de 13h à 19h</h5>
-          <h5 class="col-md-12 text-md-left text-center">du lundi au vendredi</h5>
+          <h3 class="col-md-12 text-md-left text-center">Nous contacter</h3>
+          <h4 class="col-md-12 text-md-left text-center">Service client : <b>01 74 56 64 31</b></h4>
+          <h4 class="col-md-12 text-md-left text-center">De 9h à 12h et de 13h à 19h</h4>
+          <h4 class="col-md-12 text-md-left text-center">du lundi au vendredi</h4>
           <a href="mailto:" class="col-md-12 text-md-left text-center">
           <a href="mailto:" class="col-md-12 text-md-left text-center">
-            <h5 class="col-md-12 text-md-left text-center"><b>Envoyer un mail</b></h5>
+            <h4 class="col-md-12 text-md-left text-center"><b>Envoyer un mail</b></h4>
           </a>
           </a>
 
 
         </div>
         </div>

+ 1 - 0
angular-client/src/app/models/userResponse.ts

@@ -14,6 +14,7 @@ export interface User {
     lastname: string;
     lastname: string;
     email: string;
     email: string;
     role: string;
     role: string;
+    googleId: string;
     birthday: Date;
     birthday: Date;
     phonenumber: number;
     phonenumber: number;
     adress: string;
     adress: string;

+ 17 - 2
angular-client/src/app/services/auth.service.ts

@@ -7,10 +7,11 @@ import { BehaviorSubject, Observable } from 'rxjs';
 import { Router } from '@angular/router';
 import { Router } from '@angular/router';
 import { MatSnackBar } from '@angular/material/snack-bar';
 import { MatSnackBar } from '@angular/material/snack-bar';
 import { AlertMessageComponent } from 'src/app/components/shared/alert-message/alert-message.component'
 import { AlertMessageComponent } from 'src/app/components/shared/alert-message/alert-message.component'
-import { map } from 'rxjs/operators';
+import { map, tap } from 'rxjs/operators';
 import * as jwt_decode from 'jwt-decode';
 import * as jwt_decode from 'jwt-decode';
 
 
 
 
+
 @Injectable({
 @Injectable({
   providedIn: 'root'
   providedIn: 'root'
 })
 })
@@ -19,6 +20,8 @@ export class AuthService {
   //url api
   //url api
   private apiUrl = environment.apiUrl
   private apiUrl = environment.apiUrl
 
 
+  
+
 
 
   private tokenSubject: BehaviorSubject<Token>;
   private tokenSubject: BehaviorSubject<Token>;
   public token: Observable<Token>;
   public token: Observable<Token>;
@@ -66,6 +69,18 @@ export class AuthService {
         return token;
         return token;
       }));
       }));
   }
   }
+
+  signWithGoogle(): Observable<any> {
+    
+    return this.http.get(`${this.apiUrl}/api/auth/google`).pipe(tap(data => {
+      debugger;
+          // store jwt token in local storage 
+          localStorage.setItem('jwt', data.token);
+          
+          
+        }));
+  }
+  
    // login google
    // login google
     // signGoogle(): Observable<User> {
     // signGoogle(): Observable<User> {
     //   //debugger;
     //   //debugger;
@@ -140,7 +155,7 @@ resetPassword(data): Observable<any> {
 
 
   // get info user 
   // get info user 
   getUserInfo(): Observable<User> {
   getUserInfo(): Observable<User> {
-    
+    debugger;
     let decodedToken : payloadToken = jwt_decode(this.tokenSubject.value.token); 
     let decodedToken : payloadToken = jwt_decode(this.tokenSubject.value.token); 
     return this.http.get<User>(`${this.apiUrl}/api/users/${decodedToken.userId}`)
     return this.http.get<User>(`${this.apiUrl}/api/users/${decodedToken.userId}`)
       .pipe(map(user => {
       .pipe(map(user => {

+ 1 - 1
angular-client/src/app/services/users.service.ts

@@ -28,7 +28,7 @@ getUsers(page: number, limit:number, lastname:string, firstname:string, email:st
 
 
 // get user
 // get user
 getOneUser(id: string): Observable <User> {
 getOneUser(id: string): Observable <User> {
-  return this.http.get<User>(`${this.apiUrl}/${id}`);
+  return this.http.get<User>(`${this.apiUrl}/api/${id}`);
 }
 }
 
 
 
 

+ 26 - 20
express-server/index.js

@@ -3,7 +3,7 @@ const bodyparser = require('body-parser');
 const passport = require('passport');
 const passport = require('passport');
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
 const session = require('express-session');
 const session = require('express-session');
-//const cors = require('cors');
+const cors = require('cors');
 // const config = require('./config/db.config');
 // const config = require('./config/db.config');
 
 
 
 
@@ -30,6 +30,16 @@ const metricsMiddleware = promBundle({includeMethod: true, includePath: true});
 
 
 const app = express();
 const app = express();
 
 
+app.use(cors({
+  origin: 'http://localhost:4200',
+  methods: ['GET', 'POST'],
+  allowedHeaders: ['Content-Type', 'Authorization']
+}));
+
+
+
+
+
 Logger.error('hello world', 'Nan c est juste pour tester les logs')
 Logger.error('hello world', 'Nan c est juste pour tester les logs')
 
 
 app.use(metricsMiddleware);
 app.use(metricsMiddleware);
@@ -44,27 +54,23 @@ app.get("/api", (req, res) => {
     res.status(200).send("Api Works.");
     res.status(200).send("Api Works.");
   });
   });
 
 
-  // var corsOptions = {
-  //   origin: 'https://localhost:4200',
-  //   optionsSuccessStatus: 200 
-  // }
-
+  
 //Définition des CORS Middleware 
 //Définition des CORS Middleware 
-app.use(function(req, res, next) {
+// app.use(function(req, res, next) {
   
   
-    //res.header("Access-Control-Allow-Origin", "*");
-    res.setHeader("Access-Control-Allow-Origin", "*");
-    res.setHeader(
-      "Access-Control-Allow-Headers",
-      "X-Requested-With,content-type, Accept,Authorization,Origin"
-    );
-    res.setHeader(
-      "Access-Control-Allow-Methods",
-      "GET, POST, OPTIONS, PUT, PATCH, DELETE"
-    );
-    res.setHeader("Access-Control-Allow-Credentials", true);
-    next();
-  });
+//     //res.header("Access-Control-Allow-Origin", "*");
+//     res.setHeader("Access-Control-Allow-Origin", "*");
+//     res.setHeader(
+//       "Access-Control-Allow-Headers",
+//       "X-Requested-With,content-type, Accept,Authorization,Origin"
+//     );
+//     res.setHeader(
+//       "Access-Control-Allow-Methods",
+//       "GET, POST, OPTIONS, PUT, PATCH, DELETE"
+//     );
+//     res.setHeader("Access-Control-Allow-Credentials", true);
+//     next();
+//   });
 
 
 
 
 // parse requests  body params
 // parse requests  body params

+ 6 - 0
express-server/node_modules/body-parser/HISTORY.md

@@ -1,3 +1,9 @@
+1.20.1 / 2022-10-06
+===================
+
+  * deps: qs@6.11.0
+  * perf: remove unnecessary object clone
+
 1.20.0 / 2022-04-02
 1.20.0 / 2022-04-02
 ===================
 ===================
 
 

+ 1 - 1
express-server/node_modules/body-parser/README.md

@@ -346,7 +346,7 @@ call `req.setEncoding` when using this module. The `status` property is set to
 
 
 This error will occur when the request is no longer readable when this middleware
 This error will occur when the request is no longer readable when this middleware
 attempts to read it. This typically means something other than a middleware from
 attempts to read it. This typically means something other than a middleware from
-this module read the reqest body already and the middleware was also configured to
+this module read the request body already and the middleware was also configured to
 read the same request. The `status` property is set to `500` and the `type`
 read the same request. The `status` property is set to `500` and the `type`
 property is set to `'stream.not.readable'`.
 property is set to `'stream.not.readable'`.
 
 

+ 8 - 9
express-server/node_modules/body-parser/index.js

@@ -91,16 +91,15 @@ Object.defineProperty(exports, 'urlencoded', {
  */
  */
 
 
 function bodyParser (options) {
 function bodyParser (options) {
-  var opts = {}
-
-  // exclude type option
-  if (options) {
-    for (var prop in options) {
-      if (prop !== 'type') {
-        opts[prop] = options[prop]
-      }
+  // use default type for parsers
+  var opts = Object.create(options || null, {
+    type: {
+      configurable: true,
+      enumerable: true,
+      value: undefined,
+      writable: true
     }
     }
-  }
+  })
 
 
   var _urlencoded = exports.urlencoded(opts)
   var _urlencoded = exports.urlencoded(opts)
   var _json = exports.json(opts)
   var _json = exports.json(opts)

+ 17 - 15
express-server/node_modules/body-parser/package.json

@@ -1,10 +1,12 @@
 {
 {
   "_from": "body-parser@^1.19.0",
   "_from": "body-parser@^1.19.0",
-  "_id": "body-parser@1.20.0",
+  "_id": "body-parser@1.20.1",
   "_inBundle": false,
   "_inBundle": false,
-  "_integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+  "_integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
   "_location": "/body-parser",
   "_location": "/body-parser",
-  "_phantomChildren": {},
+  "_phantomChildren": {
+    "side-channel": "1.0.4"
+  },
   "_requested": {
   "_requested": {
     "type": "range",
     "type": "range",
     "registry": true,
     "registry": true,
@@ -16,11 +18,11 @@
     "fetchSpec": "^1.19.0"
     "fetchSpec": "^1.19.0"
   },
   },
   "_requiredBy": [
   "_requiredBy": [
-    "/",
-    "/express"
+    "#USER",
+    "/"
   ],
   ],
-  "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
-  "_shasum": "3de69bd89011c11573d7bfee6a64f11b6bd27cc5",
+  "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+  "_shasum": "b1812a8912c195cd371a3ee5e66faa2338a5c668",
   "_spec": "body-parser@^1.19.0",
   "_spec": "body-parser@^1.19.0",
   "_where": "C:\\FatboarProject\\express-server",
   "_where": "C:\\FatboarProject\\express-server",
   "bugs": {
   "bugs": {
@@ -47,7 +49,7 @@
     "http-errors": "2.0.0",
     "http-errors": "2.0.0",
     "iconv-lite": "0.4.24",
     "iconv-lite": "0.4.24",
     "on-finished": "2.4.1",
     "on-finished": "2.4.1",
-    "qs": "6.10.3",
+    "qs": "6.11.0",
     "raw-body": "2.5.1",
     "raw-body": "2.5.1",
     "type-is": "~1.6.18",
     "type-is": "~1.6.18",
     "unpipe": "1.0.0"
     "unpipe": "1.0.0"
@@ -55,18 +57,18 @@
   "deprecated": false,
   "deprecated": false,
   "description": "Node.js body parsing middleware",
   "description": "Node.js body parsing middleware",
   "devDependencies": {
   "devDependencies": {
-    "eslint": "7.32.0",
+    "eslint": "8.24.0",
     "eslint-config-standard": "14.1.1",
     "eslint-config-standard": "14.1.1",
-    "eslint-plugin-import": "2.25.4",
-    "eslint-plugin-markdown": "2.2.1",
+    "eslint-plugin-import": "2.26.0",
+    "eslint-plugin-markdown": "3.0.0",
     "eslint-plugin-node": "11.1.0",
     "eslint-plugin-node": "11.1.0",
-    "eslint-plugin-promise": "5.2.0",
+    "eslint-plugin-promise": "6.0.1",
     "eslint-plugin-standard": "4.1.0",
     "eslint-plugin-standard": "4.1.0",
     "methods": "1.1.2",
     "methods": "1.1.2",
-    "mocha": "9.2.2",
+    "mocha": "10.0.0",
     "nyc": "15.1.0",
     "nyc": "15.1.0",
     "safe-buffer": "5.2.1",
     "safe-buffer": "5.2.1",
-    "supertest": "6.2.2"
+    "supertest": "6.3.0"
   },
   },
   "engines": {
   "engines": {
     "node": ">= 0.8",
     "node": ">= 0.8",
@@ -92,5 +94,5 @@
     "test-ci": "nyc --reporter=lcov --reporter=text npm test",
     "test-ci": "nyc --reporter=lcov --reporter=text npm test",
     "test-cov": "nyc --reporter=html --reporter=text npm test"
     "test-cov": "nyc --reporter=html --reporter=text npm test"
   },
   },
-  "version": "1.20.0"
+  "version": "1.20.1"
 }
 }

+ 35 - 4
express-server/package-lock.json

@@ -320,9 +320,9 @@
       "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw=="
       "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw=="
     },
     },
     "body-parser": {
     "body-parser": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
-      "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+      "version": "1.20.1",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+      "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
       "requires": {
       "requires": {
         "bytes": "3.1.2",
         "bytes": "3.1.2",
         "content-type": "~1.0.4",
         "content-type": "~1.0.4",
@@ -332,10 +332,20 @@
         "http-errors": "2.0.0",
         "http-errors": "2.0.0",
         "iconv-lite": "0.4.24",
         "iconv-lite": "0.4.24",
         "on-finished": "2.4.1",
         "on-finished": "2.4.1",
-        "qs": "6.10.3",
+        "qs": "6.11.0",
         "raw-body": "2.5.1",
         "raw-body": "2.5.1",
         "type-is": "~1.6.18",
         "type-is": "~1.6.18",
         "unpipe": "1.0.0"
         "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "qs": {
+          "version": "6.11.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+          "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+          "requires": {
+            "side-channel": "^1.0.4"
+          }
+        }
       }
       }
     },
     },
     "brace-expansion": {
     "brace-expansion": {
@@ -660,6 +670,27 @@
         "type-is": "~1.6.18",
         "type-is": "~1.6.18",
         "utils-merge": "1.0.1",
         "utils-merge": "1.0.1",
         "vary": "~1.1.2"
         "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "body-parser": {
+          "version": "1.20.0",
+          "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+          "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+          "requires": {
+            "bytes": "3.1.2",
+            "content-type": "~1.0.4",
+            "debug": "2.6.9",
+            "depd": "2.0.0",
+            "destroy": "1.2.0",
+            "http-errors": "2.0.0",
+            "iconv-lite": "0.4.24",
+            "on-finished": "2.4.1",
+            "qs": "6.10.3",
+            "raw-body": "2.5.1",
+            "type-is": "~1.6.18",
+            "unpipe": "1.0.0"
+          }
+        }
       }
       }
     },
     },
     "express-list-endpoints": {
     "express-list-endpoints": {

+ 1 - 1
express-server/package.json

@@ -16,7 +16,7 @@
   "dependencies": {
   "dependencies": {
     "api-express-exporter": "^1.0.0",
     "api-express-exporter": "^1.0.0",
     "bcrypt": "^5.0.1",
     "bcrypt": "^5.0.1",
-    "body-parser": "^1.19.0",
+    "body-parser": "^1.20.1",
     "cors": "^2.8.5",
     "cors": "^2.8.5",
     "dayjs": "^1.8.29",
     "dayjs": "^1.8.29",
     "dotenv": "^16.0.1",
     "dotenv": "^16.0.1",

+ 2 - 2
express-server/routes/google.js

@@ -140,9 +140,9 @@ async () => {
 router.get('/callback',  passport.authenticate('google', { failureRedirect: '/failed' }),
 router.get('/callback',  passport.authenticate('google', { failureRedirect: '/failed' }),
   async (req, res) => {
   async (req, res) => {
       console.log('je susi dans ma fonction callback ', req.user)
       console.log('je susi dans ma fonction callback ', req.user)
-      const accessToken = jwt.sign({ userId: req.user._id, email: req.user.email, role: req.user.role }, config.secret_key, { expiresIn: '10 h' })
+      const token = jwt.sign({ userId: req.user._id, email: req.user.email, role: req.user.role }, config.secret_key, { expiresIn: '10 h' })
        //res.status(200).json({ success: true, token, expireIn: `${new Date().getTime() + 120000}` })
        //res.status(200).json({ success: true, token, expireIn: `${new Date().getTime() + 120000}` })
-      res.redirect(`http://localhost:4200/auth?access_token=${accessToken}`);
+      res.redirect(`http://localhost:4200/auth?token=${token}`);
     });
     });