Készítő: Anorexic Marten, 4 éve frissítve, szöveg nyelve: TypoScript.
Ez a szöveg egy válasz a következőre: Névtelen készítő: jansovitez
- különbség megtekintése
Beágyazás:
  1. import * as alt from 'alt-server';
  2. import * as yup from 'yup';
  3. import bcrypt from 'bcryptjs';
  4. const { genSalt, hash } = bcrypt;
  5.  
  6. import { ServerCallback } from '../helpers/Callback';
  7.  
  8. import { Positions } from '../config/Positions';
  9.  
  10. // DTO
  11. import { UserEntity } from '../entities/User';
  12. import { BanEntity } from '../entities/Ban';
  13. import { EVENTS } from '../../shared/enums/Events';
  14. import { setLocalMeta } from '../helpers/Player/Meta';
  15. import { randomPositionAround } from '../../shared/utility/Vector';
  16. import { ADMIN_PERMISSIONS } from '../../shared/enums/Admin';
  17.  
  18. const AuthLoginSchema = yup.object().shape({
  19.     username: yup.string().required().min(4).max(16),
  20.     password: yup.string().required().min(6).max(32),
  21. });
  22.  
  23. const AuthRegistrationSchema = yup.object().shape({
  24.     username: yup.string().required().min(4).max(16),
  25.     password: yup.string().required().min(6).max(32),
  26. });
  27.  
  28. interface LoginCredentials {
  29.     username: string;
  30.     password: string;
  31. }
  32.  
  33. interface RegisterCredentials {
  34.     username: string;
  35.     password: string;
  36.     email: string;
  37. }
  38.  
  39. export class Auth {
  40.     constructor() {
  41.         new ServerCallback(EVENTS.AUTH_LOGIN, this.onLogin, AuthLoginSchema);
  42.         new ServerCallback(EVENTS.AUTH_REGISTER, this.onRegister, AuthRegistrationSchema);
  43.     }
  44.  
  45.     private async onLogin(player: alt.Player, done, { username, password }: LoginCredentials) {
  46.         const User = await UserEntity.findOne({ where: { username } });
  47.  
  48.         if (!User) {
  49.             done({
  50.                 success: false,
  51.                 error: 'user_not_found',
  52.             });
  53.             return;
  54.         }
  55.  
  56.         const hashedPassword = await hash(password, User.salt);
  57.  
  58.         if (User.password != hashedPassword) {
  59.             done({ success: false, error: 'incorrect_password' });
  60.             return;
  61.         }
  62.  
  63.         if (User.socialId != player.socialID) {
  64.             done({ success: false, error: 'socialid_mismatch' });
  65.             return;
  66.         }
  67.  
  68.         const Ban = await BanEntity.findOne({ where: { username, socialId: player.socialID } });
  69.  
  70.         if (Ban) {
  71.             player.kick(
  72.                 `You have been banned by ${Ban.admin}!\nReason: ${Ban.reason}\nBan date:${Ban.ban_date}\nExpiration date: ${Ban.expire_date}`
  73.             );
  74.  
  75.             return;
  76.         }
  77.  
  78.         player.setMeta('logged', true);
  79.         player.setSyncedMeta('logged', true);
  80.  
  81.         setLocalMeta(player, 'inQueue', false);
  82.  
  83.         player.setMeta('admin', ADMIN_PERMISSIONS[User.admin]);
  84.         player.setSyncedMeta('admin', ADMIN_PERMISSIONS[User.admin]);
  85.  
  86.         setLocalMeta(player, 'stats', User.stats);
  87.         setLocalMeta(player, 'skins', User.skins);
  88.         setLocalMeta(player, 'vehicles', User.vehicles);
  89.         setLocalMeta(player, 'weapons', User.weapons);
  90.  
  91.         const { x, y, z } = randomPositionAround(Positions.LOBBY_POSITION, 10);
  92.  
  93.         const lobbySkin = Object.keys(User.skins.runner).find((x) => User.skins.runner[x] === true);
  94.  
  95.         player.model = lobbySkin;
  96.         player.spawn(x, y, z, 0);
  97.         player.maxHealth = 200;
  98.  
  99.         done({ success: true });
  100.     }
  101.  
  102.     private async onRegister(player: alt.Player, done, { username, password, email }: RegisterCredentials) {
  103.         const HasUser = await UserEntity.findOne({ where: { username, socialId: player.socialID, email } });
  104.  
  105.         if (HasUser) {
  106.             if (HasUser.username == username) done({ success: false, error: 'username_already_taken' });
  107.             if (HasUser.email == email) done({ success: false, error: 'email_already_associated_with_account' });
  108.             if (HasUser.socialId == player.socialID)
  109.                 done({ success: false, error: 'socialid_already_associated_with_account' });
  110.  
  111.             return;
  112.         }
  113.  
  114.         const salt = await genSalt(6),
  115.             hashedPassword = await hash(password, salt);
  116.  
  117.         UserEntity.insert({
  118.             username,
  119.             password: hashedPassword,
  120.             salt,
  121.             socialId: player.socialID,
  122.             email,
  123.         })
  124.             .then((result) => done({ success: true }))
  125.             .catch((error) => {
  126.                 console.log(error);
  127.                 done({ success: false, error: 'idk' });
  128.             });
  129.     }
  130. }
  131.  
  132. new Auth();
  133.