| |
@@ -0,0 +1,103 @@
|
| |
+ from __future__ import unicode_literals, absolute_import
|
| |
+
|
| |
+ import irc.client
|
| |
+ import flask
|
| |
+ from .utils import SessionEventLogger
|
| |
+
|
| |
+
|
| |
+ def check_avail_view():
|
| |
+ nickname = flask.request.args.get("nickname")
|
| |
+ if not nickname:
|
| |
+ return flask.jsonify({
|
| |
+ "status": "ERROR",
|
| |
+ "msg": "You must supply a nickname to check."
|
| |
+ })
|
| |
+ reactor = irc.client.Reactor()
|
| |
+ try:
|
| |
+ server = reactor.server().connect(
|
| |
+ 'irc.freenode.net',
|
| |
+ 6667,
|
| |
+ nickname)
|
| |
+ except irc.client.ServerConnectionError:
|
| |
+ print(sys.exc_info()[1])
|
| |
+ return flask.jsonify({
|
| |
+ 'status': 'ERROR'
|
| |
+ })
|
| |
+ events = SessionEventLogger()
|
| |
+ server.add_global_handler('nicknameinuse', events.on("nicknameinuse"))
|
| |
+ server.add_global_handler('welcome', events.on("nickav_connect"))
|
| |
+ while server.connected:
|
| |
+ if events.has_happened("nicknameinuse"):
|
| |
+ events.forget("nicknameinuse")
|
| |
+ server.close()
|
| |
+ return flask.jsonify({
|
| |
+ 'status': 'ERROR',
|
| |
+ 'msg': 'Nickname in use',
|
| |
+ })
|
| |
+ if events.has_happened("nickav_connect"):
|
| |
+ events.forget("nickav_connect")
|
| |
+ server.close()
|
| |
+ return flask.jsonify({
|
| |
+ 'status': 'OK',
|
| |
+ 'msg': 'Nickname in available',
|
| |
+ })
|
| |
+ reactor.process_once()
|
| |
+
|
| |
+
|
| |
+ def register_nick_view():
|
| |
+ request_data = flask.request.get_json()
|
| |
+ try:
|
| |
+ nickname = request_data["nickname"]
|
| |
+ password = request_data["password"]
|
| |
+ email = request_data["email"]
|
| |
+ except KeyError as e:
|
| |
+ return flask.jsonify({
|
| |
+ "status": "ERROR",
|
| |
+ "msg": str(e),
|
| |
+ })
|
| |
+ reactor = irc.client.Reactor()
|
| |
+ try:
|
| |
+ server = reactor.server().connect(
|
| |
+ 'irc.freenode.net',
|
| |
+ 6667,
|
| |
+ nickname
|
| |
+ )
|
| |
+ except irc.client.ServerConnectionError:
|
| |
+ return flask.jsonify({
|
| |
+ 'status': 'ERROR'
|
| |
+ })
|
| |
+
|
| |
+ def register_nick(connection):
|
| |
+ connection.privmsg(
|
| |
+ "NickServ",
|
| |
+ "register {password} {email}".format(
|
| |
+ password=password, email=email)
|
| |
+ )
|
| |
+ return 'NO_ERROR'
|
| |
+
|
| |
+ server.add_global_handler('nicknameinuse', events.on("nicknameinuse"))
|
| |
+ server.add_global_handler(
|
| |
+ 'welcome', events.on("welcome", cb_next=register_nick))
|
| |
+ # TODO: check the answer from NickServ
|
| |
+
|
| |
+ while server.connected:
|
| |
+ if events.has_happened("nicknameinuse"):
|
| |
+ events.forget("nicknameinuse")
|
| |
+ server.close()
|
| |
+ return flask.jsonify({
|
| |
+ 'status': 'ERROR',
|
| |
+ 'msg': 'Nickname in use'
|
| |
+ })
|
| |
+
|
| |
+ if events.has_happened("welcome"):
|
| |
+ events.forget("welcome")
|
| |
+ # TODO: this should actually be a check for a positive answer
|
| |
+ # from NickServ
|
| |
+ server.close()
|
| |
+ return flask.jsonify({
|
| |
+ 'status': 'OK',
|
| |
+ 'msg': 'Nickname has been registered',
|
| |
+ })
|
| |
+
|
| |
+ reactor.process_once()
|
| |
+ register_nick_view.methods = ["POST"]
|
| |