diff --git a/Gemfile b/Gemfile index 2bfb850fe..939553659 100644 --- a/Gemfile +++ b/Gemfile @@ -78,6 +78,11 @@ gem 'whenever', '~> 0.9.4', require: false # for dates and times gem 'iso8601', '~> 0.8.2' +# for REST API +gem 'grape', '~> 0.10.1' + +gem 'hashie_rails', '~> 0.0.1' + group :development, :test do # for inserting dummy data gem 'activerecord-import', '~> 0.6.0' diff --git a/Gemfile.lock b/Gemfile.lock index 0da446a29..75e4a0cde 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,6 +125,16 @@ GEM ruby_parser (~> 3.1, > 3.1.0) sexp_processor (~> 4.4) formatador (0.2.5) + grape (0.10.1) + activesupport + builder + hashie (>= 2.1.0) + multi_json (>= 1.3.2) + multi_xml (>= 0.5.2) + rack (>= 1.3.0) + rack-accept + rack-mount + virtus (>= 1.0.0) guard (2.6.1) formatador (>= 0.2.4) listen (~> 2.7) @@ -144,6 +154,10 @@ GEM activesupport (>= 4.0.1) haml (>= 3.1, < 5.0) railties (>= 4.0.1) + hashie (3.3.2) + hashie_rails (0.0.1) + hashie (>= 3.0) + rails (~> 4.0) highline (1.6.21) hike (1.2.3) hitimes (1.2.2) @@ -183,6 +197,7 @@ GEM mini_portile (0.6.0) minitest (5.5.0) multi_json (1.10.1) + multi_xml (0.5.5) nokogiri (1.6.2.1) mini_portile (= 0.6.0) nprogress-rails (0.1.3.1) @@ -212,6 +227,10 @@ GEM method_source (~> 0.8.1) slop (~> 3.4) rack (1.5.2) + rack-accept (0.4.5) + rack (>= 0.4) + rack-mount (0.8.3) + rack (>= 1.0.0) rack-test (0.6.2) rack (>= 1.0) railroady (1.2.0) @@ -391,10 +410,12 @@ DEPENDENCIES epp-xml (~> 0.10.3) fabrication (~> 2.11.3) faker (~> 1.3.0) + grape (~> 0.10.1) guard (~> 2.6.1) guard-rspec (~> 4.3.1) guard-rubocop (~> 1.1.0) haml-rails (~> 0.5.3) + hashie_rails (~> 0.0.1) isikukood iso8601 (~> 0.8.2) jbuilder (~> 2.0) diff --git a/app/api/repp/api.rb b/app/api/repp/api.rb new file mode 100644 index 000000000..5e837cdd9 --- /dev/null +++ b/app/api/repp/api.rb @@ -0,0 +1,22 @@ +module Repp + class API < Grape::API + format :json + prefix :repp + version 'v1', using: :path + + http_basic do |username, password| + @current_user ||= EppUser.find_by(username: username, password: password) + end + + helpers do + attr_reader :current_user + end + + resource :domains do + desc 'Return list of domains' + get '/' do + current_user.registrar.domains + end + end + end +end diff --git a/config/application.rb b/config/application.rb index 8e4a6a7c2..72702bcfe 100644 --- a/config/application.rb +++ b/config/application.rb @@ -27,6 +27,9 @@ module Registry # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] # config.i18n.default_locale = :de + config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') + config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')] + config.generators do |g| g.stylesheets false g.javascripts false diff --git a/config/routes.rb b/config/routes.rb index 1c9ef495d..d2cec9962 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,6 +5,8 @@ Rails.application.routes.draw do get 'error/:command', to: 'errors#error', defaults: { format: :xml } end + mount Repp::API => '/' + ## ADMIN ROUTES namespace(:admin) do resources :keyrelays