import { http } from "./httpClient";
|
import { AxiosResponse } from 'axios';
|
import _ from "lodash";
|
import CryptoJS from "crypto-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);
|
if (response !== null) {
|
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(
|
_.reduce( new Uint8Array(response.data),(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 key = "PAMKEY1234567890";
|
const iv = "0123456789abcdef";
|
|
const keyBytes = CryptoJS.enc.Utf8.parse(key);
|
const ivBytes = CryptoJS.enc.Utf8.parse(iv);
|
|
const encrypted = CryptoJS.AES.encrypt(consultantDto.password, keyBytes, {
|
iv: ivBytes,
|
mode: CryptoJS.mode.CBC,
|
padding: CryptoJS.pad.Pkcs7,
|
});
|
|
return http.post(`/eService/authenticate/${verificationCode}`, { ...consultantDto, password: encrypted.toString() });
|
}
|
|
async logout(): Promise<void> {
|
return http.post('/logout');
|
}
|
}
|
|
export default new LoginService();
|