Skip to content

Commit

Permalink
Add a /network/http route
Browse files Browse the repository at this point in the history
  • Loading branch information
AI-Mozi committed May 8, 2024
1 parent 8ed6391 commit b5a5b03
Show file tree
Hide file tree
Showing 4 changed files with 418 additions and 0 deletions.
27 changes: 27 additions & 0 deletions app.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
# param validations
require 'ronin/app/validations/install_repo_params'
require 'ronin/app/validations/import_params'
require 'ronin/app/validations/http_params'

# schema builders
require 'ronin/app/schemas/payloads/encoders/encode_schema'
Expand Down Expand Up @@ -350,6 +351,32 @@ class App < Sinatra::Base
erb :queue
end

get '/network/http' do
erb :"network/http"
end

post '/network/http' do
result = Validations::HTTPParams.call(params)
if result.success?
@http_response = Ronin::Support::Network::HTTP.request(result[:method],
result[:url],
proxy: result[:proxy],
ssl: result[:ssl],
headers: result[:headers],
user_agent: result[:user_agent],
cookie: result[:cookie],
user: result[:user],
password: result[:password],
body: result[:body])

erb :"network/http"
else
@params = params
@errors = result.errors
halt 400, erb(:"network/http")
end
end

private

#
Expand Down
90 changes: 90 additions & 0 deletions lib/ronin/app/validations/http_params.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# frozen_string_literal: true
#
# ronin-app - a local web app for Ronin.
#
# Copyright (c) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)
#
# ronin-app is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ronin-app is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with ronin-app. If not, see <http://www.gnu.org/licenses/>.
#

require 'dry/validation'

module Ronin
module App
module Validations
#
# Validations for the form params submitted to `POST /network/http`.
#
class HTTPParams < Dry::Validation::Contract

HTTPMethods = Types::Symbol.enum(
get: 'GET',
post: 'POST'
)

Versions = Types::Float.enum(
1 => '1',
1.1 => '1.1',
1.2 => '1.2'
)

VerificationModes = Types::Symbol.enum(
none: 'none',
peer: 'peer',
fail_if_no_peer_cer: 'fail_if_no_peer_cer'
)

params do
required(:method).filled(HTTPMethods)
required(:url).filled(:string)

optional(:body).maybe(:string)
optional(:headers).hash

optional(:proxy).maybe(:string)
optional(:user_agent).maybe(:string)
optional(:user).maybe(:string)
optional(:password).maybe(:string)
optional(:cookie).maybe(:string)

optional(:ssl).hash do
optional(:timeout).maybe(:integer)
optional(:version).maybe(Versions)
optional(:min_version).maybe(Versions)
optional(:max_version).maybe(Versions)
optional(:verify).maybe(VerificationModes)
optional(:verify_depth).maybe(:integer)
optional(:verify_hostname).maybe(:bool)
end

before(:key_coercer) do |result|
result = result.to_h

result[:headers] = result[:headers].split(',').each_with_object({}) do |header, memory|
key, value = header.split(':', 2)
memory[key.strip] = value.strip if key && value
end

result
end
end

def self.call(params)
new.call(params)
end

end
end
end
end
8 changes: 8 additions & 0 deletions views/layout.erb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@
</div>
</div>

<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-item">network</a>

<div class="navbar-dropdown">
<a href="/network/http" class="navbar-item">http</a>
</div>
</div>

<a href="/queue" class="navbar-item">queue</a>
<a href="/about" class="navbar-item">about</a>
</div>
Expand Down
Loading

0 comments on commit b5a5b03

Please sign in to comment.