Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

vor 2 Jahren
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const AuthProvider = require('./provider');
  2. class DatabaseProvider extends AuthProvider {
  3. constructor(app, opts, name) {
  4. super(app, opts, name);
  5. this.users = opts.users;
  6. this.perms = opts.permissions;
  7. this.db = app.getDbConnection(opts.connection);
  8. }
  9. async validate(username, password, passwordVerify) {
  10. if (!username) return false;
  11. if (!password) password = '';
  12. let results = await this.db
  13. .select(this.users.identity, this.users.username, this.users.password)
  14. .from(this.users.table)
  15. .where(this.users.username, username);
  16. for (let result of results) {
  17. if (result[this.users.username] == username) {
  18. if (passwordVerify && result[this.users.password].startsWith('$')) {
  19. const argon2 = require('argon2');
  20. const valid = await argon2.verify(result[this.users.password], password);
  21. return valid ? result[this.users.identity] : false;
  22. } else if (result[this.users.password] == password) {
  23. return result[this.users.identity];
  24. }
  25. }
  26. }
  27. return false;
  28. }
  29. async permissions(identity, permissions) {
  30. for (let permission of permissions) {
  31. if (!this.perms[permission]) return false;
  32. let perm = this.perms[permission];
  33. let table = perm.table || this.users.table;
  34. let ident = perm.identity || this.users.identity;
  35. let results = await this.db
  36. .select(ident)
  37. .from(table)
  38. .where(ident, identity)
  39. .where(function() {
  40. for (let condition of perm.conditions) {
  41. if (condition.operator == 'in') {
  42. this.whereIn(condition.column, condition.value);
  43. } else if (condition.operator == 'not in') {
  44. this.whereNotIn(condition.column, condition.value);
  45. } else if (condition.operator == 'is null') {
  46. this.whereNull(condition.column);
  47. } else if (condition.operator == 'is not null') {
  48. this.whereNotNull(condition.column);
  49. } else {
  50. this.where(condition.column, condition.operator, condition.value);
  51. }
  52. }
  53. });
  54. if (!results.length) return false;
  55. }
  56. return true;
  57. }
  58. }
  59. module.exports = DatabaseProvider;