@@ -49,12 +49,12 @@ def halt_with_error(error)
4949 } . to_json
5050end
5151
52- def parser_object ( url :, html :, content_type : )
52+ def parser_object ( url :, html :)
5353 {
5454 url : url ,
5555 options : {
5656 html : html ,
57- contentType : content_type
57+ contentType : "html"
5858 }
5959 }
6060end
@@ -67,12 +67,20 @@ def download_with_http(url)
6767 . use ( :auto_inflate )
6868 . get ( url )
6969
70- parser_object ( url : url , html : response . to_s , content_type : response . headers [ :content_type ] )
70+ parser_object ( url : url , html : response . to_s )
7171end
7272
73- def authenticate ( user , signature , url )
73+ def authenticate ( user , signature )
74+ url = begin
75+ Base64 . urlsafe_decode64 ( params [ "base64_url" ] )
76+ rescue NoMethodError
77+ halt_with_error ( "Invalid request. Missing base64_url parameter." )
78+ end
79+
7480 halt_with_error ( "User does not exist: #{ user } ." ) unless $users. key? ( user )
7581 halt_with_error ( "Invalid signature." ) unless signature_valid? ( user , signature , url )
82+
83+ url
7684end
7785
7886def response_error! ( exception , url , user )
@@ -87,39 +95,26 @@ def response_error!(exception, url, user)
8795end
8896
8997get "/parser/:user/:signature" do
90- url = begin
91- Base64 . urlsafe_decode64 ( params [ "base64_url" ] )
92- rescue NoMethodError
93- halt_with_error ( "Invalid request. Missing base64_url parameter." )
94- end
95-
98+ url = authenticate ( params [ "user" ] , params [ "signature" ] )
9699 logger . info "url=#{ url } "
97-
98- authenticate ( params [ "user" ] , params [ "signature" ] , url )
99-
100100 payload = download_with_http ( url )
101-
102101 parse_with_mercury ( payload )
103102rescue => exception
104103 response_error! ( exception , url , params [ "user" ] )
105104end
106105
107106post "/parser/:user/:signature" do
107+ url = authenticate ( params [ "user" ] , params [ "signature" ] )
108+
108109 json = begin
109110 JSON . parse ( request . body . read )
110111 rescue JSON ::ParserError
111112 halt_with_error ( "Invalid JSON body." )
112113 end
113114
114- halt_with_error ( "Missing url field in JSON body." ) unless json [ "url" ]
115115 halt_with_error ( "Missing body field in JSON body." ) unless json [ "body" ]
116-
117- logger . info "url=#{ json [ "url" ] } "
118-
119- authenticate ( params [ "user" ] , params [ "signature" ] , json [ "url" ] )
120-
121- payload = parser_object ( url : json [ "url" ] , html : json [ "body" ] , content_type : "text/html" )
122-
116+ logger . info "url=#{ url } "
117+ payload = parser_object ( url : url , html : json [ "body" ] )
123118 parse_with_mercury ( payload )
124119rescue => exception
125120 response_error! ( exception , url , params [ "user" ] )
0 commit comments