Class: PdfSearch::WebServer
- Inherits:
-
Object
- Object
- PdfSearch::WebServer
- Defined in:
- lib/web_server.rb
Instance Attribute Summary collapse
-
#daemon ⇒ Object
Returns the value of attribute daemon.
Instance Method Summary collapse
- #auth_defined? ⇒ Boolean
- #basic_auth ⇒ Object
- #index(request, response) ⇒ Object
-
#initialize(search_index, debug_mode = false) ⇒ WebServer
constructor
A new instance of WebServer.
- #response_html(es_response) ⇒ Object
- #search(request, response) ⇒ Object
- #start ⇒ Object
Constructor Details
#initialize(search_index, debug_mode = false) ⇒ WebServer
Returns a new instance of WebServer.
9 10 11 12 |
# File 'lib/web_server.rb', line 9 def initialize(search_index, debug_mode = false) @search_index = search_index @debug_mode = (ENV['DEBUG_PDF_SEARCH'] == '1') || debug_mode end |
Instance Attribute Details
#daemon ⇒ Object
Returns the value of attribute daemon.
7 8 9 |
# File 'lib/web_server.rb', line 7 def daemon @daemon end |
Instance Method Details
#auth_defined? ⇒ Boolean
35 36 37 38 39 |
# File 'lib/web_server.rb', line 35 def auth_defined? [ENV['PDF_SEARCH_USERNAME'], ENV['PDF_SEARCH_PASSWORD']].all? do |env_var| env_var != nil && env_var != '' end end |
#basic_auth ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/web_server.rb', line 14 def basic_auth return @basic_auth if @basic_auth != nil config = { :Realm => 'BanalBI Pdf-Search' } htpasswd = WEBrick::HTTPAuth::Htpasswd.new 'banalbi-pdf-search' htpasswd.set_passwd config[:Realm], ENV['PDF_SEARCH_USERNAME'] , ENV['PDF_SEARCH_PASSWORD'] htpasswd.flush config[:UserDB] = htpasswd @basic_auth = WEBrick::HTTPAuth::BasicAuth.new config end |
#index(request, response) ⇒ Object
28 29 30 31 32 33 |
# File 'lib/web_server.rb', line 28 def index(request, response) search_view = ::PdfSearch::SearchView.new(@search_index) response.status = 200 response['Content-Type'] = 'text/html' response.body = search_view.render end |
#response_html(es_response) ⇒ Object
69 70 71 72 73 74 |
# File 'lib/web_server.rb', line 69 def response_html(es_response) results = es_response['hits']['hits'] results.map do |result| "<li>#{result["_source"]["text"]}</li>" end.join("\n") end |
#search(request, response) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/web_server.rb', line 41 def search(request, response) if auth_defined? basic_auth.authenticate(request, response) end query = ::PdfSearch::ElasticSearchQuery.new(JSON.parse(request.body), @search_index) elastic_response = ::PdfSearch::ElasticSearchClient.search index: 'pdf_pages', body: query.to_hash response.body = response_html(elastic_response) end |
#start ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/web_server.rb', line 52 def start start_server = lambda do server = WEBrick::HTTPServer.new(:Port => 80) server.mount_proc '/', &method(:index) server.mount_proc '/search', &method(:search) server.start end if @debug_mode start_server.call else self.daemon = Daemons.call(multiple: true, &start_server) end end |