73 lines
3.1 KiB
Java
73 lines
3.1 KiB
Java
package com.rit.whatsapp.handler;
|
|
|
|
import com.rit.whatsapp.model.UserState;
|
|
import com.rit.whatsapp.service.ImsApiService;
|
|
import com.rit.whatsapp.service.SessionService;
|
|
import com.rit.whatsapp.service.WhatsAppMessageService;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
@Component
|
|
public class LoginHandler {
|
|
|
|
private final WhatsAppMessageService messageService;
|
|
private final SessionService sessionService;
|
|
private final ImsApiService imsApiService;
|
|
private final StudentMenuHandler studentMenuHandler;
|
|
|
|
private final FacultyMenuHandler facultyMenuHandler;
|
|
|
|
@Autowired
|
|
public LoginHandler(WhatsAppMessageService messageService,
|
|
SessionService sessionService,
|
|
ImsApiService imsApiService,
|
|
StudentMenuHandler studentMenuHandler,
|
|
FacultyMenuHandler facultyMenuHandler) {
|
|
this.messageService = messageService;
|
|
this.sessionService = sessionService;
|
|
this.imsApiService = imsApiService;
|
|
this.studentMenuHandler = studentMenuHandler;
|
|
this.facultyMenuHandler = facultyMenuHandler;
|
|
}
|
|
|
|
public void startLoginFlow(String phoneNumber) {
|
|
sessionService.setUserState(phoneNumber, UserState.AWAITING_LOGIN_ID);
|
|
messageService.sendMessage(phoneNumber, "Welcome to RIT Digital Assistant! 🎓\n\nPlease enter your IMS User ID to login:");
|
|
}
|
|
|
|
public void handleLoginIdInput(String phoneNumber, String imsId) {
|
|
sessionService.setTempLoginId(phoneNumber, imsId);
|
|
sessionService.setUserState(phoneNumber, UserState.AWAITING_LOGIN_PASSCODE);
|
|
messageService.sendMessage(phoneNumber, "Thanks. Now, please enter your IMS Passcode:");
|
|
}
|
|
|
|
public void handlePasscodeInput(String phoneNumber, String passcode) {
|
|
String imsId = sessionService.getTempLoginId(phoneNumber);
|
|
|
|
messageService.sendMessage(phoneNumber, "Authenticating with IMS... ⏳");
|
|
|
|
ImsApiService.AuthResult result = imsApiService.authenticate(imsId, passcode);
|
|
|
|
if (result != null && result.token != null) {
|
|
// Authentication successful
|
|
sessionService.authenticateUser(phoneNumber, imsId, passcode, result);
|
|
sessionService.clearTempLoginId(phoneNumber);
|
|
sessionService.resetState(phoneNumber); // Reset the flow state
|
|
|
|
messageService.sendMessage(phoneNumber, "✅ Login Successful!");
|
|
|
|
// Show the main menu
|
|
if (result.isFaculty) {
|
|
facultyMenuHandler.sendMainMenu(phoneNumber);
|
|
} else {
|
|
studentMenuHandler.sendMainMenu(phoneNumber);
|
|
}
|
|
} else {
|
|
// Authentication failed
|
|
sessionService.clearTempLoginId(phoneNumber);
|
|
sessionService.setUserState(phoneNumber, UserState.AWAITING_LOGIN_ID);
|
|
messageService.sendMessage(phoneNumber, "❌ Login Failed. Invalid ID or Passcode. Please try again.\n\nEnter your IMS User ID:");
|
|
}
|
|
}
|
|
}
|