diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | app/Controllers/Http/RecipeController.js | 21 | ||||
-rw-r--r-- | package-lock.json | 51 | ||||
-rw-r--r-- | package.json | 1 |
4 files changed, 69 insertions, 6 deletions
@@ -34,7 +34,7 @@ A custom server allows you to manage the data of all registered users yourself a | |||
34 | - [x] User dashboard | 34 | - [x] User dashboard |
35 | - [x] Export/import data to other Ferdi-servers | 35 | - [x] Export/import data to other Ferdi-servers |
36 | - [x] Password recovery | 36 | - [x] Password recovery |
37 | - [ ] Recipe update | 37 | - [x] Recipe update |
38 | 38 | ||
39 | ## Deploying the App | 39 | ## Deploying the App |
40 | 40 | ||
diff --git a/app/Controllers/Http/RecipeController.js b/app/Controllers/Http/RecipeController.js index a2b129d..07cd430 100644 --- a/app/Controllers/Http/RecipeController.js +++ b/app/Controllers/Http/RecipeController.js | |||
@@ -9,6 +9,7 @@ const Env = use('Env'); | |||
9 | const targz = require('targz'); | 9 | const targz = require('targz'); |
10 | const path = require('path'); | 10 | const path = require('path'); |
11 | const fs = require('fs-extra'); | 11 | const fs = require('fs-extra'); |
12 | const semver = require('semver'); | ||
12 | 13 | ||
13 | const compress = (src, dest) => new Promise((resolve, reject) => { | 14 | const compress = (src, dest) => new Promise((resolve, reject) => { |
14 | targz.compress({ | 15 | targz.compress({ |
@@ -166,8 +167,24 @@ class RecipeController { | |||
166 | ); | 167 | ); |
167 | } | 168 | } |
168 | 169 | ||
169 | update({ response }) { | 170 | update({ request, response }) { |
170 | return response.send([]); | 171 | const updates = []; |
172 | const recipes = request.all(); | ||
173 | const allJson = fs.readJsonSync(path.join( | ||
174 | Helpers.appRoot(), 'recipes', 'all.json', | ||
175 | )); | ||
176 | |||
177 | for (const recipe of Object.keys(recipes)) { | ||
178 | const version = recipes[recipe]; | ||
179 | |||
180 | // Find recipe in local recipe repository | ||
181 | const localRecipe = allJson.find(r => r.id === recipe); | ||
182 | if (localRecipe && semver.lt(version, localRecipe.version)) { | ||
183 | updates.push(recipe); | ||
184 | } | ||
185 | } | ||
186 | |||
187 | return response.send(updates); | ||
171 | } | 188 | } |
172 | 189 | ||
173 | // Download a recipe | 190 | // Download a recipe |
diff --git a/package-lock.json b/package-lock.json index 7225bf1..837334f 100644 --- a/package-lock.json +++ b/package-lock.json | |||
@@ -1681,6 +1681,13 @@ | |||
1681 | "semver": "^5.5.0", | 1681 | "semver": "^5.5.0", |
1682 | "shebang-command": "^1.2.0", | 1682 | "shebang-command": "^1.2.0", |
1683 | "which": "^1.2.9" | 1683 | "which": "^1.2.9" |
1684 | }, | ||
1685 | "dependencies": { | ||
1686 | "semver": { | ||
1687 | "version": "5.7.1", | ||
1688 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
1689 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" | ||
1690 | } | ||
1684 | } | 1691 | } |
1685 | }, | 1692 | }, |
1686 | "csrf": { | 1693 | "csrf": { |
@@ -3560,6 +3567,11 @@ | |||
3560 | "version": "2.1.2", | 3567 | "version": "2.1.2", |
3561 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | 3568 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", |
3562 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | 3569 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" |
3570 | }, | ||
3571 | "semver": { | ||
3572 | "version": "5.7.1", | ||
3573 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
3574 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" | ||
3563 | } | 3575 | } |
3564 | } | 3576 | } |
3565 | }, | 3577 | }, |
@@ -4256,6 +4268,13 @@ | |||
4256 | "rimraf": "^2.6.1", | 4268 | "rimraf": "^2.6.1", |
4257 | "semver": "^5.3.0", | 4269 | "semver": "^5.3.0", |
4258 | "tar": "^4" | 4270 | "tar": "^4" |
4271 | }, | ||
4272 | "dependencies": { | ||
4273 | "semver": { | ||
4274 | "version": "5.7.1", | ||
4275 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
4276 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" | ||
4277 | } | ||
4259 | } | 4278 | } |
4260 | }, | 4279 | }, |
4261 | "node-req": { | 4280 | "node-req": { |
@@ -4307,6 +4326,14 @@ | |||
4307 | "resolve": "^1.10.0", | 4326 | "resolve": "^1.10.0", |
4308 | "semver": "2 || 3 || 4 || 5", | 4327 | "semver": "2 || 3 || 4 || 5", |
4309 | "validate-npm-package-license": "^3.0.1" | 4328 | "validate-npm-package-license": "^3.0.1" |
4329 | }, | ||
4330 | "dependencies": { | ||
4331 | "semver": { | ||
4332 | "version": "5.7.1", | ||
4333 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
4334 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||
4335 | "dev": true | ||
4336 | } | ||
4310 | } | 4337 | } |
4311 | }, | 4338 | }, |
4312 | "normalize-url": { | 4339 | "normalize-url": { |
@@ -5606,9 +5633,22 @@ | |||
5606 | "integrity": "sha1-JHEQ7yLM+JexOj8KvdtSeCOTzWo=" | 5633 | "integrity": "sha1-JHEQ7yLM+JexOj8KvdtSeCOTzWo=" |
5607 | }, | 5634 | }, |
5608 | "semver": { | 5635 | "semver": { |
5609 | "version": "5.7.1", | 5636 | "version": "7.3.5", |
5610 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | 5637 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", |
5611 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" | 5638 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", |
5639 | "requires": { | ||
5640 | "lru-cache": "^6.0.0" | ||
5641 | }, | ||
5642 | "dependencies": { | ||
5643 | "lru-cache": { | ||
5644 | "version": "6.0.0", | ||
5645 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", | ||
5646 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", | ||
5647 | "requires": { | ||
5648 | "yallist": "^4.0.0" | ||
5649 | } | ||
5650 | } | ||
5651 | } | ||
5612 | }, | 5652 | }, |
5613 | "send": { | 5653 | "send": { |
5614 | "version": "0.16.2", | 5654 | "version": "0.16.2", |
@@ -6980,6 +7020,11 @@ | |||
6980 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", | 7020 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", |
6981 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" | 7021 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" |
6982 | }, | 7022 | }, |
7023 | "yallist": { | ||
7024 | "version": "4.0.0", | ||
7025 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||
7026 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||
7027 | }, | ||
6983 | "youch": { | 7028 | "youch": { |
6984 | "version": "2.0.10", | 7029 | "version": "2.0.10", |
6985 | "resolved": "https://registry.npmjs.org/youch/-/youch-2.0.10.tgz", | 7030 | "resolved": "https://registry.npmjs.org/youch/-/youch-2.0.10.tgz", |
diff --git a/package.json b/package.json index e587f41..d31ef21 100644 --- a/package.json +++ b/package.json | |||
@@ -44,6 +44,7 @@ | |||
44 | "mysql": "2.18.1", | 44 | "mysql": "2.18.1", |
45 | "node-fetch": "^2.6.1", | 45 | "node-fetch": "^2.6.1", |
46 | "pg": "^8.0.3", | 46 | "pg": "^8.0.3", |
47 | "semver": "7.3.5", | ||
47 | "sqlite3": "^4.1.0", | 48 | "sqlite3": "^4.1.0", |
48 | "targz": "^1.0.1", | 49 | "targz": "^1.0.1", |
49 | "uuid": "^8.3.2" | 50 | "uuid": "^8.3.2" |