/*
OrpheusMS: MapleStory Private Server based on OdinMS
Copyright (C) 2012 Aaron Weiss <aaron@deviant-core.net>
Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.server.handlers.login;
import client.AutoRegister;
import client.MapleClient;
import java.util.Calendar;
import net.MaplePacketHandler;
import net.server.Server;
import server.TimerManager;
import tools.DateUtil;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class LoginPasswordHandler implements MaplePacketHandler {
@Override
public boolean validateState(MapleClient c) {
return !c.isLoggedIn();
}
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int loginok = 0;
String login = slea.readMapleAsciiString();
String pwd = slea.readMapleAsciiString();
c.setAccountName(login);
if (AutoRegister.getAccountExists(login)) {
loginok = c.login(login, pwd);
} else if (!AutoRegister.wasSuccessful()) {
AutoRegister.createAccount(login, pwd, c.getSession().getRemoteAddress().toString());
if (AutoRegister.wasSuccessful()) {
loginok = c.login(login, pwd);
}
} else {
loginok = c.login(login, pwd);
}
if (c.hasBannedIP() || c.hasBannedMac()) {
c.announce(MaplePacketCreator.getLoginFailed(3));
}
Calendar tempban = c.getTempBanCalendar();
if (tempban != null) {
if (tempban.getTimeInMillis() > System.currentTimeMillis()) {
long till = DateUtil.getFileTimestamp(tempban.getTimeInMillis());
c.announce(MaplePacketCreator.getTempBan(till, c.getGReason()));
return;
}
}
if (loginok == 3) {
c.announce(MaplePacketCreator.getPermBan(c.getGReason()));
return;
} else if (loginok != 0) {
c.announce(MaplePacketCreator.getLoginFailed(loginok));
return;
}
if (!c.isDeveloper() && Server.getInstance().isDebugging()) {
c.announce(MaplePacketCreator.getLoginFailed(7));
}
if (c.finishLogin() == 0) {
c.announce(MaplePacketCreator.getAuthSuccess(c));
final MapleClient client = c;
client.saveLastKnownIP();
c.setIdleTask(TimerManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
client.disconnect();
}
}, 600000));
} else {
c.announce(MaplePacketCreator.getLoginFailed(7));
}
}
}