users.controller.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /**
  2. * This file contains all communication to Auth0's database
  3. */
  4. import { ManagementClient } from 'auth0';
  5. import dotenv from 'dotenv';
  6. import { deleteSettingOfUser } from "./settings.controller.js";
  7. import { deleteAllMealsOfUser } from "./meals.controllers.js";
  8. import { deleteAllPlansOfUser } from "./plans.controller.js";
  9. dotenv.config();
  10. const authConfig = {
  11. domain: process.env.AUTH0_DOMAIN,
  12. audience: process.env.AUTH0_AUDIENCE,
  13. clientId: process.env.AUTH0_CLIENT_ID,
  14. clientSecret: process.env.AUTH0_CLIENT_SECRET,
  15. };
  16. let managementAPI = new ManagementClient({
  17. domain: authConfig.domain,
  18. clientId: authConfig.clientId,
  19. clientSecret: authConfig.clientSecret
  20. });
  21. export const getAllUsers = async (req, res) => {
  22. managementAPI.getUsers()
  23. .then(function (users) {
  24. res.status(200).json(users);
  25. })
  26. .catch(function (err) {
  27. // console.log('error when finding users', err);
  28. res.status(404).json({ message: err.message });
  29. });
  30. }
  31. export const getUsersFromQuery = async (req, res) => {
  32. let query = req.params.query;
  33. console.log(query);
  34. let wildcardQuery = query;
  35. if (wildcardQuery.length >= 3) wildcardQuery = '*' + query; // add wildcard to the front (needs at least 3 characters)
  36. wildcardQuery += '*'; // add wildcard to back, for query options see https://auth0.com/docs/users/user-search/user-search-query-syntax
  37. /** metadata fields, like username, do not support wildcards yet. The username gets copied to the "normal" nickname field (and thus found als with wildcards),
  38. * only if the user is not logged in via OAuth. In that case, nicknames are invariable as they are set through the external Provider (like Google). */
  39. const capitalizedQuery = query.charAt(0).toUpperCase() + query.slice(1);
  40. const params = {
  41. q: 'name:' + wildcardQuery + ' OR nickname:' + wildcardQuery + ' OR user_metadata.username:' + query + ' OR user_metadata.username:' + capitalizedQuery,
  42. };
  43. console.log(params);
  44. managementAPI.getUsers(params)
  45. .then(function (users) {
  46. res.status(200).json(users);
  47. })
  48. .catch(function (err) {
  49. // console.log('error when finding users', err);
  50. res.status(404).json({ message: err.message });
  51. });
  52. }
  53. export const getUserById = async (req, res) => {
  54. let userId = req.params.id;
  55. managementAPI.getUser({ id: userId })
  56. .then(function (user) {
  57. res.status(200).json(user);
  58. })
  59. .catch(function (err) {
  60. // console.log('error when finding user', err);
  61. res.status(404).json({ message: err.message });
  62. });
  63. }
  64. export const updateUserMetadata = async (req, res) => {
  65. const newMetadata = req.body;
  66. const userId = req.params.id;
  67. const params = { id: userId };
  68. managementAPI.updateUserMetadata(params, newMetadata)
  69. .then(function (user) {
  70. // console.log('user metadata updated.', user);
  71. res.status(200).json(user);
  72. })
  73. .catch(function (err) {
  74. // console.log('error while updating user metadata', err);
  75. res.status(404).json({ message: err.message });
  76. });
  77. }
  78. export const updateUser = async (req, res) => {
  79. const newData = req.body;
  80. const userId = req.params.id;
  81. const params = { id: userId };
  82. managementAPI.updateUser(params, newData)
  83. .then(function (user) {
  84. // console.log('user updated.', user);
  85. res.status(200).json(user);
  86. })
  87. .catch(function (err) {
  88. // console.log('error while updating user', err);
  89. res.status(404).json({ message: err.message });
  90. });
  91. }
  92. export const deleteUser = async (req, res) => {
  93. const userId = req.params.id;
  94. const params = { id: userId };
  95. await deleteSettingOfUser(userId);
  96. await deleteAllPlansOfUser(userId);
  97. await deleteAllMealsOfUser(userId);
  98. managementAPI.deleteUser(params)
  99. .then(function () {
  100. console.log('user deleted for good.');
  101. res.status(200).json('account deleted');
  102. })
  103. .catch(function (err) {
  104. console.log('error while deleting user', err);
  105. res.status(404).json({ message: err.message });
  106. });
  107. }