Keep track of user registration status

This commit is contained in:
Les De Ridder 2017-03-17 15:48:59 +01:00
parent 88c8a99bb7
commit 42fa3a0c8c
No known key found for this signature in database
GPG Key ID: 5EC132DFA85DB372
1 changed files with 33 additions and 8 deletions

View File

@ -30,6 +30,8 @@ class Connection
@property auto channels() { return _server.channels.filter!(c => c.members.canFind(this)); } @property auto channels() { return _server.channels.filter!(c => c.members.canFind(this)); }
@property bool registered() { return nick !is null && user !is null; }
bool connected; bool connected;
this(TCPConnection connection, Server server) this(TCPConnection connection, Server server)
@ -114,13 +116,16 @@ class Connection
onQuit(message); onQuit(message);
break; break;
case "JOIN": case "JOIN":
onJoin(message); if(!registered) sendErrNotRegistered();
else onJoin(message);
break; break;
case "PART": case "PART":
onPart(message); if(!registered) sendErrNotRegistered();
else onPart(message);
break; break;
case "PRIVMSG": case "PRIVMSG":
onPrivMsg(message); if(!registered) sendErrNotRegistered();
else onPrivMsg(message);
break; break;
default: default:
writeln("unknown command '", message.command, "'"); writeln("unknown command '", message.command, "'");
@ -154,8 +159,15 @@ class Connection
send(Message(nick, "NICK", [newNick])); send(Message(nick, "NICK", [newNick]));
} }
//TODO: Check availablity and validity etc. auto wasRegistered = registered;
//TODO: Check validity etc.
nick = newNick; nick = newNick;
if(!wasRegistered)
{
sendWelcome();
}
} }
void onUser(Message message) void onUser(Message message)
@ -178,10 +190,10 @@ class Connection
realname = message.parameters[3]; realname = message.parameters[3];
hostname = getHost(); hostname = getHost();
send(Message(_server.name, "001", [nick, "Welcome to the Internet Relay Network " ~ mask], true)); if(registered)
send(Message(_server.name, "002", [nick, "Your host is " ~ _server.name ~ ", running version " ~ _server.versionString], true)); {
send(Message(_server.name, "003", [nick, "This server was created " ~ _server.creationDate], true)); sendWelcome();
send(Message(_server.name, "004", [nick, _server.name, _server.versionString, "w", "snt"])); }
} }
void onQuit(Message message) void onQuit(Message message)
@ -311,11 +323,24 @@ class Connection
send(Message(_server.name, "431", [nick, "No nickname given"], true)); send(Message(_server.name, "431", [nick, "No nickname given"], true));
} }
void sendErrNotRegistered()
{
send(Message(_server.name, "451", ["(You)", "You have not registered"], true));
}
void sendErrNeedMoreParams(string command) void sendErrNeedMoreParams(string command)
{ {
send(Message(_server.name, "461", [nick, command, "Not enough parameters"], true)); send(Message(_server.name, "461", [nick, command, "Not enough parameters"], true));
} }
void sendWelcome()
{
send(Message(_server.name, "001", [nick, "Welcome to the Internet Relay Network " ~ mask], true));
send(Message(_server.name, "002", [nick, "Your host is " ~ _server.name ~ ", running version " ~ _server.versionString], true));
send(Message(_server.name, "003", [nick, "This server was created " ~ _server.creationDate], true));
send(Message(_server.name, "004", [nick, _server.name, _server.versionString, "w", "snt"]));
}
string getHost() string getHost()
{ {
auto address = parseAddress(_connection.peerAddress); auto address = parseAddress(_connection.peerAddress);