Sha256: 22fccead46ce06921df7cc9810e6e95fe0221cf4bbbf2814cb89a273441e54c7

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

require 'openssl'
require File.expand_path('server', File.dirname(__FILE__))

module Ftpd
  class TlsServer < Server

    def initialize
      @ssl_context = make_ssl_context
      super
    end

    private

    def make_server_socket
      ssl_server_socket = OpenSSL::SSL::SSLServer.new(super, @ssl_context);
      ssl_server_socket.start_immediately = false
      ssl_server_socket
    end

    def accept
      socket = @server_socket.accept
      add_tls_methods_to_socket(socket)
      socket
    end

    def make_ssl_context
      context = OpenSSL::SSL::SSLContext.new
      File.open(certfile_path) do |certfile|
        context.cert = OpenSSL::X509::Certificate.new(certfile)
        certfile.rewind
        context.key = OpenSSL::PKey::RSA.new(certfile)
      end
      context
    end

    def certfile_path
      File.expand_path('../../insecure-test-cert.pem',
                       File.dirname(__FILE__))
    end

    def add_tls_methods_to_socket(socket)
      context = @ssl_context
      class << socket
        def ssl_context
          context
        end
        def encrypted?
          !!cipher
        end
        def encrypt
          accept
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ftpd-0.0.0.pre2 lib/ftpd/tls_server.rb