anon.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const { buildSchema } = require('graphql');
  2. const jwt = require('jsonwebtoken')
  3. module.exports = ({Savable, secret}) => {
  4. class User extends Savable {
  5. }
  6. Savable.addClass(User)
  7. const anonResolvers = {
  8. createUser:async function ({login, password}){
  9. let user = await Savable.m.User.findOne({login, password})
  10. if (user)
  11. return null;
  12. user = await (new User({login, password})).save()
  13. user.___owner = user._id.toString()
  14. user.___permissions = {
  15. read: ["owner", "user"]
  16. }
  17. return await user.save()
  18. },
  19. login: async function({login, password}){
  20. console.log(Savable.classes)
  21. const user = await Savable.m.User.findOne({login, password})
  22. if (!user)
  23. return null;
  24. const token = jwt.sign({ sub: {id: user._id, login}}, secret); //подписывам токен нашим ключем
  25. return token
  26. },
  27. changePassword:async function ({login, password, newPassword}){
  28. const user = await Savable.m.User.findOne({login, password})
  29. if (!user) return null;
  30. user.password = newPassword;
  31. return await user.save()
  32. },
  33. }
  34. const anonSchema = buildSchema(`
  35. type Query {
  36. login(login: String!, password: String!): String
  37. }
  38. type Mutation {
  39. createUser(login: String!, password: String!): User
  40. changePassword(login: String!, password: String!, newPassword: String!): User
  41. }
  42. type User {
  43. _id: String
  44. createdAt: String
  45. login: String
  46. nick : String
  47. }
  48. `)
  49. return {anonResolvers, anonSchema}
  50. }