Aigeruth/docker-private-registry

View on GitHub
app.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'sinatra'
require 'sinatra/config_file'
require_relative 'api'
require_relative 'version'

module DockerRegistry
  class App < Sinatra::Base
    include Backends::Helpers
    register Sinatra::ConfigFile

    config_file 'config.yml'

    get '/' do
      haml :index, locals: { repositories: repositories }
    end

    get '/repositories/:namespace/:repository' do
      haml :repository, locals: { repository: repository, url: repository_url(repository) }
    end

    get '/swagger/?:version?' do |version|
      version ||= 'v1'
      haml :swagger, layout: false, locals: { version: version }
    end

    private

    def registry_host
      request.host.dup.tap do |host|
        host << ":#{request.port}" unless [80, 433].include? request.port
      end
    end

    def repository_url(repository)
      "#{registry_host}/#{repository.namespace}/#{repository.name}"
    end
  end
end