From 95b1ab0dec062a8c49d279de7b8ac02e73b1ae3d Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Wed, 3 Mar 2021 21:09:37 -0900 Subject: [PATCH] Feature/authentication (#195) * basic crud NOT SECURE * refactor/database init on startup * added scratch.py * tests/user CRUD routes * password hashing * change app_config location * bump python version * formatting * login ui starter * change import from url design * move components * remove old snackbar * refactor/Componenet folder structure rework * refactor/remove old code * refactor/rename componenets/js files * remove console.logs * refactor/ models to schema and sql to models * new header styling for imports * token request * fix url scrapper * refactor/rename schema files * split routes file * redesigned admin page * enable relative imports for vue components * refactor/switch to pages view * add CamelCase package * majors settings rework * user management second pass * super user CRUD * refactor/consistent models names * refactor/consistent model names * password reset * store refactor * dependency update * abstract button props * profile page refactor * basic password validation * login form refactor/split v-container * remo unused code * hide editor buttons when not logged in * mkdocs dev dependency * v0.4.0 docs update * profile image upload * additional token routes * Smaller recipe cards for smaller viewports * fix admin sidebar * add users * change to outlined * theme card starter * code cleanup * signups * signup pages * fix #194 * fix #193 * clarify mealie_port * fix #184 * fixes #178 * fix blank card error on meal-plan creator * admin signup Co-authored-by: hay-kot --- Caddyfile | 1 + docs/docs/getting-started/install.md | 12 +- frontend/src/App.vue | 2 + frontend/src/api/index.js | 7 +- frontend/src/api/signUps.js | 30 ++ frontend/src/api/users.js | 1 + .../Admin/ManageUsers/TheGroupTable.vue | 252 ++++++++++++++++ .../Admin/ManageUsers/TheSignUpTable.vue | 239 +++++++++++++++ .../Admin/ManageUsers/TheUserTable.vue | 252 ++++++++++++++++ .../components/Admin/Theme/NewThemeDialog.vue | 28 +- .../src/components/Admin/Theme/ThemeCard.vue | 84 ++++++ frontend/src/components/Login/LoginForm.vue | 8 +- frontend/src/components/Login/SignUpForm.vue | 139 +++++++++ .../src/components/MealPlan/MealPlanNew.vue | 5 +- .../components/Recipe/MobileRecipeCard.vue | 10 +- .../src/components/Recipe/RecipeTimeCard.vue | 1 + .../src/pages/Admin/ManageUsers/index.vue | 281 +++--------------- frontend/src/pages/Admin/Theme/index.vue | 120 +++----- frontend/src/pages/MealPlanPage.vue | 6 +- frontend/src/pages/SignUpPage.vue | 41 +++ frontend/src/routes/index.js | 3 + mealie/db/database.py | 8 + mealie/db/models/_all_models.py | 1 + mealie/db/models/sign_up.py | 29 ++ mealie/routes/deps.py | 3 +- mealie/routes/meal_routes.py | 3 +- mealie/routes/users/sign_up.py | 86 ++++++ mealie/routes/users/users.py | 3 +- mealie/schema/sign_up.py | 14 + mealie/services/scraper/cleaner.py | 8 +- 30 files changed, 1323 insertions(+), 354 deletions(-) create mode 100644 frontend/src/api/signUps.js create mode 100644 frontend/src/components/Admin/ManageUsers/TheGroupTable.vue create mode 100644 frontend/src/components/Admin/ManageUsers/TheSignUpTable.vue create mode 100644 frontend/src/components/Admin/ManageUsers/TheUserTable.vue create mode 100644 frontend/src/components/Admin/Theme/ThemeCard.vue create mode 100644 frontend/src/components/Login/SignUpForm.vue create mode 100644 frontend/src/pages/SignUpPage.vue create mode 100644 mealie/db/models/sign_up.py create mode 100644 mealie/routes/users/sign_up.py create mode 100644 mealie/schema/sign_up.py diff --git a/Caddyfile b/Caddyfile index a24ecb85f..19c18a3b0 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,5 +1,6 @@ { auto_https off + admin off } :80 { diff --git a/docs/docs/getting-started/install.md b/docs/docs/getting-started/install.md index 9be2ed5e7..fb5295712 100644 --- a/docs/docs/getting-started/install.md +++ b/docs/docs/getting-started/install.md @@ -41,12 +41,12 @@ services: ## Env Variables -| Variables | default | description | -| ----------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| db_type | sqlite | The database type to be used. Current Options 'sqlite' | -| mealie_port | 9000 | The port exposed by mealie. **do not change this if you're running in docker** If you'd like to use another port, map 9000 to another port of the host. | -| api_docs | True | Turns on/off access to the API documentation locally. | -| TZ | UTC | You should set your time zone accordingly so the date/time features work correctly | +| Variables | default | description | +| ----------- | ------- | ----------------------------------------------------------------------------------- | +| db_type | sqlite | The database type to be used. Current Options 'sqlite' | +| mealie_port | 9000 | The port exposed by backend API. **do not change this if you're running in docker** | +| api_docs | True | Turns on/off access to the API documentation locally. | +| TZ | UTC | You should set your time zone accordingly so the date/time features work correctly | ## Deployed as a Python Application diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 3c6f48bcc..908ef3e0a 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -86,6 +86,8 @@ export default { search: false, }), methods: { + // For Later! + /** * Checks if 'system' is set for dark mode and then sets the corrisponding value for vuetify */ diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index 0082dba12..0caf3b76d 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -7,8 +7,8 @@ import migration from "./migration"; import myUtils from "./upload"; import category from "./category"; import meta from "./meta"; -import users from "./users" - +import users from "./users"; +import signUps from "./signUps"; export default { recipes: recipe, @@ -20,5 +20,6 @@ export default { utils: myUtils, categories: category, meta: meta, - users: users + users: users, + signUps: signUps, }; diff --git a/frontend/src/api/signUps.js b/frontend/src/api/signUps.js new file mode 100644 index 000000000..1948f4496 --- /dev/null +++ b/frontend/src/api/signUps.js @@ -0,0 +1,30 @@ +import { baseURL } from "./api-utils"; +import { apiReq } from "./api-utils"; + +const signUpPrefix = baseURL + "users/sign-ups"; + +const signUpURLs = { + all: `${signUpPrefix}`, + createToken: `${signUpPrefix}`, + deleteToken: token => `${signUpPrefix}/${token}`, + createUser: token => `${signUpPrefix}/${token}`, +}; + +export default { + async getAll() { + let response = await apiReq.get(signUpURLs.all); + return response.data; + }, + async createToken(data) { + let response = await apiReq.post(signUpURLs.createToken, data); + return response.data; + }, + async deleteToken(token) { + let response = await apiReq.delete(signUpURLs.deleteToken(token)); + return response.data; + }, + async createUser(token, data) { + let response = await apiReq.post(signUpURLs.createUser(token), data); + return response.data; + }, +}; diff --git a/frontend/src/api/users.js b/frontend/src/api/users.js index 90123e733..14881e33c 100644 --- a/frontend/src/api/users.js +++ b/frontend/src/api/users.js @@ -7,6 +7,7 @@ const authURLs = { token: `${authPrefix}/token`, }; + const usersURLs = { users: `${userPrefix}`, self: `${userPrefix}/self`, diff --git a/frontend/src/components/Admin/ManageUsers/TheGroupTable.vue b/frontend/src/components/Admin/ManageUsers/TheGroupTable.vue new file mode 100644 index 000000000..d81ec2e02 --- /dev/null +++ b/frontend/src/components/Admin/ManageUsers/TheGroupTable.vue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/Admin/ManageUsers/TheSignUpTable.vue b/frontend/src/components/Admin/ManageUsers/TheSignUpTable.vue new file mode 100644 index 000000000..77abffc93 --- /dev/null +++ b/frontend/src/components/Admin/ManageUsers/TheSignUpTable.vue @@ -0,0 +1,239 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/Admin/ManageUsers/TheUserTable.vue b/frontend/src/components/Admin/ManageUsers/TheUserTable.vue new file mode 100644 index 000000000..862e796ab --- /dev/null +++ b/frontend/src/components/Admin/ManageUsers/TheUserTable.vue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/Admin/Theme/NewThemeDialog.vue b/frontend/src/components/Admin/Theme/NewThemeDialog.vue index f9b7f8d74..af072170b 100644 --- a/frontend/src/components/Admin/Theme/NewThemeDialog.vue +++ b/frontend/src/components/Admin/Theme/NewThemeDialog.vue @@ -1,9 +1,22 @@