def follow(self):
        testing = mainApi.mainApi(cherrypy.session['username'],
                                  cherrypy.session['password'])
        response = testing.decriptPrivateData(cherrypy.session['apiKey'],
                                              cherrypy.session['key'])
        friends = response["friends_usernames"]
        blocked = response["blocked_usernames"]

        count = 0

        for i in range(len(friends)):
            if (friends[i] == cherrypy.session['targetUser']):
                count = 1

        if (count == 0):
            friends.append(cherrypy.session['targetUser'])
            try:
                for i in range(len(blocked)):
                    if (blocked[i] == cherrypy.session['targetUser']):
                        blocked.remove(cherrypy.session['targetUser'])
            except:
                print("done")

        response["friends_usernames"] = friends
        response["blocked_usernames"] = blocked

        response = testing.addPrivateData(cherrypy.session['apiKey'],
                                          cherrypy.session['privateKey'],
                                          cherrypy.session['key'], response)
        raise cherrypy.HTTPRedirect('/pm?user='******'targetUser'])
 def keyGenerate(self):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     response = testing.addPubkey(cherrypy.session['apiKey'])
     if (response[0]["response"] == "ok"):
         cherrypy.session['current_prikey'] = response[1]
         cherrypy.session['current_pubkey'] = response[2]
    def block(self, friend=None):
        testing = mainApi.mainApi(cherrypy.session['username'],
                                  cherrypy.session['password'])
        response = testing.decriptPrivateData(cherrypy.session['apiKey'],
                                              cherrypy.session['key'])
        blocked = response["blocked_usernames"]
        friends = response["friends_usernames"]

        count = 0

        for i in range(len(blocked)):
            if (blocked[i] == friend):
                count = 1

        if (count == 0):
            blocked.append(friend)
            cherrypy.session['blocked'].append(friend)
            try:
                for i in range(len(friends)):
                    if (friends[i] == friend):
                        friends.remove(friend)
            except:
                print("done")

        response["blocked_usernames"] = blocked
        response["friends_usernames"] = friends
        response = testing.addPrivateData(cherrypy.session['apiKey'],
                                          cherrypy.session['privateKey'],
                                          cherrypy.session['key'], response)
        raise cherrypy.HTTPRedirect('/friends')
        return 0
    def pm(self, user="******"):
        cherrypy.session['targetUser'] = user
        Page = startHTML + "<H1> Private Message </H1><br/>"
        ApiApp.report(self, cherrypy.session['status'])
        Page += "<a href='/index'>Home</a></br></br>"
        Page += "Click on user's name to add them to friends list </br>"
        Page += "<H1><a href='follow'>" + user + "</a></H1> &nbsp;"
        Page += '<form action="/send" method="post" enctype="multipart/form-data">'
        Page += '<br/>'
        Page += 'Message : &nbsp <input style="height:50px"; type="text" name="pmessage"/>'
        Page += "&nbsp"
        Page += '<input type="submit" value="send"/></form>'
        testing = mainApi.mainApi(cherrypy.session['username'],
                                  cherrypy.session['password'])
        data = testing.decryptingPM(cherrypy.session['privateKey'], user)

        Page += "<div class='myBox'>"
        for i in range(len(data['message']) - 1, -1, -1):
            Page += data['message'][i] + "</br>"
            Page += "from &nbsp" + str(
                data['sender'][i]) + "&nbspat&nbsp" + str(
                    data['time'][i]) + "</br>"
        Page += "</div>"
        # except KeyError:
        #     Page += "Something went wrong, please log in again </br>"
        #     Page += "<a href='/index'>Login</a>"
        return Page
 def list_users(self):
     Page = startHTML + "<H1>Here are the online users:</H1><br/>"
     Page += "<H2> <a href='/index'> Home </a><br/>"
     try:
         testing = mainApi.mainApi(cherrypy.session['username'],
                                   cherrypy.session['password'])
         JSON_object = testing.listUsers(cherrypy.session['apiKey'])
         users_online = list()
         users_status = list()
         for i in range(len(JSON_object["users"])):
             sqlite.online(
                 self,
                 JSON_object["users"][i]["username"],
                 JSON_object["users"][i]["connection_address"],
                 JSON_object["users"][i]["connection_location"],
                 JSON_object["users"][i]["incoming_pubkey"],
                 JSON_object["users"][i]["connection_updated_at"],
                 JSON_object["users"][i]["status"],
             )
             users_online.append(JSON_object["users"][i]["username"])
             users_status.append(JSON_object["users"][i]["status"])
         Page += "<H2> Users </br>"
         Page += " Click on the username to pm them"
         for i in range(len(users_online)):
             Page += "<H3><a href='/pm?user="******"'>" + users_online[
                     i] + "</a> Status: " + users_status[i] + "<br/><br/>"
     except KeyError:
         Page += "An error has occured<br/>"
         Page += "<H2> <a href='/index'> Home </a><br/>"
     return Page
 def tx_broadcast(self, message):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     response = testing.Broadcast(cherrypy.session['apiKey'],
                                  cherrypy.session['privateKey'], message)
     json_acceptable_string = response.replace("'", "\"")
     d = json.loads(json_acceptable_string)
     return d["response"]
 def addNewPairs(self):
     cherrypy.session['privateKey'] = cherrypy.session['current_prikey']
     cherrypy.session['pubkey'] = cherrypy.session['current_pubkey']
     prikey = cherrypy.session['privateKey']
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     response = testing.decriptPrivateData(cherrypy.session['apiKey'],
                                           cherrypy.session['key'])
     private_key_hex = prikey.encode(encoder=nacl.encoding.HexEncoder)
     response['prikeys'][0] = prikey
     testing.addPrivateData(cherrypy.session['apiKey'],
                            cherrypy.session['privateKey'],
                            cherrypy.session['key'], response)
     raise cherrypy.HTTPRedirect('/index')
 def ping(self):
     Page = startHTML
     try:
         testing = mainApi.mainApi(cherrypy.session['username'],
                                   cherrypy.session['password'])
         response = testing.ping(cherrypy.session['apiKey'],
                                 cherrypy.session['pubkey'],
                                 cherrypy.session['privateKey'])
         response = str(response)
         Page += "<H1>Successful Ping</H1>"
         Page += "<H2>" + response + "</H2><br/>"
         Page += "<a href='/index'> Home </a>"
     except KeyError:
         Page += "Please Sign in"
         Page += "<br/>"
         Page += "<a href='/index'> Login </a>"
     return Page
 def get_privatedata(self, key):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     if (testing != 0):
         keys = ["1", "2"]
         response = testing.decriptPrivateData(cherrypy.session['apiKey'],
                                               key)
         cherrypy.session['blocked'] = response["blocked_usernames"]
         privatekey = nacl.signing.SigningKey(
             response["prikeys"][0], encoder=nacl.encoding.HexEncoder)
         publickey = privatekey.verify_key
         pubkey = publickey.encode(
             encoder=nacl.encoding.HexEncoder).decode('utf-8')
         keys[0] = privatekey
         keys[1] = pubkey
         return keys
     else:
         return 0
 def friends(self):
     Page = startHTML + "<H1> User Friends </H1>"
     try:
         testing = mainApi.mainApi(cherrypy.session['username'],
                                   cherrypy.session['password'])
         ApiApp.report(self, cherrypy.session['status'])
         Page += "<a href='/index'>Home</a>"
         Page += "Click on friends name to block them </br>"
         response = testing.decriptPrivateData(cherrypy.session['apiKey'],
                                               cherrypy.session['key'])
         friends = response["friends_usernames"]
         for i in range(len(friends)):
             Page += "<H2><a href='/block?friend=" + friends[
                 i] + "'>" + friends[i] + "</a></H2><br/>"
     except KeyError:
         Page += "Something went wrong, please log in again </br>"
         Page += "<a href='/index'>Login</a>"
     return Page
