保誠-保戶業務員媒合平台
Mila
2024-12-26 078cdb2b41d1dec47e2d981c2d2e618d12beddb4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import { AxiosResponse } from 'axios';
import forge from "node-forge";
import { http } from "./httpClient";
// import CryptoJS from "asmcrypto-js";
 
import { ConsultantLoginInfo } from "../models/ConsultantLoginInfo";
import { LoginRequest } from "../models/loginRequest.model";
import { LoginSuccessToken } from "../models/loginSuccessToken.model";
import { LoginVerify } from "../models/loginVerify.model";
import { OtpInfo } from "../models/otpInfo.model";
import { RegisterInfo } from "../models/registerInfo";
 
class LoginService {
    /** 顧客登入-發送OTP **/
    async sendOtp(loginInfo: LoginRequest, verifyCode: string): Promise<OtpInfo> {
      try {
        const response = await http.post(`/otp/sendOtp/${verifyCode}`, loginInfo);
        // 弱掃Test1: 改為 if (response)
        if (response) {
          return response.data;
        } else {
          throw new Error('http.post returned null-like value.');
        }
      } catch (error) {
        console.error('An error occurred while sending OTP:', error);
        // 可以在此處處理錯誤或回傳預設值
        throw error;
      }
    }
 
 
  /**
   * 顧客登入-驗證OTP
   * @param loginVerify 包含驗證相關資訊的物件
   * @returns 回傳驗證成功後的Token
   */
  async loginVerify(loginVerify: LoginVerify): Promise<LoginSuccessToken> {
    try {
      const response = await http.post('/otp/verify', loginVerify);
      if (response !== null) {
        return response.data;
      } else {
        throw new Error('http.post returned null-like value.');
      }
    } catch (error) {
      // 可以在此處處理錯誤或回傳預設值
      console.error('An error occurred while verifying OTP:', error);
      throw error;
    }
  }
 
  /** 顧客註冊 **/
  async register(registerInfo: RegisterInfo): Promise<LoginSuccessToken> {
    try {
      const response = await http.post('/otp/register', registerInfo);
      if (response !== null) {
        return response.data;
      } else {
        throw new Error('http.post returned null-like value.');
      }
    } catch (error) {
      console.error('An error occurred while registering:', error);
      // 可以在此處處理錯誤或回傳預設值
      throw error;
    }
  }
 
 
  /** 取得驗證碼圖片 **/
  async getImgOfVerification():Promise<string>{
    return http.get('/login/validate/get_img_code',{ responseType : 'arraybuffer' })
      .then( response => {
        const toBase64 = window.btoa(
                          Array.from(new Uint8Array(response.data)).reduce((data, byte) =>
                            data + String.fromCharCode(byte), '')
                        );
        const imgSrc = `data:image/jpeg;base64,${toBase64}`;
        return imgSrc;
    });
  }
 
  /** 驗證碼-驗證 **/
  getVerificationStatus(imgCode:string):Promise<AxiosResponse<boolean>>{
    return http.get('/login/validate/verify_img_code/'+imgCode);
  }
 
  /** 顧問登入 **/
  logInToConsultant(consultantDto:ConsultantLoginInfo, verificationCode: string):Promise<AxiosResponse<LoginSuccessToken>>{
 
  const iv = "0123456789abcdef";
  const key = "PAMKEY1234567890";
  const cipher = forge.cipher.createCipher('AES-GCM', key);
  cipher.start({
    iv:iv
  });
  cipher.update(forge.util.createBuffer(forge.util.encodeUtf8(consultantDto.password)));
  cipher.finish();
  const encry = cipher.output;
  var tag = cipher.mode.tag;
  const encryptedPassword = window.btoa(encry.data+tag.data);
 
    return http.post(`/eService/authenticate/${verificationCode}`, { ...consultantDto, password: encryptedPassword});
  }
 
  /**
   * 顧問登入 - 發送 otp
   * @param agentNo
   * @returns OtpInfo
   */
  async sentOtpWithConsultant(agentNo: string): Promise<OtpInfo> {
    try {
      const response = await http.post(`/otp/consultant/sendOtp/${agentNo}`);
      // 弱掃Test1: 改為 if (response)
      if (response) {
        return response.data;
      } else {
        throw new Error('http.post returned null-like value.');
      }
    } catch (error) {
      console.error('An error occurred while sending OTP:', error);
      // 可以在此處處理錯誤或回傳預設值
      throw error;
    }
  }
 
    /**
   * 顧問登入-驗證OTP
   * @param loginVerify 包含驗證相關資訊的物件
   * @returns 回傳驗證成功後的Token
   */
    async loginVerifyWithConsultant(loginVerify: LoginVerify): Promise<LoginSuccessToken> {
      try {
        const response = await http.post('/otp/consultant/verifyOtp', loginVerify);
        if (response !== null) {
          return response.data;
        } else {
          throw new Error('http.post returned null-like value.');
        }
      } catch (error) {
        // 可以在此處處理錯誤或回傳預設值
        console.error('An error occurred while verifying OTP:', error);
        throw error;
      }
    }
 
    async logout(): Promise<void> {
      return http.post('/logout');
    }
}
 
export default new LoginService();