From 3415fd5dce699c332849762e7679386484476610 Mon Sep 17 00:00:00 2001
From: Felix Sidokhine <felix.sidokhine@randstad.ca>
Date: Fri, 5 Jun 2020 19:01:35 +0300
Subject: [PATCH] added api documentation inside methods

---
 jams-server/doc/api_data.js                   | 63 +++++++++++++++++++
 jams-server/doc/api_data.json                 | 63 +++++++++++++++++++
 jams-server/doc/api_project.js                |  2 +-
 jams-server/doc/api_project.json              |  2 +-
 .../jams/server/servlets/LoginServlet.java    | 19 +++++-
 .../servlets/api/auth/login/LoginRequest.java | 12 ++++
 6 files changed, 156 insertions(+), 5 deletions(-)
 create mode 100644 jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/login/LoginRequest.java

diff --git a/jams-server/doc/api_data.js b/jams-server/doc/api_data.js
index 4b4306ca..e690dd6c 100644
--- a/jams-server/doc/api_data.js
+++ b/jams-server/doc/api_data.js
@@ -521,6 +521,69 @@ define({ "api": [
     "filename": "src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java",
     "groupTitle": "Directory_Search"
   },
+  {
+    "version": "1.0.0",
+    "type": "post",
+    "url": "/api/login",
+    "title": "Obtain an 0Auth token",
+    "name": "postLogin",
+    "group": "Login",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "header",
+            "optional": true,
+            "field": "authorization",
+            "description": "<p>classical HTTP auth header</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "attribute",
+            "optional": true,
+            "field": "X509Certificate",
+            "description": "<p>X509 User certificate</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "body",
+            "optional": true,
+            "field": "LoginRequest",
+            "description": "<p>username/password sent to server as JSON object</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "200": [
+          {
+            "group": "200",
+            "type": "body",
+            "optional": false,
+            "field": "AuthTokenResponse",
+            "description": "<p>the 0Auth authentication token</p>"
+          }
+        ]
+      }
+    },
+    "error": {
+      "fields": {
+        "403": [
+          {
+            "group": "403",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>The user is unauthorized</p>"
+          }
+        ]
+      }
+    },
+    "filename": "src/main/java/net/jami/jams/server/servlets/LoginServlet.java",
+    "groupTitle": "Login"
+  },
   {
     "version": "1.0.0",
     "type": "get",
diff --git a/jams-server/doc/api_data.json b/jams-server/doc/api_data.json
index 433aaecf..520fd711 100644
--- a/jams-server/doc/api_data.json
+++ b/jams-server/doc/api_data.json
@@ -521,6 +521,69 @@
     "filename": "src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java",
     "groupTitle": "Directory_Search"
   },
+  {
+    "version": "1.0.0",
+    "type": "post",
+    "url": "/api/login",
+    "title": "Obtain an 0Auth token",
+    "name": "postLogin",
+    "group": "Login",
+    "parameter": {
+      "fields": {
+        "Parameter": [
+          {
+            "group": "Parameter",
+            "type": "header",
+            "optional": true,
+            "field": "authorization",
+            "description": "<p>classical HTTP auth header</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "attribute",
+            "optional": true,
+            "field": "X509Certificate",
+            "description": "<p>X509 User certificate</p>"
+          },
+          {
+            "group": "Parameter",
+            "type": "body",
+            "optional": true,
+            "field": "LoginRequest",
+            "description": "<p>username/password sent to server as JSON object</p>"
+          }
+        ]
+      }
+    },
+    "success": {
+      "fields": {
+        "200": [
+          {
+            "group": "200",
+            "type": "body",
+            "optional": false,
+            "field": "AuthTokenResponse",
+            "description": "<p>the 0Auth authentication token</p>"
+          }
+        ]
+      }
+    },
+    "error": {
+      "fields": {
+        "403": [
+          {
+            "group": "403",
+            "type": "null",
+            "optional": false,
+            "field": "null",
+            "description": "<p>The user is unauthorized</p>"
+          }
+        ]
+      }
+    },
+    "filename": "src/main/java/net/jami/jams/server/servlets/LoginServlet.java",
+    "groupTitle": "Login"
+  },
   {
     "version": "1.0.0",
     "type": "get",
diff --git a/jams-server/doc/api_project.js b/jams-server/doc/api_project.js
index 408681ee..1c1003fd 100644
--- a/jams-server/doc/api_project.js
+++ b/jams-server/doc/api_project.js
@@ -7,7 +7,7 @@ define({
   "apidoc": "0.3.0",
   "generator": {
     "name": "apidoc",
-    "time": "2020-06-05T15:49:17.635Z",
+    "time": "2020-06-05T16:00:10.907Z",
     "url": "http://apidocjs.com",
     "version": "0.23.0"
   }
diff --git a/jams-server/doc/api_project.json b/jams-server/doc/api_project.json
index 54f6f7b8..32383056 100644
--- a/jams-server/doc/api_project.json
+++ b/jams-server/doc/api_project.json
@@ -7,7 +7,7 @@
   "apidoc": "0.3.0",
   "generator": {
     "name": "apidoc",
-    "time": "2020-06-05T15:49:17.635Z",
+    "time": "2020-06-05T16:00:10.907Z",
     "url": "http://apidocjs.com",
     "version": "0.23.0"
   }
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/LoginServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/LoginServlet.java
index acc90b79..e129305e 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/LoginServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/LoginServlet.java
@@ -31,6 +31,7 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import net.jami.jams.common.authmodule.AuthTokenResponse;
 import net.jami.jams.common.objects.user.UserProfile;
+import net.jami.jams.server.servlets.api.auth.login.LoginRequest;
 import net.minidev.json.JSONObject;
 
 import java.io.IOException;
@@ -43,14 +44,26 @@ import static net.jami.jams.server.servlets.api.auth.login.AuthRequestProcessor.
 //This method returns the token which is used for all the next calls to the API.
 public class LoginServlet extends HttpServlet {
 
+    /**
+     * @apiVersion 1.0.0
+     * @api {post} /api/login Obtain an 0Auth token
+     * @apiName postLogin
+     * @apiGroup Login
+     * @apiParam {header} [authorization] classical HTTP auth header
+     * @apiParam {attribute} [X509Certificate] X509 User certificate
+     * @apiParam {body} [LoginRequest] username/password sent to server as JSON object
+     *
+     * @apiSuccess (200) {body} AuthTokenResponse the 0Auth authentication token
+     * @apiError (403) {null} null The user is unauthorized
+     */
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         //There are 3 possible cases here.
         //Case 1: form submitted username/password
         AuthTokenResponse res = null;
-        JSONObject object = JsonIterator.deserialize(req.getInputStream().readAllBytes(), JSONObject.class);
-        if(object.get("username") != null && object.get("password") != null){
-            res = processUsernamePasswordAuth(object.get("username").toString(), object.get("password").toString());
+        LoginRequest object = JsonIterator.deserialize(req.getInputStream().readAllBytes(), LoginRequest.class);
+        if(object.getUsername() != null && object.getPassword() != null){
+            res = processUsernamePasswordAuth(object.getUsername(), object.getPassword());
         }
         //Case 2: Authorization header.
         if(req.getHeader("authorization") != null){
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/login/LoginRequest.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/login/LoginRequest.java
new file mode 100644
index 00000000..9eef49d9
--- /dev/null
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/login/LoginRequest.java
@@ -0,0 +1,12 @@
+package net.jami.jams.server.servlets.api.auth.login;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class LoginRequest {
+
+    private String username;
+    private String password;
+}
-- 
GitLab