클래스: Mongo::Server::PendingConnection 비공개

상속:
ConnectionBase 모두 표시
확장자:
전달 가능
다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이 클래스는 핸드셰이크 및 인증 중 연결을 캡슐화합니다.

이후:

  • 2.0.0

상수 요약

ConnectionBase에서 상속된 상수

ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, ConnectionBase::REDUCED_MAX_BSON_SIZE

Loggable에서 포함된 상수

Loggable::prefix

인스턴스 속성 요약 접기

ConnectionBase에서 상속된 속성

#description, #options, #server

모니터링::게시 가능에 포함된 속성

#monitoring

ConnectionCommon에서 상속된 속성

#compressor, #pid

인스턴스 메서드 요약 접기

ConnectionBase에서 상속된 메서드

#app_metadata, #dispatch, #generation, #service_id

Monitoring::Publishable에 포함된 메서드

#publish_cmap_event, #publish_event, #publish_s담_event

Loggable에 포함된 메서드

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

ConnectionCommon에서 상속된 메서드

#connected?, #handShake_command, #handShake_document

생성자 세부 정보

#initialize(socket, 서버, 모니터링, options = {}) ⇒ PendingConnection

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

PendingConnection의 새 인스턴스를 반환합니다.

이후:

  • 2.0.0



27
28
29
30
31
32
33
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', 줄 27

def 초기화(소켓, 서버, 모니터링, 옵션 = {})
  @socket = 소켓
  @options = 옵션
  @server = 서버
  @monitoring = 모니터링
  @id = 옵션[:id]
end

인스턴스 속성 세부 정보

#ID정수 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

연결의 ID를 반환합니다. 이는 이 PendingConnection 인스턴스가 생성된 일반 연결 객체의 ID와 동일한 ID입니다.

반환합니다:

  • (정수)

    연결의 ID입니다. 이는 이 PendingConnection 인스턴스가 생성된 일반 연결 객체의 ID와 동일한 ID입니다.

이후:

  • 2.0.0



38
39
40
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', 줄 38

def id
  @id
end

인스턴스 메서드 세부 정보

#핸드셰이크 및 인증!객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', 줄 40

def 핸드셰이크_and_인증!
  speculative_auth_doc = nil
  만약 옵션[: user] || 옵션[:auth_mech]
    # 인증 인스턴스 를 만들려면 메커니즘을 지정해야 합니다.
    # 그러나 이 시점에서 우리는 궁극적으로
    # 이 사용됩니다(이는 다음에 의해 반환된 데이터에 따라 달라지기 때문입니다).
    # 핸드셰이크, 특히 서버 버전).
    # 그러나 4.4+ 서버만 투기성을 지원한다는 것을 알고 있습니다.
    # 인증 및 해당 서버는 일반적으로 다음을 지원합니다.
    # SCRAM-SHA-256. 4.4에 대해 생성된 사용자 계정이 +
    # 서버는 일반적으로 SCRAM-SHA-256 인증 을 허용합니다.
    4.4 이전 서버에서 마이그레이션된 사용자 계정 #개는 다음 항목만 허용합니다.
    # SCRAM-SHA-1. 따라서 기본적으로 SCRAM-SHA-256 를 사용합니다.
    # 합리적이며 speculative auth spec에서도 강제됩니다.
    # 메커니즘이 지정되지 않았고 3.0+
    # 서버, 추측 인증 문서 를 보내면 서버 는
    # 이를 인증 하면 명시적
    나중에 메커니즘 기본값을 CR로 설정한 후 # 명령을 실행합니다.
    # 메커니즘이 지정되지 않았고 4.4+
    # 서버 이고 사용자 계정이 SCRAM-SHA-256 를 허용하지 않는 경우,
    # SCRAM-SHA-1 을(를) 사용하여 별도의 명령으로 인증합니다.
    # SCRAM 메커니즘 협상을 진행 중입니다.
    default_options = 옵션::편집됨.신규(:auth_mech => :scram256)
    speculative_auth_user = 인증::사용자.신규(default_options.merge(옵션))
    speculative_auth = 인증.get(speculative_auth_user, self)
    speculative_auth_doc = speculative_auth.대화.speculative_auth_document
  end

  결과 = 악수!(speculative_auth_doc: speculative_auth_doc)

  만약 description.알 수 없음?
    올리다 오류::Internal DriverError, "핸드셰이크 성공적인 후 연결 설명을 알 수 없음: #{설명.검사}"
  end

  시작
    만약 speculative_auth_doc && (speculative_auth_result = 결과['speculativeAuthenticate'])
      하지 않는 한 description.기능.Scram_sha_1_Enabled?
        올리다 오류::InvalidServerAuthResponse, "3.0 이전 서버에서 추측 인증에 성공했습니다"
      end
      case speculative_auth_user.메커니즘
      when :mongodb_x509
        # 완료
      # 인증 메커니즘의 기본값 은 SCRAM256이지만 사용자가 지정한 경우
      # SCRAM 명시적으로 추측에 따라 인증할 수 있음
      # SCRAM.
      when :scRAM, :scram256
        인증합니다!(
          speculative_auth_client_nonce: speculative_auth.대화.client_nonce,
          speculative_auth_mech: speculative_auth_user.메커니즘,
          speculative_auth_result: speculative_auth_result,
        )
      other
        올리다 오류::Internal DriverError, "메커니즘 #{speculative_auth_user.메커니즘.검사}에 대해 추측성 인증이 예기치 않게 성공했습니다 . "
      end
    elsif !description.중재자?
      인증합니다!
    end
  구출 mongo::오류, mongo::오류::AuthError => exc
    exc.service_id = service_id
    올리다
  end

  만약 description.알 수 없음?
    올리다 오류::Internal DriverError, "인증 성공 후 연결 설명을 알 수 없음: #{설명.검사}"
  end

  만약 서버.load_balancer? && !description.mongos?
    올리다 오류::배드 로드 밸런서 타깃, "로드 밸런싱된 작업을 수행하려면 mongos에 연결되어 있어야 하지만,#{주소.시드}에 있는 서버가 자체적으로 #{description.server_type.to_s.gsub('_', ' ')}"
  end
end