def authoriseUserLogin(username, password):
    print("Log on attempt from {0}:{1}".format(username, password))
    try:
        testing = mainApi.mainApi(username, password)
        response = testing.newApiKey()
        #print("############")
        print(response)
        if (response["response"] == "ok"):
            print("############")
            print(response)
            cherrypy.session['apiKey'] = response["api_key"]
            print("Success")
            return 0
        else:
            print("faliure")
            return 1
    except KeyError:
        raise cherrypy.HTTPRedirect('/')
 def updateUsers(self):
     try:
         testing = mainApi.mainApi(cherrypy.session['username'],
                                   cherrypy.session['password'])
         JSON_object = testing.listUsers(cherrypy.session['apiKey'])
         users_online = list()
         for i in range(len(JSON_object["users"])):
             sqlite.updateUsers(
                 self,
                 JSON_object["users"][i]["username"],
                 JSON_object["users"][i]["connection_address"],
                 JSON_object["users"][i]["connection_location"],
                 JSON_object["users"][i]["incoming_pubkey"],
                 JSON_object["users"][i]["connection_updated_at"],
                 JSON_object["users"][i]["status"],
             )
             users_online.append(JSON_object["users"][i]["username"])
     except:
         print("lol")
 def tx_ping_check(self):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     response = testing.ping_check(cherrypy.session['apiKey'])
     print(response)
 def tx_groupmessage(self):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     response = testing.createGroup(cherrypy.session['privateKey'],
                                    cherrypy.session['apiKey'])
 def tx_privateMessage(self, target, message):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     testing.privateMessage(message, target, cherrypy.session['apiKey'],
                            cherrypy.session['privateKey'])
 def report(self, status):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     testing.Report(cherrypy.session['apiKey'], cherrypy.session['pubkey'],
                    status)
 def check_messages(self):
     testing = mainApi.mainApi(cherrypy.session['username'],
                               cherrypy.session['password'])
     response = testing.CheckMessages(cherrypy.session['apiKey'],
                                      cherrypy.session['pubkey'])
     return 0