Sha256: 2bb9a0062b2d69f4cdffea04d21f930e3b9645b72d599fa8dc937975a17a3e06

Contents?: true

Size: 1.82 KB

Versions: 12

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

module Dpl
  module Providers
    class Launchpad < Provider
      register :launchpad

      status :alpha

      description sq(<<-STR)
        tbd
      STR

      env :launchpad

      opt '--oauth_token TOKEN', 'Launchpad OAuth token', secret: true
      opt '--oauth_token_secret SECRET', 'Launchpad OAuth token secret', secret: true
      opt '--slug SLUG', 'Launchpad project slug', format: %r{^~[^/]+/[^/]+/[^/]+$}, example: '~user-name/project-name/branch-name'

      msgs invalid_credentials: 'Invalid credentials (%s)',
           unknown_error: 'Error: %s (%s)'

      def deploy
        handle_response(post)
      end

      private

      def post
        req = Net::HTTP::Post.new(path)
        req['Authorization'] = authorization
        req.set_form_data(data)
        http.request(req)
      end

      def handle_response(res)
        error :invalid_credentials, res.code if res.code == '401'
        error :unknown_error, res.body, res.code unless res.is_a?(Net::HTTPSuccess)
      end

      def http
        http = Net::HTTP.new('api.launchpad.net', 443)
        http.use_ssl = true
        http
      end

      def path
        "/1.0/#{slug}/+code-import"
      end

      def data
        { 'ws.op' => 'requestImport' }
      end

      def authorization
        squish(<<-AUTH)
            OAuth oauth_consumer_key="Travis%20Deploy",
            oauth_nonce="#{nonce}",
            oauth_signature="%26#{oauth_token_secret}",
            oauth_signature_method="PLAINTEXT",
            oauth_timestamp="#{now}",
            oauth_token="#{oauth_token}",
            oauth_version="1.0"
        AUTH
      end

      def nonce
        rand(36**32).to_s(36)
      end

      def now
        Time.now.to_i
      end

      def squish(str)
        str.strip.gsub(/\s+/, ' ')
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
dpl-2.0.5.3 lib/dpl/providers/launchpad.rb
dpl-2.0.5.3.beta.1 lib/dpl/providers/launchpad.rb
dpl-2.0.5.2 lib/dpl/providers/launchpad.rb
dpl-2.0.5.2.beta.1 lib/dpl/providers/launchpad.rb
dpl-2.0.5.1 lib/dpl/providers/launchpad.rb
dpl-2.0.5.beta.2.1 lib/dpl/providers/launchpad.rb
dpl-2.0.5.beta.2 lib/dpl/providers/launchpad.rb
dpl-2.0.5 lib/dpl/providers/launchpad.rb
dpl-2.0.5.beta.1 lib/dpl/providers/launchpad.rb
dpl-2.0.5.beta lib/dpl/providers/launchpad.rb
travis_dpl_test-2.0.3.beta.4.ror.1 lib/dpl/providers/launchpad.rb
travis_dpl_test-2.0.3.beta.4.ror lib/dpl/providers/launchpad.rb