Revert "Switch help and exit to /help /exit"
Revert "Switch help and exit to /help /exit"

This reverts commit aa70a32fd145be2c47df66bce28c27886964fc86.

file:a/README.md -> file:b/README.md
--- a/README.md
+++ b/README.md
@@ -22,12 +22,12 @@
 
 ### Server
 
-`TODO`
+See [server/README.md](server/README.md)
 
 
 ### Client
 
-`TODO`
+See [client/README.md](client/README.md)
 
 
 

file:b/client/README.md (new)
--- /dev/null
+++ b/client/README.md
@@ -1,1 +1,27 @@
+# LocalChat Client
 
+
+## About
+
+Localchat is a simple and lightweight chat application. It's primary purpose is to provide a means to have a multi-user Off-The-Record transient chat, minimising the likelihood that anyone but the chat participants has even a record that the chat took place.
+
+This client uses basic End To End encryption (currently using PGP as the encryption mechanism), and the server holds encrypted payloads in memory only (to ensure the ciphertext doesn't end up captured on the hosting provider's SAN for a time). 
+
+The default behaviour is a Multi-User Chat (MUC), however direct messaging between participants within a room is also supported.
+
+
+
+
+## Dependancies
+
+
+`TODO`
+
+
+
+## Usage Instructions
+
+`TODO`
+
+
+

 Binary files a/docs/.server-api.md.kate-swp and /dev/null differ
--- a/docs/server-api.md
+++ b/docs/server-api.md
@@ -12,7 +12,7 @@
 
 Which, if successful, will result in a `HTTP 200` and a JSON encapsulated response body.
 
-
+----
 
 Response Codes
 ---------------
@@ -24,13 +24,67 @@
 * `403` - Authentication Invalid/Permission Denied
 * `500` - Server had an issue
 
-
-
+----
+
+Authentication
+---------------
+
+Authentication is performed on a per-room basis, so certain calls (such as `createRoom`) are currently entirely unauthenticated (a form of auth may be introduced for those later).
+
+User's are required to authenticate themselves (via password) when they attempt to enter a room with a `joinRoom` call. If that call is successful then a session key will be provided in the response. This must be embedded into every payload (as attribute `sesskey`) after that.
+
+The server uses `bcrypt` for storing authentication credentials.
+
+----
 
 Supported Actions
 -------------------
 
 
