Files
herolib/lib/servers/mail/imap/cmd_login.v
2025-02-16 07:49:06 +03:00

34 lines
1.0 KiB
V

module imap
import net
// handle_login processes the LOGIN command
// See RFC 3501 Section 6.2.3
pub fn (mut self Session) handle_login(tag string, parts []string) ! {
// Check if LOGINDISABLED is advertised
if self.capabilities.contains('LOGINDISABLED') {
self.conn.write('${tag} NO [PRIVACYREQUIRED] LOGIN disabled\r\n'.bytes())!
return
}
if parts.len < 4 {
self.conn.write('${tag} BAD LOGIN requires username and password\r\n'.bytes())!
return
}
username := parts[2]
password := parts[3]
// TODO: Implement actual authentication
// For demo purposes, accept any username/password
// In real implementation:
// 1. Validate credentials
// 2. If invalid, return: NO [AUTHENTICATIONFAILED] Authentication failed
// 3. If valid but can't authorize, return: NO [AUTHORIZATIONFAILED] Authorization failed
// After successful login:
// 1. Send capabilities in OK response
// 2. Don't include LOGINDISABLED or STARTTLS in capabilities after login
self.conn.write('${tag} OK [CAPABILITY IMAP4rev2 AUTH=PLAIN] LOGIN completed\r\n'.bytes())!
}