CoffeeScript: HTTPS Post to API, обработка ответа - PullRequest
0 голосов
/ 03 июня 2018

Я новичок в CoffeeScript / JavaScript, но пишу скрипт для Hubot, чтобы поговорить с моим Ansible Tower API в Coffee.Ниже приведен мой код:

module.exports = (robot) ->
robot.respond /deploy zabbix agent (.*)/i, (res) ->
    host = res.match[1]

    https = require 'https'

    authbody = JSON.stringify({
        username: "awx.api",
        password: "example"
    })

    authrequest = new https.ClientRequest({
        hostname: "awx.example.co.uk",
        port: 443,
        path: "/api/v2/authtoken/",
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "Content-Length": Buffer.byteLength(body)
        }
    })

    authrequest.end(authbody)

    body = JSON.stringify({
        limit: "#{host}"
    })

    request = new https.ClientRequest({
        hostname: "awx.example.co.uk",
        port: 443,
        path: "/api/v2/job_templates/35/launch/",
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "Content-Length": Buffer.byteLength(body)
        }
    })

    request.end(body)

    res.reply "Deploying zabbix agent to #{host}"

В разделе authrequest я публикую свое имя пользователя и пароль в API, и он должен вернуться в ответ JSON в следующем формате:

{
"token": "8f17825cf08a7efea124f2638f3896f6637f8745",
"expires": "2013-09-05T21:46:35.729Z"
}

У меня вопрос, как мне сохранить токен для использования в качестве аутентификации в последующих запросах.

1 Ответ

0 голосов
/ 03 июня 2018

Вы можете сохранить его в localStorage следующим образом:

localStorage.setItem("token", "8f17825cf08a7efea124f2638f3896f6637f8745",);

и получить его, когда вы делаете запрос и вставляете в заголовок

const token = JSON.parse(localStorage.getItem('token'));

request = new https.ClientRequest({
    hostname: "awx.example.co.uk",
    port: 443,
    path: "/api/v2/job_templates/35/launch/",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        "Content-Length": Buffer.byteLength(body),
        'Authorization': 'Bearer ' + token
    }
})
request.on('response', function (response) {
  response.on('data', function (chunk) {
       let json = JSON.parse(chunk);
       localStorage.setItem("token", json['token']);
  });
});
...