클래스: Mongo::Server::PendingConnection 비공개
- 상속:
-
ConnectionBase
- 객체
- ConnectionCommon
- ConnectionBase
- Mongo::Server::PendingConnection
- 확장자:
- 전달 가능
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이 클래스는 핸드셰이크 및 인증 중 연결을 캡슐화합니다.
상수 요약
ConnectionBase에서 상속된 상수
ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, ConnectionBase::REDUCED_MAX_BSON_SIZE
Loggable에서 포함된 상수
인스턴스 속성 요약 접기
-
#ID ⇒ 정수
읽기 전용
비공개
연결의 ID 입니다.
ConnectionBase에서 상속된 속성
#description, #options, #server
모니터링::게시 가능에 포함된 속성
ConnectionCommon에서 상속된 속성
인스턴스 메서드 요약 접기
- #핸드셰이크 및 인증! ⇒ 객체 비공개
-
#initialize(socket, 서버, 모니터링, options = {}) ⇒ PendingConnection
생성자
비공개
PendingConnection의 새 인스턴스입니다.
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의 새 인스턴스를 반환합니다.
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입니다.
38 39 40 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', 줄 38 def id @id end |
인스턴스 메서드 세부 정보
#핸드셰이크 및 인증! ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
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 메커니즘 협상을 진행 중입니다. = 옵션::편집됨.신규(:auth_mech => :scram256) speculative_auth_user = 인증::사용자.신규(.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 |