Hubot/Express: отключить базовую аутентификацию на определенном маршруте

Я использую Hubot и определил переменные среды EXPRESS_USER и EXPRESS_PASSWORD для включения базовой аутентификации. Hubot использует экспресс, и в основном это

setupExpress: ->
    user    = process.env.EXPRESS_USER
    pass    = process.env.EXPRESS_PASSWORD
    stat    = process.env.EXPRESS_STATIC

    express = require 'express'

    app = express()

    app.use (req, res, next) =>
      res.setHeader "X-Powered-By", "hubot/#{@name}"
      next()

    app.use express.basicAuth user, pass if user and pass
    app.use express.query()
    app.use express.bodyParser()
    app.use express.static stat if stat`

Я хочу предоставить HTTP-команду в скрипте, который не требует базовой аутентификации. Однако я не могу изменить код в Hubot, где он инициализируется.

robot.router.get '/some-anonymous-path', (req, res) ->
  console.log 'Should be here without need to authenticate

Кто-нибудь знает, возможно ли это сделать в expressjs.

заранее спасибо

Бруно


person bfcamara    schedule 24.06.2014    source источник


Ответы (1)


Как насчет того, чтобы поставить nginx перед вашим Hubot? Затем вы также можете добавить SSL, разрешить доступ только к определенным путям, переписать URL-адреса или даже обслуживать статический контент, созданный сценариями hubot. Простой пример блока nginx.conf:

upstream hubot {
  server localhost:8080;
}
server {
  listen 80;
  satisfy any;
  allow 127.0.0.1;
  deny all;
  location ~ ^/(public|obscured) {
    allow all;
    proxy_pass http://hubot;
  }
  location ~ ^/(static) {
    auth_basic "Restricted";
    auth_basic_user_file htpasswd;
    root /www;
  }
  location ~ {
    auth_basic "Restricted";
    auth_basic_user_file htpasswd;
    proxy_pass http://hubot;
  }
}

Затем добавьте пару htpasswd в /etc/nginx/htpasswd и в сценарии инициализации вашего hubot установите BIND_ADDRESS=localhost (привязка по умолчанию — 0.0.0.0), и вы отправитесь в гонки.

person notpeter    schedule 25.03.2015