Попробуйте выполнить js скрипт в манифесте, чтобы попросить приват API с пост-запросом - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь использовать сценарий js в моем jps для проверки учетных данных с персональным APi. Идея состоит в том, чтобы вернуть код ошибки в jps, если учетные данные являются ложными. На моем компьютере мой скрипт js работает нормально, но когда я пытаюсь запустить свой jps с этим, у меня появляется ошибка javascript.

мои jps:

onInstall:

- script [*]: https://github.com/user/project/blob/master/script.js responses: 401: type: error message: bad credentials

Мой js скрипт:


    const https = require('https')


    var name = "some-name"
    var password = "some-password"```



    const data = JSON.stringify({
      "auth": {
          "identity": {
              "methods": [
                  "password"
              ],
              "password": {
                  "user": {
                      "domain": {
                          "id": "default"
                      },
                      "name": name,
                      "password": password
                  }
              }
          },
          "scope": {
              "project": {
                  "domain": {
                      "id": "default"
                  },
                  "name": "some-name"
              }
          }
      }
    })
    const options = {
      hostname: 'mYapi.com',
      port: 443,
      path: 'mypath',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': data.length
      }
    }

    var req = https.request(options, (res) => {
      console.log(`statusCode: ${res.statusCode}`)
      console.log(res.statusCode)
      return res.statusCode;

    })

    req.on('error', (error) => {
      console.error(error)

    })

    req.write(data)
    req.end()


Я получаю эту ошибку в консоли:

ERROR: script.response: {"result":1704,"line":50,"response":null,"source":"hx-core","time":122,"error":"org.mozilla.javascript.EvaluatorException: syntax error"}

И я пытаюсь много разных скриптов для выполнения этого постового запроса ----> работает на моем компьютере (api отправляет результат 201, если учетные данные хороши, и 401, если нет), -----> не работает в jelasti c manifest.

Поэтому, пожалуйста, объясните мне, как я могу сделать запрос с помощью json в моем API в Jelasti c манифест (js скрипт вызова). Я благодарю вас заранее !

1 Ответ

0 голосов
/ 22 февраля 2020

Код, который выполняется действием «script», выполняется на JVM, поэтому он позволяет подключать и использовать библиотеки Java. Чтобы реализовать запрос POST и определить состояние выходного кода, вы можете использовать Commons HttpClient . Ниже приведен пример.

type: install
name: HttpClient Post

onInstall:
- script: |
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.methods.StringRequestEntity;

    var client = new HttpClient();

    var name = "some-name";
    var password = "some-password";

    var requestEntity = new StringRequestEntity(toJSON({
        "auth": {
            "identity": {
                "methods": [
                    "password"
                ],
                "password": {
                    "user": {
                        "domain": {
                            "id": "default"
                        },
                        "name": name,
                        "password": password
                    }
                }
            },
            "scope": {
                "project": {
                    "domain": {
                        "id": "default"
                    },
                    "name": "some-name"
                }
            }
        }
    }), "application/json", "UTF-8");


    var post = new PostMethod("https://example.com/");

    post.setRequestEntity(requestEntity);

    var status = client.executeMethod(post);
    post.releaseConnection();

    if (status == HttpStatus.SC_CREATED) { // 201
        return { type : "success" };    
    } else if (status == HttpStatus.SC_UNAUTHORIZED) { // 401
        return { type: "error", message: "bad credentials" };
    }

    return { type: "error", message: "unknown error" };

Кроме того, вы можете найти много полезных примеров и информации в Jelasti c JPS Collection хранилище.

Возможно, следующее Скрипт будет полезен для вас: https://github.com/jelastic-jps/git-push-deploy/blob/master/scripts/add-web-hook.cs

И последнее: если вам не нужен точный статус HTTP, вы можете использовать встроенный класс «Транспорт».

import com.hivext.api.core.utils.Transport;

var name = "some-name";
var password = "some-password";

var data = toJSON({
  "auth": {
    "identity": {
      "methods": [
        "password"
      ],
      "password": {
        "user": {
          "domain": {
            "id": "default"
          },
          "name": name,
          "password": password
        }
      }
    },
    "scope": {
      "project": {
        "domain": {
          "id": "default"
        },
        "name": "some-name"
      }
    }
  }
});

try {
    new Transport().post("https://example.com/", data, {
        'Content-Type': 'application/json',
        'Content-Length': data.length
    });    

    return { type: "success" };
} catch (e) {
    return {
        type: "error",
        message: "unknown error: " + e
    };
}
...