app.service.ts 4.31 KiB
import { Injectable } from '@nestjs/common';
import * as CryptoJS from 'crypto';
import { dbConnector } from './db/db.module';
import { ConnectionPool } from 'mssql';
@Injectable()
export class AppService {
  dbConnection: ConnectionPool = null;
  constructor(private conn: dbConnector) {
    console.log(
      process.env.MSSQL_USER,
      process.env.MSSQL_SERVER,
      process.env.MSSQL_DATABASE,
      process.env.MSSQL_PASSWORD,
      process.env.MSSQL_PORT,
    this.dbConnection = conn.getConnectionPool(
      process.env.MSSQL_USER,
      process.env.MSSQL_SERVER,
      process.env.MSSQL_DATABASE,
      process.env.MSSQL_PASSWORD,
      parseInt(process.env.MSSQL_PORT),
  // async mysqlCallStoredProcedure(msg: string) {
  //returns a promise that resolves to a result set on success
  //   const execSql = (statement) => {
  //     const p = new Promise((res, rej) => {
  //       this.conn.query(statement, function (err, result) {
  //         if (err) rej(err);
  //         else res(result);
  //       });
  //     });
  //     return p;
  //   };
  //   const res = await execSql('call getTest()');
  //   return res;
  // }
  async mssqlCallStoredProcedure(username: string) {
    //returns a promise that resolves to a result set on success
    const db = await this.dbConnection.connect();
    const res = await db.query(`EXEC get_user  @Username = N'${username}'`);
    console.log(res);
    return { pass: res['recordset'][0]['Password'] };
  parseQueryResponse(res) {
    const nres = [];
    res.recordset.forEach((element) => {
      delete element.Password;
      delete element.IsActive;
      delete element.CreatedBy;
      delete element.LastModifiedBy;
      delete element.LastModifiedOn;
      delete element.UserKey;
      delete element.Code;
      delete element.UserType;
      delete element.CreatedOn;
      delete element.PasswordIsModified;
      const [firstName, lastName] = element.Name.split(' ');
      element.FirstName = firstName;
      element.lastName = lastName;
      const lowerCase = (str) => str[0].toLowerCase() + str.slice(1);
      const nelement = Object.fromEntries(
        Object.entries(element).map(([k, v]) => [lowerCase(k), v]),
      nelement.roles = ['USER'];
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
nres.push(nelement); }); return nres; } async getUsers(search: string, first: number, max: number) { const db = await this.dbConnection.connect(); const res = this.parseQueryResponse( await db.query(`SELECT * FROM upsmfac_casa.dbo.Master_user`), ); return res; } async getUsersCount() { const db = await this.dbConnection.connect(); const res = await db.query( `SELECT COUNT(UserKey) as count FROM Master_user`, ); return res.recordset[0].count; } async getUserById(username: string) { const db = await this.dbConnection.connect(); const res = this.parseQueryResponse( await db.query( `SELECT * FROM upsmfac_casa.dbo.Master_user where username = N'${username}'`, ), ); return res[0]; } async getUserCredentials(username: string) { const db = await this.dbConnection.connect(); const res = await db.query( `SELECT * FROM upsmfac_casa.dbo.Master_user where username = N'${username}'`, ); const saltRounds = 1000; const cred_res = []; res.recordset.forEach((ele) => { // const salt = bcrypt.genSaltSync(saltRounds); const salt = CryptoJS.randomBytes(32); const hash = CryptoJS.pbkdf2Sync( ele.Password, salt, saltRounds, 64, 'sha256', ); // const hash = bcrypt.hashSync(ele.Password, salt); cred_res.push({ value: hash.toString('base64'), salt: salt.toString('base64'), algorithm: 'pbkdf2-sha256', iterations: saltRounds, type: 'password', }); }); return cred_res[0]; } async getTutorById(id: string) { const db = await this.dbConnection.connect(); const res = await db.query( `Select * from upsmfac_casa.dbo.Master_Tutor_Basic_Info where TutorKey='${id}'`, ); return res.recordset[0]; } async getStudentById(id: string) { const db = await this.dbConnection.connect();
141142143144145146147
const res = await db.query( `Select * from upsmfac_casa.dbo.Master_StudentProfile where StudentProfileKey='${id}'`, ); return res.recordset[0]; } }