+### banUser
+
+Can only be called by the room admin, kicks a user out of the room, and does not allow them to return (unless re-invited)
+
+    {
+        "action":"banUser",
+        "payload": {    
+                    "roomName": "[name of room]",
+                    "user": user,
+                    "kick": [user to kick],
+                    "sesskey": sessionkey
+        }
+    }
+
+*Response*
+
+If successful, the value of `status` will be `ok` and the kicked user's session will be terminated and their user record removed. A message will be pushed to the room by `SYSTEM` to note that that user has been kicked and banned.
+
+If the requesting user lacks the privileges to kick a user, `SYSTEM` will push a message to warn that `user` tried to ban `tokick`.
+
+----
+
+### closeRoom
+
+This can only be successfully called by the room's owner. `closeRoom` will close the current room, remove all associated messages, sessions and user accounts.
+
+
+    {
+        "action":"closeRoom",
+        "payload": {    
+                    "roomName": "[name of room]",
+                    "user": user,
+                    "sesskey": sessionkey
+        }
+    }
+
+*Response*
+
+If successful, the value of `status` will be `ok`.
+
+Rooms should always be closed when they are no longer required. The server will (by default) automatically close inactive rooms after a period, but this is intended as a safety net (in case the admin gets disconnected and cannot reconnect for some reason).
+
+----
+
 ### createRoom
 
 This is used to create a room. Calls are currently unauthenticated because user accounts are tied to a room rather than existing in a global namespace (this is done to limit the risk of a list of possible users sitting on the server until they're likely to be needed).
@@ -53,7 +107,30 @@
 
 The user will then need to call `joinRoom` in order to enter the room (the client could do this automatically, but the current client version does not).
 
-
+----
+
+### inviteUser
+
+Used to invite a user into the current room. Can be called by admin's and users alike (`SYSTEM` will push a message into the room to notify others of the invite)
+
+    {
+        "action":"inviteUser",
+        "payload": {    
+                    "roomName": "[name of room]",
+                    "user": user,
+                    "invite": [user to invite],
+                    "pass": [new users pass]
+                    "sesskey": sessionkey
+        }
+    }
+
+When inviting a user, we need to specify their username as `invite` and their authentication password as `pass`
+
+*Response*
+
+If successful, the value of `status` will be `ok`. `SYSTEM` will also push a message into the room that `user` invited `invite`
+
+----
 
 ### joinRoom
 
@@ -87,29 +164,29 @@
 
 The value `syskey` is a decryption passphrase. The server's internal user `SYSTEM` will E2E encrypt any messages it pushes into rooms, this is the key you should use to decrypt those messages.
 
-
-### closeRoom
-
-This can only be successfully called by the room's owner. `closeRoom` will close the current room, remove all associated messages, sessions and user accounts.
-
-
-    {
-        "action":"closeRoom",
-        "payload": {    
-                    "roomName": "[name of room]",
-                    "user": user,
-                    "sesskey": sessionkey
-        }
-    }
-
-*Response*
-
-If successful, the value of `status` will be `ok`.
-
-Rooms should always be closed when they are no longer required. The server will (by default) automatically close inactive rooms after a period, but this is intended as a safety net (in case the admin gets disconnected and cannot reconnect for some reason).
-
-
-
+----
+
+### kickUser
+
+Can only be called by the room admin, kicks a user out of the room (but allows them to return). Useful where you think a user's session has hung (for example)
+
+    {
+        "action":"kickUser",
+        "payload": {    
+                    "roomName": "[name of room]",
+                    "user": user,
+                    "kick": [user to kick],
+                    "sesskey": sessionkey
+        }
+    }
+
+*Response*
+
+If successful, the value of `status` will be `ok` and the kicked user's session will be terminated. A message will be pushed to the room by `SYSTEM` to note that that user has been kicked.
+
+If the requesting user lacks the privileges to kick a user, `SYSTEM` will push a message to warn that `user` tried to kick `tokick`.
+
+----
 
 ### leaveRoom
 
@@ -128,8 +205,7 @@
 
 If successful, the value of `status` will be `ok`. Client's should then disable any automated message polling they are running.
 
-
-    
+----
 
 ### pollMsg
 
@@ -166,18 +242,18 @@
 
 Once the client has processed the received messages, the value of `last` in the next `pollMsg` request should be the maximum ID in the resultset.
 
-
-
-
-### sendMsg
-
-Used to send a message to the entire room
-
-    {
-        "action":"sendMsg",
+----
+
+### sendDirectMsg
+
+Used to send a message to a specific user within the room. The message will not be visible to other room occupants.
+
+    {
+        "action":"sendDirectMsg",
         "payload": {    
                     "roomName": "[name of room]",
                     "msg": "[message payload]",
+                    "to": recipient
                     "user": user,
                     "sesskey": sessionkey
         }
@@ -202,19 +278,17 @@
 
 If message sending is successful, the response will contain `status:"ok"`
 
-
-
-
-### sendDirectMsg
-
-Used to send a message to a specific user within the room. The message will not be visible to other room occupants.
-
-    {
-        "action":"sendDirectMsg",
+----
+
+### sendMsg
+
+Used to send a message to the entire room
+
+    {
+        "action":"sendMsg",
         "payload": {    
                     "roomName": "[name of room]",
                     "msg": "[message payload]",
-                    "to": recipient
                     "user": user,
                     "sesskey": sessionkey
         }
@@ -240,6 +314,9 @@
 If message sending is successful, the response will contain `status:"ok"`
 
 
+----
+
+
 
 
     

file:b/server/README.md (new)
--- /dev/null
+++ b/server/README.md
@@ -1,1 +1,24 @@
+# LocalChat Server
 
+
+## About
+
+Localchat is a simple and lightweight chat application. It's primary purpose is to provide a means to have a multi-user Off-The-Record transient chat, minimising the likelihood that anyone but the chat participants has even a record that the chat took place.
+
+`TODO`
+
+
+
+## Dependancies
+
+
+`TODO`
+
+
+
+## Usage Instructions
+
+`TODO`
+
+
+