Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • xhavlic/pb138-film-database-group-project
1 result
Show changes
Commits on Source (48)
Showing
with 1987 additions and 918 deletions
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
"@prisma/client": "^3.15.2", "@prisma/client": "^3.15.2",
"class-transformer": "^0.4.0", "class-transformer": "^0.4.0",
"class-validator": "^0.13.1", "class-validator": "^0.13.1",
"express-jwt": "^7.7.5",
"jshint": "^2.13.4", "jshint": "^2.13.4",
"jwks-rsa": "^2.1.4",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rxjs": "^7.2.0", "rxjs": "^7.2.0",
...@@ -1777,6 +1779,14 @@ ...@@ -1777,6 +1779,14 @@
"url": "https://github.com/chalk/chalk?sponsor=1" "url": "https://github.com/chalk/chalk?sponsor=1"
} }
}, },
"node_modules/@panva/asn1.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
"integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==",
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/@prisma/client": { "node_modules/@prisma/client": {
"version": "3.15.2", "version": "3.15.2",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.2.tgz", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.2.tgz",
...@@ -1902,7 +1912,6 @@ ...@@ -1902,7 +1912,6 @@
"version": "1.19.2", "version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
"integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
"dev": true,
"dependencies": { "dependencies": {
"@types/connect": "*", "@types/connect": "*",
"@types/node": "*" "@types/node": "*"
...@@ -1912,7 +1921,6 @@ ...@@ -1912,7 +1921,6 @@
"version": "3.4.35", "version": "3.4.35",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
"integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
"dev": true,
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
} }
...@@ -1953,7 +1961,6 @@ ...@@ -1953,7 +1961,6 @@
"version": "4.17.13", "version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
"integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
"dev": true,
"dependencies": { "dependencies": {
"@types/body-parser": "*", "@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.18", "@types/express-serve-static-core": "^4.17.18",
...@@ -1965,13 +1972,20 @@ ...@@ -1965,13 +1972,20 @@
"version": "4.17.28", "version": "4.17.28",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz",
"integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==",
"dev": true,
"dependencies": { "dependencies": {
"@types/node": "*", "@types/node": "*",
"@types/qs": "*", "@types/qs": "*",
"@types/range-parser": "*" "@types/range-parser": "*"
} }
}, },
"node_modules/@types/express-unless": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.3.tgz",
"integrity": "sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw==",
"dependencies": {
"@types/express": "*"
}
},
"node_modules/@types/graceful-fs": { "node_modules/@types/graceful-fs": {
"version": "4.1.5", "version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
...@@ -2027,17 +2041,23 @@ ...@@ -2027,17 +2041,23 @@
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true "dev": true
}, },
"node_modules/@types/jsonwebtoken": {
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz",
"integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/mime": { "node_modules/@types/mime": {
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
"dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "16.11.39", "version": "16.11.39",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.39.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.39.tgz",
"integrity": "sha512-K0MsdV42vPwm9L6UwhIxMAOmcvH/1OoVkZyCgEtVu4Wx7sElGloy/W7kMBNe/oJ7V/jW9BVt1F6RahH6e7tPXw==", "integrity": "sha512-K0MsdV42vPwm9L6UwhIxMAOmcvH/1OoVkZyCgEtVu4Wx7sElGloy/W7kMBNe/oJ7V/jW9BVt1F6RahH6e7tPXw=="
"dev": true
}, },
"node_modules/@types/parse-json": { "node_modules/@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
...@@ -2054,20 +2074,17 @@ ...@@ -2054,20 +2074,17 @@
"node_modules/@types/qs": { "node_modules/@types/qs": {
"version": "6.9.7", "version": "6.9.7",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
"dev": true
}, },
"node_modules/@types/range-parser": { "node_modules/@types/range-parser": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
"dev": true
}, },
"node_modules/@types/serve-static": { "node_modules/@types/serve-static": {
"version": "1.13.10", "version": "1.13.10",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
"integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
"dev": true,
"dependencies": { "dependencies": {
"@types/mime": "^1", "@types/mime": "^1",
"@types/node": "*" "@types/node": "*"
...@@ -2968,6 +2985,11 @@ ...@@ -2968,6 +2985,11 @@
"ieee754": "^1.1.13" "ieee754": "^1.1.13"
} }
}, },
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
},
"node_modules/buffer-from": { "node_modules/buffer-from": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
...@@ -3446,7 +3468,6 @@ ...@@ -3446,7 +3468,6 @@
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
}, },
...@@ -3653,6 +3674,14 @@ ...@@ -3653,6 +3674,14 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"dependencies": {
"safe-buffer": "^5.0.1"
}
},
"node_modules/ee-first": { "node_modules/ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
...@@ -4244,6 +4273,25 @@ ...@@ -4244,6 +4273,25 @@
"node": ">= 0.10.0" "node": ">= 0.10.0"
} }
}, },
"node_modules/express-jwt": {
"version": "7.7.5",
"resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-7.7.5.tgz",
"integrity": "sha512-2CMse20Ex2vbqvsuGAcai7TgQuvmFa1n39PwKLaEszTGhuRzckBERII4PwdZIibtwfYUGSNVQzPpf+QcGo2yHw==",
"dependencies": {
"@types/express-unless": "^0.5.3",
"@types/jsonwebtoken": "^8.5.8",
"express-unless": "^2.0.2",
"jsonwebtoken": "^8.5.1"
},
"engines": {
"node": ">= 8.0.0"
}
},
"node_modules/express-unless": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/express-unless/-/express-unless-2.1.0.tgz",
"integrity": "sha512-666xLp2L3eM1hYhabyZq0HTdedDdcM9QdKsQSROl610VMc2f98KKenc8M3XTPuS/4zpa0QoB8gyDh8K1d8jgDw=="
},
"node_modules/express/node_modules/debug": { "node_modules/express/node_modules/debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
...@@ -6345,6 +6393,20 @@ ...@@ -6345,6 +6393,20 @@
"url": "https://github.com/chalk/supports-color?sponsor=1" "url": "https://github.com/chalk/supports-color?sponsor=1"
} }
}, },
"node_modules/jose": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz",
"integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==",
"dependencies": {
"@panva/asn1.js": "^1.0.0"
},
"engines": {
"node": ">=10.13.0 < 13 || >=13.7.0"
},
"funding": {
"url": "https://github.com/sponsors/panva"
}
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
...@@ -6462,6 +6524,70 @@ ...@@ -6462,6 +6524,70 @@
"graceful-fs": "^4.1.6" "graceful-fs": "^4.1.6"
} }
}, },
"node_modules/jsonwebtoken": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
"integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
"dependencies": {
"jws": "^3.2.2",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
"lodash.isinteger": "^4.0.4",
"lodash.isnumber": "^3.0.3",
"lodash.isplainobject": "^4.0.6",
"lodash.isstring": "^4.0.1",
"lodash.once": "^4.0.0",
"ms": "^2.1.1",
"semver": "^5.6.0"
},
"engines": {
"node": ">=4",
"npm": ">=1.4.28"
}
},
"node_modules/jsonwebtoken/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
"integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
"dependencies": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
"node_modules/jwks-rsa": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.1.4.tgz",
"integrity": "sha512-mpArfgPkUpX11lNtGxsF/szkasUcbWHGplZl/uFvFO2NuMHmt0dQXIihh0rkPU2yQd5niQtuUHbXnG/WKiXF6Q==",
"dependencies": {
"@types/express": "^4.17.13",
"@types/jsonwebtoken": "^8.5.8",
"debug": "^4.3.4",
"jose": "^2.0.5",
"limiter": "^1.1.5",
"lru-memoizer": "^2.1.4"
},
"engines": {
"node": ">=10 < 13 || >=14"
}
},
"node_modules/jws": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
"dependencies": {
"jwa": "^1.4.1",
"safe-buffer": "^5.0.1"
}
},
"node_modules/kleur": { "node_modules/kleur": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
...@@ -6498,6 +6624,11 @@ ...@@ -6498,6 +6624,11 @@
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.6.tgz", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.6.tgz",
"integrity": "sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA==" "integrity": "sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA=="
}, },
"node_modules/limiter": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
"integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA=="
},
"node_modules/lines-and-columns": { "node_modules/lines-and-columns": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
...@@ -6530,6 +6661,41 @@ ...@@ -6530,6 +6661,41 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}, },
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
},
"node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
},
"node_modules/lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
},
"node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
},
"node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
},
"node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
},
"node_modules/lodash.memoize": { "node_modules/lodash.memoize": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
...@@ -6542,6 +6708,11 @@ ...@@ -6542,6 +6708,11 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true "dev": true
}, },
"node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
},
"node_modules/log-symbols": { "node_modules/log-symbols": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
...@@ -6586,6 +6757,29 @@ ...@@ -6586,6 +6757,29 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/lru-memoizer": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz",
"integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==",
"dependencies": {
"lodash.clonedeep": "^4.5.0",
"lru-cache": "~4.0.0"
}
},
"node_modules/lru-memoizer/node_modules/lru-cache": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
"integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==",
"dependencies": {
"pseudomap": "^1.0.1",
"yallist": "^2.0.0"
}
},
"node_modules/lru-memoizer/node_modules/yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
},
"node_modules/macos-release": { "node_modules/macos-release": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz",
...@@ -6776,8 +6970,7 @@ ...@@ -6776,8 +6970,7 @@
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"dev": true
}, },
"node_modules/multer": { "node_modules/multer": {
"version": "1.4.4", "version": "1.4.4",
...@@ -7301,6 +7494,11 @@ ...@@ -7301,6 +7494,11 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
},
"node_modules/pump": { "node_modules/pump": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
...@@ -10280,6 +10478,11 @@ ...@@ -10280,6 +10478,11 @@
} }
} }
}, },
"@panva/asn1.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
"integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw=="
},
"@prisma/client": { "@prisma/client": {
"version": "3.15.2", "version": "3.15.2",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.2.tgz", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.15.2.tgz",
...@@ -10392,7 +10595,6 @@ ...@@ -10392,7 +10595,6 @@
"version": "1.19.2", "version": "1.19.2",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
"integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
"dev": true,
"requires": { "requires": {
"@types/connect": "*", "@types/connect": "*",
"@types/node": "*" "@types/node": "*"
...@@ -10402,7 +10604,6 @@ ...@@ -10402,7 +10604,6 @@
"version": "3.4.35", "version": "3.4.35",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
"integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
"dev": true,
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
} }
...@@ -10443,7 +10644,6 @@ ...@@ -10443,7 +10644,6 @@
"version": "4.17.13", "version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
"integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
"dev": true,
"requires": { "requires": {
"@types/body-parser": "*", "@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.18", "@types/express-serve-static-core": "^4.17.18",
...@@ -10455,13 +10655,20 @@ ...@@ -10455,13 +10655,20 @@
"version": "4.17.28", "version": "4.17.28",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz",
"integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==",
"dev": true,
"requires": { "requires": {
"@types/node": "*", "@types/node": "*",
"@types/qs": "*", "@types/qs": "*",
"@types/range-parser": "*" "@types/range-parser": "*"
} }
}, },
"@types/express-unless": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.3.tgz",
"integrity": "sha512-TyPLQaF6w8UlWdv4gj8i46B+INBVzURBNRahCozCSXfsK2VTlL1wNyTlMKw817VHygBtlcl5jfnPadlydr06Yw==",
"requires": {
"@types/express": "*"
}
},
"@types/graceful-fs": { "@types/graceful-fs": {
"version": "4.1.5", "version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
...@@ -10517,17 +10724,23 @@ ...@@ -10517,17 +10724,23 @@
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true "dev": true
}, },
"@types/jsonwebtoken": {
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz",
"integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==",
"requires": {
"@types/node": "*"
}
},
"@types/mime": { "@types/mime": {
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
"dev": true
}, },
"@types/node": { "@types/node": {
"version": "16.11.39", "version": "16.11.39",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.39.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.39.tgz",
"integrity": "sha512-K0MsdV42vPwm9L6UwhIxMAOmcvH/1OoVkZyCgEtVu4Wx7sElGloy/W7kMBNe/oJ7V/jW9BVt1F6RahH6e7tPXw==", "integrity": "sha512-K0MsdV42vPwm9L6UwhIxMAOmcvH/1OoVkZyCgEtVu4Wx7sElGloy/W7kMBNe/oJ7V/jW9BVt1F6RahH6e7tPXw=="
"dev": true
}, },
"@types/parse-json": { "@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
...@@ -10544,20 +10757,17 @@ ...@@ -10544,20 +10757,17 @@
"@types/qs": { "@types/qs": {
"version": "6.9.7", "version": "6.9.7",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
"dev": true
}, },
"@types/range-parser": { "@types/range-parser": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
"dev": true
}, },
"@types/serve-static": { "@types/serve-static": {
"version": "1.13.10", "version": "1.13.10",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
"integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
"dev": true,
"requires": { "requires": {
"@types/mime": "^1", "@types/mime": "^1",
"@types/node": "*" "@types/node": "*"
...@@ -11232,6 +11442,11 @@ ...@@ -11232,6 +11442,11 @@
"ieee754": "^1.1.13" "ieee754": "^1.1.13"
} }
}, },
"buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
},
"buffer-from": { "buffer-from": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
...@@ -11612,7 +11827,6 @@ ...@@ -11612,7 +11827,6 @@
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"requires": { "requires": {
"ms": "2.1.2" "ms": "2.1.2"
} }
...@@ -11767,6 +11981,14 @@ ...@@ -11767,6 +11981,14 @@
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz",
"integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==" "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg=="
}, },
"ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"ee-first": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
...@@ -12233,6 +12455,22 @@ ...@@ -12233,6 +12455,22 @@
} }
} }
}, },
"express-jwt": {
"version": "7.7.5",
"resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-7.7.5.tgz",
"integrity": "sha512-2CMse20Ex2vbqvsuGAcai7TgQuvmFa1n39PwKLaEszTGhuRzckBERII4PwdZIibtwfYUGSNVQzPpf+QcGo2yHw==",
"requires": {
"@types/express-unless": "^0.5.3",
"@types/jsonwebtoken": "^8.5.8",
"express-unless": "^2.0.2",
"jsonwebtoken": "^8.5.1"
}
},
"express-unless": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/express-unless/-/express-unless-2.1.0.tgz",
"integrity": "sha512-666xLp2L3eM1hYhabyZq0HTdedDdcM9QdKsQSROl610VMc2f98KKenc8M3XTPuS/4zpa0QoB8gyDh8K1d8jgDw=="
},
"external-editor": { "external-editor": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
...@@ -13799,6 +14037,14 @@ ...@@ -13799,6 +14037,14 @@
} }
} }
}, },
"jose": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz",
"integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==",
"requires": {
"@panva/asn1.js": "^1.0.0"
}
},
"js-tokens": { "js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
...@@ -13889,6 +14135,62 @@ ...@@ -13889,6 +14135,62 @@
"universalify": "^2.0.0" "universalify": "^2.0.0"
} }
}, },
"jsonwebtoken": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
"integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
"requires": {
"jws": "^3.2.2",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
"lodash.isinteger": "^4.0.4",
"lodash.isnumber": "^3.0.3",
"lodash.isplainobject": "^4.0.6",
"lodash.isstring": "^4.0.1",
"lodash.once": "^4.0.0",
"ms": "^2.1.1",
"semver": "^5.6.0"
},
"dependencies": {
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
}
}
},
"jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
"integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
"requires": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
"jwks-rsa": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.1.4.tgz",
"integrity": "sha512-mpArfgPkUpX11lNtGxsF/szkasUcbWHGplZl/uFvFO2NuMHmt0dQXIihh0rkPU2yQd5niQtuUHbXnG/WKiXF6Q==",
"requires": {
"@types/express": "^4.17.13",
"@types/jsonwebtoken": "^8.5.8",
"debug": "^4.3.4",
"jose": "^2.0.5",
"limiter": "^1.1.5",
"lru-memoizer": "^2.1.4"
}
},
"jws": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
"requires": {
"jwa": "^1.4.1",
"safe-buffer": "^5.0.1"
}
},
"kleur": { "kleur": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
...@@ -13916,6 +14218,11 @@ ...@@ -13916,6 +14218,11 @@
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.6.tgz", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.6.tgz",
"integrity": "sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA==" "integrity": "sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA=="
}, },
"limiter": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
"integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA=="
},
"lines-and-columns": { "lines-and-columns": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
...@@ -13942,6 +14249,41 @@ ...@@ -13942,6 +14249,41 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}, },
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
},
"lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
},
"lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
},
"lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
},
"lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
},
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
},
"lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
},
"lodash.memoize": { "lodash.memoize": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
...@@ -13954,6 +14296,11 @@ ...@@ -13954,6 +14296,11 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true "dev": true
}, },
"lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
},
"log-symbols": { "log-symbols": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
...@@ -13985,6 +14332,31 @@ ...@@ -13985,6 +14332,31 @@
"yallist": "^4.0.0" "yallist": "^4.0.0"
} }
}, },
"lru-memoizer": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz",
"integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==",
"requires": {
"lodash.clonedeep": "^4.5.0",
"lru-cache": "~4.0.0"
},
"dependencies": {
"lru-cache": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
"integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==",
"requires": {
"pseudomap": "^1.0.1",
"yallist": "^2.0.0"
}
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
}
}
},
"macos-release": { "macos-release": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz",
...@@ -14126,8 +14498,7 @@ ...@@ -14126,8 +14498,7 @@
"ms": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"dev": true
}, },
"multer": { "multer": {
"version": "1.4.4", "version": "1.4.4",
...@@ -14500,6 +14871,11 @@ ...@@ -14500,6 +14871,11 @@
"ipaddr.js": "1.9.1" "ipaddr.js": "1.9.1"
} }
}, },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
},
"pump": { "pump": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
......
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
"@prisma/client": "^3.15.2", "@prisma/client": "^3.15.2",
"class-transformer": "^0.4.0", "class-transformer": "^0.4.0",
"class-validator": "^0.13.1", "class-validator": "^0.13.1",
"express-jwt": "^7.7.5",
"jshint": "^2.13.4", "jshint": "^2.13.4",
"jwks-rsa": "^2.1.4",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rxjs": "^7.2.0", "rxjs": "^7.2.0",
......
...@@ -5,19 +5,21 @@ import { ...@@ -5,19 +5,21 @@ import {
Body, Body,
Patch, Patch,
Param, Param,
Delete, Delete, UseGuards,
} from '@nestjs/common'; } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger'; import { ApiTags } from '@nestjs/swagger';
import { CategoriesService } from './categories.service'; import { CategoriesService } from './categories.service';
import { CreateCategoryDto } from './dto/create-category.dto'; import { CreateCategoryDto } from './dto/create-category.dto';
import { UpdateCategoryDto } from './dto/update-category.dto'; import { UpdateCategoryDto } from './dto/update-category.dto';
import { CategoryEntity } from './entities/category.entity'; import { CategoryEntity } from './entities/category.entity';
import {AuthorizationGuard} from "../../authorization/authorization.guard";
@ApiTags('categories') @ApiTags('categories')
@Controller('categories') @Controller('categories')
export class CategoriesController { export class CategoriesController {
constructor(private readonly categoriesService: CategoriesService) {} constructor(private readonly categoriesService: CategoriesService) {}
@UseGuards(AuthorizationGuard)
@Post() @Post()
async create( async create(
@Body() createCategoryDto: CreateCategoryDto, @Body() createCategoryDto: CreateCategoryDto,
...@@ -35,6 +37,7 @@ export class CategoriesController { ...@@ -35,6 +37,7 @@ export class CategoriesController {
return await this.categoriesService.findOne(id); return await this.categoriesService.findOne(id);
} }
@UseGuards(AuthorizationGuard)
@Patch(':id') @Patch(':id')
async update( async update(
@Param('id') id: string, @Param('id') id: string,
...@@ -43,6 +46,7 @@ export class CategoriesController { ...@@ -43,6 +46,7 @@ export class CategoriesController {
return await this.categoriesService.update(id, updateCategoryDto); return await this.categoriesService.update(id, updateCategoryDto);
} }
@UseGuards(AuthorizationGuard)
@Delete(':id') @Delete(':id')
async remove(@Param('id') id: string): Promise<CategoryEntity> { async remove(@Param('id') id: string): Promise<CategoryEntity> {
return await this.categoriesService.remove(id); return await this.categoriesService.remove(id);
......
...@@ -2,8 +2,10 @@ import { Module } from '@nestjs/common'; ...@@ -2,8 +2,10 @@ import { Module } from '@nestjs/common';
import { CategoriesService } from './categories.service'; import { CategoriesService } from './categories.service';
import { CategoriesController } from './categories.controller'; import { CategoriesController } from './categories.controller';
import { PrismaService } from 'src/prisma/prisma.service'; import { PrismaService } from 'src/prisma/prisma.service';
import { ConfigModule } from '@nestjs/config';
@Module({ @Module({
imports: [ConfigModule],
controllers: [CategoriesController], controllers: [CategoriesController],
providers: [CategoriesService, PrismaService], providers: [CategoriesService, PrismaService],
}) })
......
...@@ -20,7 +20,14 @@ export class CategoriesService { ...@@ -20,7 +20,14 @@ export class CategoriesService {
async findAll(): Promise<Category[]> { async findAll(): Promise<Category[]> {
return await this.prisma.category.findMany({ return await this.prisma.category.findMany({
include: { include: {
movies: true, movies: {
orderBy:{
name: 'asc',
}
}
},
orderBy: {
name: 'asc',
} }
}); });
} }
......
...@@ -6,18 +6,21 @@ import { ...@@ -6,18 +6,21 @@ import {
Patch, Patch,
Param, Param,
Delete, Delete,
UseGuards,
} from '@nestjs/common'; } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger'; import { ApiTags } from '@nestjs/swagger';
import { DirectorsService } from './directors.service'; import { DirectorsService } from './directors.service';
import { CreateDirectorDto } from './dto/create-director.dto'; import { CreateDirectorDto } from './dto/create-director.dto';
import { UpdateDirectorDto } from './dto/update-director.dto'; import { UpdateDirectorDto } from './dto/update-director.dto';
import { DirectorEntity } from './entities/director.entity'; import { DirectorEntity } from './entities/director.entity';
import { AuthorizationGuard } from '../../authorization/authorization.guard';
@ApiTags('directors') @ApiTags('directors')
@Controller('directors') @Controller('directors')
export class DirectorsController { export class DirectorsController {
constructor(private readonly directorsService: DirectorsService) {} constructor(private readonly directorsService: DirectorsService) {}
@UseGuards(AuthorizationGuard)
@Post() @Post()
async create( async create(
@Body() createDirectorDto: CreateDirectorDto, @Body() createDirectorDto: CreateDirectorDto,
...@@ -35,6 +38,7 @@ export class DirectorsController { ...@@ -35,6 +38,7 @@ export class DirectorsController {
return await this.directorsService.findOne(id); return await this.directorsService.findOne(id);
} }
@UseGuards(AuthorizationGuard)
@Patch(':id') @Patch(':id')
async update( async update(
@Param('id') id: string, @Param('id') id: string,
...@@ -43,6 +47,7 @@ export class DirectorsController { ...@@ -43,6 +47,7 @@ export class DirectorsController {
return await this.directorsService.update(id, updateDirectorDto); return await this.directorsService.update(id, updateDirectorDto);
} }
@UseGuards(AuthorizationGuard)
@Delete(':id') @Delete(':id')
async remove(@Param('id') id: string): Promise<DirectorEntity> { async remove(@Param('id') id: string): Promise<DirectorEntity> {
return await this.directorsService.remove(id); return await this.directorsService.remove(id);
......
...@@ -2,8 +2,10 @@ import { Module } from '@nestjs/common'; ...@@ -2,8 +2,10 @@ import { Module } from '@nestjs/common';
import { DirectorsService } from './directors.service'; import { DirectorsService } from './directors.service';
import { DirectorsController } from './directors.controller'; import { DirectorsController } from './directors.controller';
import { PrismaService } from '../../prisma/prisma.service'; import { PrismaService } from '../../prisma/prisma.service';
import { ConfigModule } from '@nestjs/config';
@Module({ @Module({
imports: [ConfigModule],
controllers: [DirectorsController], controllers: [DirectorsController],
providers: [DirectorsService, PrismaService], providers: [DirectorsService, PrismaService],
}) })
......
...@@ -26,6 +26,9 @@ export class DirectorsService { ...@@ -26,6 +26,9 @@ export class DirectorsService {
where: { where: {
id, id,
}, },
include: {
movies: true,
},
}); });
} }
......
...@@ -6,7 +6,7 @@ import { ...@@ -6,7 +6,7 @@ import {
Patch, Patch,
Param, Param,
Delete, Delete,
Query, Query, UseGuards,
} from '@nestjs/common'; } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger'; import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { MoviesService } from './movies.service'; import { MoviesService } from './movies.service';
...@@ -14,12 +14,14 @@ import { CreateMovieDto } from './dto/create-movie.dto'; ...@@ -14,12 +14,14 @@ import { CreateMovieDto } from './dto/create-movie.dto';
import { UpdateMovieDto } from './dto/update-movie.dto'; import { UpdateMovieDto } from './dto/update-movie.dto';
import { MovieEntity } from './entities/movie.entity'; import { MovieEntity } from './entities/movie.entity';
import { MoviesQuery } from './dto/movies-query'; import { MoviesQuery } from './dto/movies-query';
import { AuthorizationGuard } from '../../authorization/authorization.guard';
@ApiTags('movies') @ApiTags('movies')
@Controller('movies') @Controller('movies')
export class MoviesController { export class MoviesController {
constructor(private readonly moviesService: MoviesService) {} constructor(private readonly moviesService: MoviesService) {}
@UseGuards(AuthorizationGuard)
@Post() @Post()
async create(@Body() createMovieDto: CreateMovieDto): Promise<MovieEntity> { async create(@Body() createMovieDto: CreateMovieDto): Promise<MovieEntity> {
return await this.moviesService.create(createMovieDto); return await this.moviesService.create(createMovieDto);
...@@ -35,6 +37,7 @@ export class MoviesController { ...@@ -35,6 +37,7 @@ export class MoviesController {
return await this.moviesService.findOne(id); return await this.moviesService.findOne(id);
} }
@UseGuards(AuthorizationGuard)
@Patch(':id/:categoryName') @Patch(':id/:categoryName')
@ApiOperation({ summary: 'Add category to a movie' }) @ApiOperation({ summary: 'Add category to a movie' })
async addCategory( async addCategory(
...@@ -44,6 +47,7 @@ export class MoviesController { ...@@ -44,6 +47,7 @@ export class MoviesController {
return await this.moviesService.addCategory(id, categoryName); return await this.moviesService.addCategory(id, categoryName);
} }
@UseGuards(AuthorizationGuard)
@Patch(':id') @Patch(':id')
async update( async update(
@Param('id') id: string, @Param('id') id: string,
...@@ -52,6 +56,7 @@ export class MoviesController { ...@@ -52,6 +56,7 @@ export class MoviesController {
return await this.moviesService.update(id, updateMovieDto); return await this.moviesService.update(id, updateMovieDto);
} }
@UseGuards(AuthorizationGuard)
@Delete(':id') @Delete(':id')
async remove(@Param('id') id: string): Promise<MovieEntity> { async remove(@Param('id') id: string): Promise<MovieEntity> {
return await this.moviesService.remove(id); return await this.moviesService.remove(id);
......
...@@ -2,8 +2,10 @@ import { Module } from '@nestjs/common'; ...@@ -2,8 +2,10 @@ import { Module } from '@nestjs/common';
import { MoviesService } from './movies.service'; import { MoviesService } from './movies.service';
import { MoviesController } from './movies.controller'; import { MoviesController } from './movies.controller';
import { PrismaService } from '../../prisma/prisma.service'; import { PrismaService } from '../../prisma/prisma.service';
import { ConfigModule } from '@nestjs/config';
@Module({ @Module({
imports: [ConfigModule],
controllers: [MoviesController], controllers: [MoviesController],
providers: [MoviesService, PrismaService], providers: [MoviesService, PrismaService],
}) })
......
...@@ -65,6 +65,7 @@ export class MoviesService { ...@@ -65,6 +65,7 @@ export class MoviesService {
}, },
include: { include: {
director: true, director: true,
categories: true,
}, },
}); });
} }
...@@ -102,7 +103,11 @@ export class MoviesService { ...@@ -102,7 +103,11 @@ export class MoviesService {
async update(id: string, updateMovieDto: UpdateMovieDto): Promise<Movie> { async update(id: string, updateMovieDto: UpdateMovieDto): Promise<Movie> {
const updatedMovie = { const updatedMovie = {
...(await this.findOne(id)), ...(await this.prisma.movie.findUnique({
where: {
id,
},
})),
...plainToClass(MovieEntity, updateMovieDto), ...plainToClass(MovieEntity, updateMovieDto),
}; };
return await this.prisma.movie.update({ return await this.prisma.movie.update({
......
...@@ -5,13 +5,16 @@ import { DirectorsModule } from './api/directors/directors.module'; ...@@ -5,13 +5,16 @@ import { DirectorsModule } from './api/directors/directors.module';
import { MoviesModule } from './api/movies/movies.module'; import { MoviesModule } from './api/movies/movies.module';
import { AppController } from './app.controller'; import { AppController } from './app.controller';
import { AppService } from './app.service'; import { AppService } from './app.service';
import { AuthorizationModule } from './authorization/authorization.module';
@Module({ @Module({
imports: [ imports: [
AuthorizationModule,
ConfigModule.forRoot(), ConfigModule.forRoot(),
CategoriesModule, CategoriesModule,
DirectorsModule, DirectorsModule,
MoviesModule, MoviesModule,
AuthorizationModule,
], ],
controllers: [AppController], controllers: [AppController],
providers: [AppService], providers: [AppService],
......
import {
CanActivate,
ExecutionContext,
Injectable,
UnauthorizedException,
} from '@nestjs/common';
import { expressJwtSecret } from 'jwks-rsa';
import { promisify } from 'util';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class AuthorizationGuard implements CanActivate {
private readonly AUTH_AUDIENCE: string;
private readonly AUTH_DOMAIN: string;
constructor(private configService: ConfigService) {
this.AUTH_AUDIENCE = this.configService.get('AUTH_AUDIENCE');
this.AUTH_DOMAIN = this.configService.get('AUTH_DOMAIN');
}
async canActivate(context: ExecutionContext): Promise<boolean> {
const { expressjwt: jwt } = require("express-jwt");
const req = context.getArgByIndex(0);
const res = context.getArgByIndex(1);
const checkJwt = promisify(
jwt({
secret: expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `${this.AUTH_DOMAIN}.well-known/jwks.json`,
}),
audience: this.AUTH_AUDIENCE,
issuer: this.AUTH_DOMAIN,
algorithms: ['RS256'],
}),
);
try {
await checkJwt(req, res);
return true;
} catch (error) {
throw new UnauthorizedException(error);
}
}
}
import { Module } from '@nestjs/common';
@Module({})
export class AuthorizationModule {}
import { Descriptions } from "antd"; import { Descriptions } from "antd";
import axiosConfig from '../axios-config'; import axiosConfig from '../axios-config';
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useParams } from "react-router-dom"; import {Link, useParams} from "react-router-dom";
import { ErrorPage } from "./ErrorPage"; import { ErrorPage } from "./ErrorPage";
import { DirectorDTO } from "../dto"; import {DirectorDTO, MovieDTO} from "../dto";
export const DirectorPage = () => { export const DirectorPage = () => {
const { id: directorId } = useParams(); const { id: directorId } = useParams();
const [director, setDirector] = useState<DirectorDTO>({} as DirectorDTO); const [director, setDirector] = useState<DirectorDTO>({} as DirectorDTO);
const [movies, setMovies] = useState<MovieDTO[]>([]);
const [isError, setIsError] = useState<boolean>(false); const [isError, setIsError] = useState<boolean>(false);
useEffect(() => { useEffect(() => {
const fetchData = async () => { const fetchData = async () => {
try { try {
const response = await axiosConfig.get<DirectorDTO>(`/directors/${directorId}`); const response = await axiosConfig.get<DirectorDTO>(`/directors/${directorId}`);
setDirector({ ...response.data }); setDirector({ ...response.data })
setMovies(response.data.movies);
} catch { } catch {
setIsError(true); setIsError(true);
} }
...@@ -27,6 +29,14 @@ export const DirectorPage = () => { ...@@ -27,6 +29,14 @@ export const DirectorPage = () => {
return <ErrorPage />; return <ErrorPage />;
} }
const directorMovies = movies.map((movie) =>
<li>
<Link to={`/movie/${movie.id}`}>
{movie.name}
</Link>
</li>
);
return ( return (
<Descriptions title="Director page" bordered style={ <Descriptions title="Director page" bordered style={
{padding: "4%", width:"50%"} {padding: "4%", width:"50%"}
...@@ -37,6 +47,9 @@ export const DirectorPage = () => { ...@@ -37,6 +47,9 @@ export const DirectorPage = () => {
<Descriptions.Item label="Surname" span={3}> <Descriptions.Item label="Surname" span={3}>
{director.surname} {director.surname}
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label="Movies" span={3}>
{directorMovies}
</Descriptions.Item>
<Descriptions.Item label="Birthdate"> <Descriptions.Item label="Birthdate">
{director.birthDate} {director.birthDate}
</Descriptions.Item> </Descriptions.Item>
......
...@@ -2,7 +2,7 @@ import { Descriptions, Image } from "antd"; ...@@ -2,7 +2,7 @@ import { Descriptions, Image } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Link, useParams } from "react-router-dom"; import { Link, useParams } from "react-router-dom";
import axiosConfig from '../axios-config'; import axiosConfig from '../axios-config';
import { DirectorDTO, MovieDTO } from "../dto"; import {CategoryDTO, DirectorDTO, MovieDTO} from "../dto";
import { ErrorPage } from "./ErrorPage"; import { ErrorPage } from "./ErrorPage";
export const MoviePage = () => { export const MoviePage = () => {
...@@ -10,6 +10,7 @@ export const MoviePage = () => { ...@@ -10,6 +10,7 @@ export const MoviePage = () => {
const [movie, setMovie] = useState<MovieDTO>({} as MovieDTO); const [movie, setMovie] = useState<MovieDTO>({} as MovieDTO);
const [director, setDirector] = useState<DirectorDTO>({} as DirectorDTO); const [director, setDirector] = useState<DirectorDTO>({} as DirectorDTO);
const [categories, setCategories] = useState<CategoryDTO[]>([]);
const [isError, setIsError] = useState<boolean>(false); const [isError, setIsError] = useState<boolean>(false);
...@@ -18,9 +19,8 @@ export const MoviePage = () => { ...@@ -18,9 +19,8 @@ export const MoviePage = () => {
try { try {
const response = await axiosConfig.get("movies/" + id); const response = await axiosConfig.get("movies/" + id);
setMovie(response.data); setMovie(response.data);
if (response.data.director) { setDirector(response.data.director);
setDirector(response.data.director); setCategories(response.data.categories);
}
} catch (err) { } catch (err) {
setIsError(true); setIsError(true);
} }
...@@ -33,6 +33,12 @@ export const MoviePage = () => { ...@@ -33,6 +33,12 @@ export const MoviePage = () => {
return <ErrorPage />; return <ErrorPage />;
} }
const movieCategories = categories.map((category) =>
<>
{category.name} &nbsp;&nbsp;
</>
);
return ( return (
<> <>
<Descriptions <Descriptions
...@@ -58,6 +64,9 @@ export const MoviePage = () => { ...@@ -58,6 +64,9 @@ export const MoviePage = () => {
<Descriptions.Item label="Runtime" span={2}> <Descriptions.Item label="Runtime" span={2}>
{movie.runTimeMinutes} minutes {movie.runTimeMinutes} minutes
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label="Categories" span={3}>
{movieCategories}
</Descriptions.Item>
</Descriptions> </Descriptions>
<Descriptions title="Director" bordered style={{ padding: "5%" }}> <Descriptions title="Director" bordered style={{ padding: "5%" }}>
<Descriptions.Item label="Name" span={3}> <Descriptions.Item label="Name" span={3}>
......
...@@ -8,115 +8,18 @@ import { MovieDTO } from "../dto"; ...@@ -8,115 +8,18 @@ import { MovieDTO } from "../dto";
import { ErrorPage } from "./ErrorPage"; import { ErrorPage } from "./ErrorPage";
import { PreviewBox } from "./PreviewBox"; import { PreviewBox } from "./PreviewBox";
//example - TODO replace this with API preview call - get RECENT movies (probably 6-7 is enough)
export const cardsDataExample2: MovieDTO[] = [
{
id: "1",
originalName: "Cars",
name: "Auta",
intro: "auta ve filmu",
publishedAt: "7.8.2005",
runTimeMinutes: 125,
director: {
id: "xd123",
name: "Kenny",
surname: "Omega",
birthDate: "9.9.1980",
},
picture: "https://upload.wikimedia.org/wikipedia/en/3/34/Cars_2006.jpg",
},
{
id: "2",
originalName: "Monster House",
name: "V tom domě straší",
intro: "jo ten dum je docela spooky",
publishedAt: "4.4.1994",
runTimeMinutes: 80,
picture:
"https://images-na.ssl-images-amazon.com/images/S/pv-target-images/9a996123e0b01f618ab2291b479f9d5034de354b2d1bb58979ddc6937588dfa8._RI_V_TTW_.jpg",
director: {
id: "xp234",
name: "Bray",
surname: "Wyatt",
birthDate: "unknown",
},
},
{
id: "3",
originalName: "Pokemon",
name: "Pokémon",
intro: "Gotta catch them all.",
publishedAt: "9.9.1970",
runTimeMinutes: 600,
picture:
"https://www.obchod.crew.cz/im/coc/1280/0/content/629080/cover_image.1607432614.jpg",
director: {
id: "xc456",
name: "Kazuchika",
surname: "Okada",
birthDate: "17.2.1984",
},
},
{
id: "4",
originalName: "Gympl",
name: "Gympl",
intro: "VO SEDUMNÁCT METRŮ?",
publishedAt: "2.2.2005",
runTimeMinutes: 96,
picture:
"https://img.csfd.cz/files/images/user/profile/162/847/162847510_91e839.jpg",
director: {
id: "xs789",
name: "Tomáš",
surname: "Vorel",
birthDate: "někdy minulé století",
},
},
{
id: "5",
originalName: "Toy Story",
name: "Příběh hraček",
intro: "Hmm the floor here is made of floor",
publishedAt: "4.5.1999",
runTimeMinutes: 90,
picture:
"https://m.media-amazon.com/images/M/MV5BMDU2ZWJlMjktMTRhMy00ZTA5LWEzNDgtYmNmZTEwZTViZWJkXkEyXkFqcGdeQXVyNDQ2OTk4MzI@._V1_.jpg",
director: {
id: "xl753",
name: "Tomohiro",
surname: "Ishii",
birthDate: "19.9.1970",
},
},
{
id: "6",
name: "Smoke",
originalName: "Kouř",
intro:
"Jedu dál stále s tebou víme kam cesty vedou je to fajn fajn fajn je to fajn fajnový",
publishedAt: "17.11.1989",
runTimeMinutes: 50,
picture:
"https://img.csfd.cz/files/images/user/profile/164/556/164556101_d8e43b.jpg",
director: {
id: "xx787",
name: "Zdenda",
surname: "Pohlreich",
birthDate: "4.4.1985",
},
},
];
export const Preview: React.FC = () => { export const Preview: React.FC = () => {
const [moviesRecent, setMoviesRecent] = useState<MovieDTO[]>([]);
const [movies, setMovies] = useState<MovieDTO[]>([]); const [movies, setMovies] = useState<MovieDTO[]>([]);
const [isError, setIsError] = useState<boolean>(false); const [isError, setIsError] = useState<boolean>(false);
useEffect(() => { useEffect(() => {
const fetchCategories = async () => { const fetchCategories = async () => {
try { try {
const response = await axiosConfig.get("movies?mostRecentCnt=6"); const response = await axiosConfig.get("movies?mostRecentCnt=12");
setMovies(response.data); const half = Math.ceil(response.data.length / 2);
setMovies(response.data.slice(0, half));
setMoviesRecent(response.data.slice(-half));
} catch (err) { } catch (err) {
setIsError(true); setIsError(true);
} }
...@@ -135,9 +38,9 @@ export const Preview: React.FC = () => { ...@@ -135,9 +38,9 @@ export const Preview: React.FC = () => {
direction="vertical" direction="vertical"
style={{ display: "flex", paddingTop: "2%" }} style={{ display: "flex", paddingTop: "2%" }}
> >
<PreviewBox title={"Editor's picks"} movies={movies} /> <PreviewBox title={"Editor's picks"} movies={moviesRecent} />
<Divider/> <Divider/>
<PreviewBox title={"Recent movies"} movies={cardsDataExample2} /> <PreviewBox title={"Recent movies"} movies={movies} />
</Space> </Space>
); );
} }
......
...@@ -20,4 +20,5 @@ export interface DirectorDTO { ...@@ -20,4 +20,5 @@ export interface DirectorDTO {
name: string; name: string;
surname: string; surname: string;
birthDate?: string; birthDate?: string;
movies: MovieDTO[];
} }
This diff is collapsed.