mongo 1.12.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CONTRIBUTING.md +64 -0
- data/LICENSE +1 -1
- data/README.md +21 -126
- data/Rakefile +39 -21
- data/bin/mongo_console +6 -38
- data/lib/mongo/address/ipv4.rb +85 -0
- data/lib/mongo/address/ipv6.rb +85 -0
- data/lib/mongo/address/unix.rb +76 -0
- data/lib/mongo/address.rb +111 -0
- data/lib/mongo/auth/cr/conversation.rb +119 -0
- data/lib/mongo/auth/cr.rb +44 -0
- data/lib/mongo/auth/executable.rb +52 -0
- data/lib/mongo/auth/ldap/conversation.rb +92 -0
- data/lib/mongo/auth/ldap.rb +48 -0
- data/lib/mongo/auth/roles.rb +104 -0
- data/lib/mongo/auth/scram/conversation.rb +450 -0
- data/lib/mongo/auth/scram.rb +53 -0
- data/lib/mongo/auth/user/view.rb +102 -0
- data/lib/mongo/auth/user.rb +159 -0
- data/lib/mongo/auth/x509/conversation.rb +92 -0
- data/lib/mongo/auth/x509.rb +48 -0
- data/lib/mongo/auth.rb +108 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
- data/lib/mongo/bulk_write/deletable.rb +60 -0
- data/lib/mongo/bulk_write/insertable.rb +52 -0
- data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
- data/lib/mongo/bulk_write/replacable.rb +57 -0
- data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
- data/lib/mongo/bulk_write/updatable.rb +68 -0
- data/lib/mongo/bulk_write.rb +52 -0
- data/lib/mongo/client.rb +246 -0
- data/lib/mongo/cluster/topology/replica_set.rb +160 -0
- data/lib/mongo/cluster/topology/sharded.rb +132 -0
- data/lib/mongo/cluster/topology/standalone.rb +132 -0
- data/lib/mongo/cluster/topology/unknown.rb +155 -0
- data/lib/mongo/cluster/topology.rb +60 -0
- data/lib/mongo/cluster.rb +203 -0
- data/lib/mongo/collection/view/aggregation.rb +108 -0
- data/lib/mongo/collection/view/explainable.rb +49 -0
- data/lib/mongo/collection/view/immutable.rb +43 -0
- data/lib/mongo/collection/view/iterable.rb +48 -0
- data/lib/mongo/collection/view/map_reduce.rb +191 -0
- data/lib/mongo/collection/view/readable.rb +363 -0
- data/lib/mongo/collection/view/writable.rb +185 -0
- data/lib/mongo/collection/view.rb +169 -0
- data/lib/mongo/collection.rb +130 -1101
- data/lib/mongo/cursor.rb +78 -681
- data/lib/mongo/database/view.rb +101 -0
- data/lib/mongo/database.rb +224 -0
- data/lib/mongo/error/bulk_write_error.rb +41 -0
- data/lib/mongo/error/invalid_bulk_operation.rb +36 -0
- data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
- data/lib/mongo/error/invalid_collection_name.rb +39 -0
- data/lib/mongo/error/invalid_database_name.rb +39 -0
- data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
- data/lib/mongo/error/invalid_file.rb +38 -0
- data/lib/mongo/error/invalid_nonce.rb +46 -0
- data/lib/mongo/error/invalid_replacement_document.rb +39 -0
- data/lib/mongo/error/invalid_signature.rb +47 -0
- data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
- data/lib/mongo/error/max_bson_size.rb +40 -0
- data/lib/mongo/error/max_message_size.rb +42 -0
- data/{test/functional/db_connection_test.rb → lib/mongo/error/multi_index_drop.rb} +17 -8
- data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
- data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
- data/lib/mongo/error/parser.rb +77 -0
- data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
- data/lib/mongo/error/socket_timeout_error.rb +23 -0
- data/lib/mongo/error/unsupported_features.rb +43 -0
- data/lib/mongo/error.rb +82 -0
- data/lib/mongo/event/listeners.rb +63 -0
- data/lib/mongo/event/primary_elected.rb +53 -0
- data/lib/mongo/event/publisher.rb +42 -0
- data/lib/mongo/event/server_added.rb +53 -0
- data/lib/mongo/event/server_removed.rb +53 -0
- data/lib/mongo/event/subscriber.rb +41 -0
- data/lib/mongo/event.rb +40 -0
- data/lib/mongo/grid/file/chunk.rb +184 -0
- data/lib/mongo/grid/file/metadata.rb +229 -0
- data/lib/mongo/grid/file.rb +106 -0
- data/lib/mongo/grid/fs.rb +149 -0
- data/lib/mongo/{gridfs.rb → grid.rb} +3 -5
- data/lib/mongo/index/view.rb +261 -0
- data/lib/mongo/index.rb +64 -0
- data/lib/mongo/loggable.rb +126 -0
- data/lib/mongo/logger.rb +132 -0
- data/lib/mongo/operation/aggregate/result.rb +88 -0
- data/lib/mongo/operation/aggregate.rb +100 -0
- data/lib/mongo/operation/command.rb +62 -0
- data/lib/mongo/operation/executable.rb +105 -0
- data/lib/mongo/operation/kill_cursors.rb +39 -0
- data/lib/mongo/operation/limited.rb +37 -0
- data/lib/mongo/operation/list_collections/result.rb +114 -0
- data/lib/mongo/operation/list_indexes/result.rb +118 -0
- data/lib/mongo/operation/map_reduce/result.rb +122 -0
- data/lib/mongo/operation/map_reduce.rb +96 -0
- data/lib/mongo/operation/read/collections_info.rb +67 -0
- data/lib/mongo/operation/read/get_more.rb +71 -0
- data/lib/mongo/operation/read/indexes.rb +68 -0
- data/lib/mongo/operation/read/list_collections.rb +75 -0
- data/lib/mongo/operation/read/list_indexes.rb +77 -0
- data/lib/mongo/operation/read/query.rb +71 -0
- data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
- data/lib/mongo/operation/read_preferrable.rb +34 -0
- data/lib/mongo/operation/result.rb +259 -0
- data/lib/mongo/operation/specifiable.rb +397 -0
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +75 -0
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +144 -0
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +68 -0
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +129 -0
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +67 -0
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +162 -0
- data/lib/mongo/operation/write/bulk/bulk_update.rb +153 -0
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +83 -0
- data/lib/mongo/operation/write/bulk.rb +17 -0
- data/lib/mongo/operation/write/command/create_index.rb +50 -0
- data/lib/mongo/operation/write/command/create_user.rb +43 -0
- data/lib/mongo/operation/write/command/delete.rb +56 -0
- data/lib/mongo/operation/write/command/drop_index.rb +51 -0
- data/lib/mongo/operation/write/command/insert.rb +55 -0
- data/lib/mongo/operation/write/command/remove_user.rb +42 -0
- data/lib/mongo/operation/write/command/update.rb +60 -0
- data/lib/mongo/operation/write/command/writable.rb +61 -0
- data/lib/mongo/operation/write/command.rb +22 -0
- data/lib/mongo/operation/write/create_index.rb +89 -0
- data/lib/mongo/operation/write/create_user.rb +75 -0
- data/lib/mongo/operation/write/delete/result.rb +40 -0
- data/lib/mongo/operation/write/delete.rb +93 -0
- data/lib/mongo/operation/write/drop_index.rb +62 -0
- data/lib/mongo/{utils/thread_local_variable_manager.rb → operation/write/insert/result.rb} +15 -8
- data/lib/mongo/operation/write/insert.rb +90 -0
- data/lib/mongo/operation/write/remove_user.rb +70 -0
- data/lib/mongo/operation/write/update/result.rb +160 -0
- data/lib/mongo/operation/write/update.rb +103 -0
- data/lib/mongo/{connection/socket/socket_util.rb → operation/write.rb} +10 -24
- data/lib/mongo/operation.rb +25 -0
- data/lib/mongo/options/mapper.rb +78 -0
- data/lib/mongo/options.rb +15 -0
- data/lib/mongo/protocol/bit_vector.rb +61 -0
- data/lib/mongo/protocol/delete.rb +94 -0
- data/lib/mongo/protocol/get_more.rb +99 -0
- data/lib/mongo/protocol/insert.rb +99 -0
- data/lib/mongo/protocol/kill_cursors.rb +74 -0
- data/lib/mongo/protocol/message.rb +252 -0
- data/lib/mongo/protocol/query.rb +147 -0
- data/lib/mongo/protocol/reply.rb +72 -0
- data/lib/mongo/protocol/serializers.rb +180 -0
- data/lib/mongo/protocol/update.rb +111 -0
- data/lib/mongo/protocol.rb +15 -0
- data/lib/mongo/server/connectable.rb +110 -0
- data/lib/mongo/server/connection.rb +134 -0
- data/lib/mongo/server/connection_pool/queue.rb +182 -0
- data/lib/mongo/server/connection_pool.rb +141 -0
- data/lib/mongo/server/context.rb +66 -0
- data/lib/mongo/server/description/features.rb +85 -0
- data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
- data/lib/mongo/server/description/inspector/server_added.rb +59 -0
- data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
- data/lib/mongo/server/description/inspector.rb +79 -0
- data/lib/mongo/server/description.rb +450 -0
- data/lib/mongo/server/monitor/connection.rb +89 -0
- data/lib/mongo/server/monitor.rb +176 -0
- data/lib/mongo/server.rb +163 -0
- data/lib/mongo/server_selector/nearest.rb +94 -0
- data/lib/mongo/server_selector/primary.rb +88 -0
- data/lib/mongo/server_selector/primary_preferred.rb +94 -0
- data/lib/mongo/server_selector/secondary.rb +91 -0
- data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
- data/lib/mongo/server_selector/selectable.rb +209 -0
- data/lib/mongo/server_selector.rb +81 -0
- data/lib/mongo/socket/ssl.rb +130 -0
- data/lib/mongo/socket/tcp.rb +69 -0
- data/lib/mongo/socket/unix.rb +64 -0
- data/lib/mongo/socket.rb +179 -0
- data/lib/mongo/uri.rb +504 -0
- data/lib/mongo/version.rb +21 -0
- data/lib/mongo/write_concern/acknowledged.rb +52 -0
- data/lib/mongo/write_concern/normalizable.rb +51 -0
- data/lib/mongo/write_concern/unacknowledged.rb +55 -0
- data/lib/mongo/write_concern.rb +99 -0
- data/lib/mongo.rb +24 -82
- data/mongo.gemspec +17 -14
- data/spec/certificates/ca.pem +17 -0
- data/spec/certificates/client.pem +101 -0
- data/spec/certificates/crl.pem +10 -0
- data/spec/certificates/crl_client_revoked.pem +12 -0
- data/spec/certificates/password_protected.pem +51 -0
- data/spec/certificates/server.pem +34 -0
- data/spec/mongo/address/ipv4_spec.rb +74 -0
- data/spec/mongo/address/ipv6_spec.rb +74 -0
- data/spec/mongo/address/unix_spec.rb +30 -0
- data/spec/mongo/address_spec.rb +206 -0
- data/spec/mongo/auth/cr_spec.rb +59 -0
- data/spec/mongo/auth/ldap_spec.rb +40 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
- data/spec/mongo/auth/scram_spec.rb +55 -0
- data/spec/mongo/auth/user/view_spec.rb +76 -0
- data/spec/mongo/auth/user_spec.rb +190 -0
- data/spec/mongo/auth/x509_spec.rb +40 -0
- data/spec/mongo/auth_spec.rb +65 -0
- data/spec/mongo/bulk/bulk_write_spec.rb +262 -0
- data/spec/mongo/client_spec.rb +564 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
- data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
- data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
- data/spec/mongo/cluster/topology_spec.rb +65 -0
- data/spec/mongo/cluster_spec.rb +129 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +148 -0
- data/spec/mongo/collection/view/explainable_spec.rb +32 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
- data/spec/mongo/collection/view/readable_spec.rb +603 -0
- data/spec/mongo/collection/view/writable_spec.rb +679 -0
- data/spec/mongo/collection/view_spec.rb +530 -0
- data/spec/mongo/collection_spec.rb +362 -0
- data/spec/mongo/crud_spec.rb +42 -0
- data/spec/mongo/cursor_spec.rb +295 -0
- data/spec/mongo/database_spec.rb +302 -0
- data/spec/mongo/error/parser_spec.rb +119 -0
- data/spec/mongo/event/publisher_spec.rb +50 -0
- data/spec/mongo/event/subscriber_spec.rb +34 -0
- data/spec/mongo/grid/file/chunk_spec.rb +226 -0
- data/spec/mongo/grid/file/metadata_spec.rb +92 -0
- data/spec/mongo/grid/file_spec.rb +172 -0
- data/spec/mongo/grid/fs_spec.rb +129 -0
- data/spec/mongo/index/view_spec.rb +330 -0
- data/spec/mongo/loggable_spec.rb +62 -0
- data/spec/mongo/logger_spec.rb +97 -0
- data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
- data/spec/mongo/operation/aggregate_spec.rb +127 -0
- data/spec/mongo/operation/command_spec.rb +98 -0
- data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
- data/spec/mongo/operation/limited_spec.rb +50 -0
- data/spec/mongo/operation/map_reduce_spec.rb +143 -0
- data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
- data/spec/mongo/operation/read/get_more_spec.rb +81 -0
- data/spec/mongo/operation/read/indexes_spec.rb +31 -0
- data/spec/mongo/operation/read/query_spec.rb +84 -0
- data/spec/mongo/operation/result_spec.rb +275 -0
- data/spec/mongo/operation/specifiable_spec.rb +53 -0
- data/spec/mongo/operation/write/bulk_delete_spec.rb +235 -0
- data/spec/mongo/operation/write/bulk_insert_spec.rb +235 -0
- data/spec/mongo/operation/write/bulk_update_spec.rb +236 -0
- data/spec/mongo/operation/write/command/delete_spec.rb +103 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +103 -0
- data/spec/mongo/operation/write/command/update_spec.rb +109 -0
- data/spec/mongo/operation/write/create_index_spec.rb +63 -0
- data/spec/mongo/operation/write/create_user_spec.rb +44 -0
- data/spec/mongo/operation/write/delete_spec.rb +186 -0
- data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
- data/spec/mongo/operation/write/insert_spec.rb +244 -0
- data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
- data/spec/mongo/operation/write/response_spec.rb +85 -0
- data/spec/mongo/operation/write/update_spec.rb +228 -0
- data/spec/mongo/protocol/delete_spec.rb +167 -0
- data/spec/mongo/protocol/get_more_spec.rb +146 -0
- data/spec/mongo/protocol/insert_spec.rb +161 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
- data/spec/mongo/protocol/query_spec.rb +285 -0
- data/spec/mongo/protocol/reply_spec.rb +157 -0
- data/spec/mongo/protocol/update_spec.rb +186 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
- data/spec/mongo/server/connection_pool_spec.rb +120 -0
- data/spec/mongo/server/connection_spec.rb +312 -0
- data/spec/mongo/server/description/features_spec.rb +138 -0
- data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
- data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
- data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
- data/spec/mongo/server/description_spec.rb +510 -0
- data/spec/mongo/server/monitor_spec.rb +144 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
- data/spec/mongo/server_selection_rtt_spec.rb +104 -0
- data/spec/mongo/server_selection_spec.rb +89 -0
- data/spec/mongo/server_selector/nearest_spec.rb +250 -0
- data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
- data/spec/mongo/server_selector/primary_spec.rb +114 -0
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
- data/spec/mongo/server_selector/secondary_spec.rb +196 -0
- data/spec/mongo/server_selector_spec.rb +101 -0
- data/spec/mongo/server_spec.rb +131 -0
- data/spec/mongo/uri_spec.rb +517 -0
- data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
- data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
- data/spec/spec_helper.rb +133 -0
- data/spec/support/authorization.rb +247 -0
- data/spec/support/crud/read.rb +144 -0
- data/spec/support/crud/write.rb +214 -0
- data/spec/support/crud.rb +203 -0
- data/spec/support/crud_tests/read/aggregate.yml +43 -0
- data/spec/support/crud_tests/read/count.yml +37 -0
- data/spec/support/crud_tests/read/distinct.yml +33 -0
- data/spec/support/crud_tests/read/find.yml +50 -0
- data/spec/support/crud_tests/write/deleteMany.yml +36 -0
- data/spec/support/crud_tests/write/deleteOne.yml +49 -0
- data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
- data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
- data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
- data/spec/support/crud_tests/write/insertMany.yml +24 -0
- data/spec/support/crud_tests/write/insertOne.yml +19 -0
- data/spec/support/crud_tests/write/replaceOne.yml +96 -0
- data/spec/support/crud_tests/write/updateMany.yml +83 -0
- data/spec/support/crud_tests/write/updateOne.yml +80 -0
- data/spec/support/helpers.rb +140 -0
- data/spec/support/matchers.rb +37 -0
- data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
- data/spec/support/sdam/rs/discover_passives.yml +41 -0
- data/spec/support/sdam/rs/discover_primary.yml +40 -0
- data/spec/support/sdam/rs/discover_secondary.yml +41 -0
- data/spec/support/sdam/rs/discovery.yml +195 -0
- data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
- data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
- data/spec/support/sdam/rs/member_reconfig.yml +68 -0
- data/spec/support/sdam/rs/member_standalone.yml +60 -0
- data/spec/support/sdam/rs/new_primary.yml +74 -0
- data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
- data/spec/support/sdam/rs/non_rs_member.yml +31 -0
- data/spec/support/sdam/rs/normalize_case.yml +49 -0
- data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
- data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
- data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
- data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
- data/spec/support/sdam/rs/response_from_removed.yml +63 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
- data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
- data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
- data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
- data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
- data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
- data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
- data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
- data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
- data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
- data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
- data/spec/support/sdam/single/not_ok_response.yml +39 -0
- data/spec/support/sdam/single/standalone_removed.yml +32 -0
- data/spec/support/sdam/single/unavailable_seed.yml +28 -0
- data/spec/support/server_discovery_and_monitoring.rb +167 -0
- data/spec/support/server_selection/rtt/first_value.yml +4 -0
- data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +33 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +19 -0
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +11 -0
- data/spec/support/server_selection.rb +157 -0
- data/spec/support/server_selection_rtt.rb +41 -0
- data/spec/support/shared/bulk_write.rb +535 -0
- data/spec/support/shared/cursor.rb +38 -0
- data/spec/support/shared/operation.rb +77 -0
- data/spec/support/shared/protocol.rb +31 -0
- data/spec/support/shared/server_selector.rb +111 -0
- data/spec/support/shared/socket.rb +82 -0
- data/spec/support/travis.rb +14 -0
- data.tar.gz.sig +2 -3
- metadata +583 -186
- metadata.gz.sig +0 -0
- data/VERSION +0 -1
- data/lib/mongo/bulk_write_collection_view.rb +0 -387
- data/lib/mongo/collection_writer.rb +0 -364
- data/lib/mongo/connection/node.rb +0 -249
- data/lib/mongo/connection/pool.rb +0 -340
- data/lib/mongo/connection/pool_manager.rb +0 -320
- data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
- data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
- data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
- data/lib/mongo/connection/socket/unix_socket.rb +0 -39
- data/lib/mongo/db.rb +0 -808
- data/lib/mongo/exception.rb +0 -145
- data/lib/mongo/functional/authentication.rb +0 -455
- data/lib/mongo/functional/logging.rb +0 -85
- data/lib/mongo/functional/read_preference.rb +0 -183
- data/lib/mongo/functional/scram.rb +0 -556
- data/lib/mongo/functional/uri_parser.rb +0 -409
- data/lib/mongo/functional/write_concern.rb +0 -66
- data/lib/mongo/gridfs/grid.rb +0 -112
- data/lib/mongo/gridfs/grid_ext.rb +0 -53
- data/lib/mongo/gridfs/grid_file_system.rb +0 -163
- data/lib/mongo/gridfs/grid_io.rb +0 -484
- data/lib/mongo/legacy.rb +0 -140
- data/lib/mongo/mongo_client.rb +0 -697
- data/lib/mongo/mongo_replica_set_client.rb +0 -535
- data/lib/mongo/mongo_sharded_client.rb +0 -159
- data/lib/mongo/networking.rb +0 -372
- data/lib/mongo/utils/conversions.rb +0 -110
- data/lib/mongo/utils/core_ext.rb +0 -70
- data/lib/mongo/utils/server_version.rb +0 -69
- data/lib/mongo/utils/support.rb +0 -80
- data/test/functional/authentication_test.rb +0 -39
- data/test/functional/bulk_api_stress_test.rb +0 -133
- data/test/functional/bulk_write_collection_view_test.rb +0 -1198
- data/test/functional/client_test.rb +0 -627
- data/test/functional/collection_test.rb +0 -2175
- data/test/functional/collection_writer_test.rb +0 -83
- data/test/functional/conversions_test.rb +0 -163
- data/test/functional/cursor_fail_test.rb +0 -57
- data/test/functional/cursor_message_test.rb +0 -56
- data/test/functional/cursor_test.rb +0 -683
- data/test/functional/db_api_test.rb +0 -835
- data/test/functional/db_test.rb +0 -348
- data/test/functional/grid_file_system_test.rb +0 -285
- data/test/functional/grid_io_test.rb +0 -252
- data/test/functional/grid_test.rb +0 -273
- data/test/functional/pool_test.rb +0 -136
- data/test/functional/safe_test.rb +0 -98
- data/test/functional/support_test.rb +0 -62
- data/test/functional/timeout_test.rb +0 -60
- data/test/functional/uri_test.rb +0 -446
- data/test/functional/write_concern_test.rb +0 -118
- data/test/helpers/general.rb +0 -50
- data/test/helpers/test_unit.rb +0 -476
- data/test/replica_set/authentication_test.rb +0 -37
- data/test/replica_set/basic_test.rb +0 -189
- data/test/replica_set/client_test.rb +0 -393
- data/test/replica_set/connection_test.rb +0 -138
- data/test/replica_set/count_test.rb +0 -66
- data/test/replica_set/cursor_test.rb +0 -220
- data/test/replica_set/insert_test.rb +0 -157
- data/test/replica_set/max_values_test.rb +0 -151
- data/test/replica_set/pinning_test.rb +0 -105
- data/test/replica_set/query_test.rb +0 -73
- data/test/replica_set/read_preference_test.rb +0 -219
- data/test/replica_set/refresh_test.rb +0 -211
- data/test/replica_set/replication_ack_test.rb +0 -95
- data/test/sharded_cluster/basic_test.rb +0 -203
- data/test/shared/authentication/basic_auth_shared.rb +0 -260
- data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
- data/test/shared/authentication/gssapi_shared.rb +0 -176
- data/test/shared/authentication/sasl_plain_shared.rb +0 -96
- data/test/shared/authentication/scram_shared.rb +0 -92
- data/test/shared/ssl_shared.rb +0 -235
- data/test/test_helper.rb +0 -61
- data/test/threading/basic_test.rb +0 -120
- data/test/tools/mongo_config.rb +0 -708
- data/test/tools/mongo_config_test.rb +0 -160
- data/test/unit/client_test.rb +0 -381
- data/test/unit/collection_test.rb +0 -166
- data/test/unit/connection_test.rb +0 -335
- data/test/unit/cursor_test.rb +0 -307
- data/test/unit/db_test.rb +0 -136
- data/test/unit/grid_test.rb +0 -76
- data/test/unit/mongo_sharded_client_test.rb +0 -48
- data/test/unit/node_test.rb +0 -93
- data/test/unit/pool_manager_test.rb +0 -111
- data/test/unit/read_pref_test.rb +0 -406
- data/test/unit/read_test.rb +0 -159
- data/test/unit/safe_test.rb +0 -158
- data/test/unit/sharding_pool_manager_test.rb +0 -84
- data/test/unit/write_concern_test.rb +0 -175
@@ -0,0 +1,111 @@
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the 'License');
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an 'AS IS' BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'mongo/address/ipv4'
|
16
|
+
require 'mongo/address/ipv6'
|
17
|
+
require 'mongo/address/unix'
|
18
|
+
|
19
|
+
module Mongo
|
20
|
+
|
21
|
+
# Represents an address to a server, either with an IP address or socket
|
22
|
+
# path.
|
23
|
+
#
|
24
|
+
# @since 2.0.0
|
25
|
+
class Address
|
26
|
+
extend Forwardable
|
27
|
+
|
28
|
+
# Delegate the ip, host, and port methods to the resolver.
|
29
|
+
#
|
30
|
+
# @since 2.0.0
|
31
|
+
def_delegators :@resolver, :host, :port, :socket, :seed, :to_s
|
32
|
+
|
33
|
+
# @return [ Integer ] port The port to the connect to.
|
34
|
+
attr_reader :resolver
|
35
|
+
|
36
|
+
# Check equality of the address to another.
|
37
|
+
#
|
38
|
+
# @example Check address equality.
|
39
|
+
# address == other
|
40
|
+
#
|
41
|
+
# @param [ Object ] other The other object.
|
42
|
+
#
|
43
|
+
# @return [ true, false ] If the objects are equal.
|
44
|
+
#
|
45
|
+
# @since 2.0.0
|
46
|
+
def ==(other)
|
47
|
+
return false unless other.is_a?(Address)
|
48
|
+
host == other.host && port == other.port
|
49
|
+
end
|
50
|
+
|
51
|
+
# Calculate the hash value for the address.
|
52
|
+
#
|
53
|
+
# @example Calculate the hash value.
|
54
|
+
# address.hash
|
55
|
+
#
|
56
|
+
# @return [ Integer ] The hash value.
|
57
|
+
#
|
58
|
+
# @since 2.0.0
|
59
|
+
def hash
|
60
|
+
[ host, port ].hash
|
61
|
+
end
|
62
|
+
|
63
|
+
# Initialize the address.
|
64
|
+
#
|
65
|
+
# @example Initialize the address with a DNS entry and port.
|
66
|
+
# Mongo::Address.new("app.example.com:27017")
|
67
|
+
#
|
68
|
+
# @example Initialize the address with a DNS entry and no port.
|
69
|
+
# Mongo::Address.new("app.example.com")
|
70
|
+
#
|
71
|
+
# @example Initialize the address with an IPV4 address and port.
|
72
|
+
# Mongo::Address.new("127.0.0.1:27017")
|
73
|
+
#
|
74
|
+
# @example Initialize the address with an IPV4 address and no port.
|
75
|
+
# Mongo::Address.new("127.0.0.1")
|
76
|
+
#
|
77
|
+
# @example Initialize the address with an IPV6 address and port.
|
78
|
+
# Mongo::Address.new("[::1]:27017")
|
79
|
+
#
|
80
|
+
# @example Initialize the address with an IPV6 address and no port.
|
81
|
+
# Mongo::Address.new("[::1]")
|
82
|
+
#
|
83
|
+
# @example Initialize the address with a unix socket.
|
84
|
+
# Mongo::Address.new("/path/to/socket.sock")
|
85
|
+
#
|
86
|
+
# @param [ String ] seed The provided address.
|
87
|
+
# @param [ Hash ] options The address options.
|
88
|
+
#
|
89
|
+
# @since 2.0.0
|
90
|
+
def initialize(seed, options = {})
|
91
|
+
address = seed.downcase
|
92
|
+
case address
|
93
|
+
when Unix::MATCH then @resolver = Unix.new(address)
|
94
|
+
when IPv6::MATCH then @resolver = IPv6.new(address)
|
95
|
+
else @resolver = IPv4.new(address)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# Get a pretty printed address inspection.
|
100
|
+
#
|
101
|
+
# @example Get the address inspection.
|
102
|
+
# address.inspect
|
103
|
+
#
|
104
|
+
# @return [ String ] The nice inspection string.
|
105
|
+
#
|
106
|
+
# @since 2.0.0
|
107
|
+
def inspect
|
108
|
+
"#<Mongo::Address:0x#{object_id} address=#{resolver.to_s}>"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# Copyright (C) 2014 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
module Auth
|
17
|
+
class CR
|
18
|
+
|
19
|
+
# Defines behaviour around a single MONGODB-CR conversation between the
|
20
|
+
# client and server.
|
21
|
+
#
|
22
|
+
# @since 2.0.0
|
23
|
+
class Conversation
|
24
|
+
|
25
|
+
# The login message base.
|
26
|
+
#
|
27
|
+
# @since 2.0.0
|
28
|
+
LOGIN = { authenticate: 1 }.freeze
|
29
|
+
|
30
|
+
# @return [ Protocol::Reply ] reply The current reply in the
|
31
|
+
# conversation.
|
32
|
+
attr_reader :reply
|
33
|
+
|
34
|
+
# @return [ String ] database The database to authenticate against.
|
35
|
+
attr_reader :database
|
36
|
+
|
37
|
+
# @return [ String ] nonce The initial auth nonce.
|
38
|
+
attr_reader :nonce
|
39
|
+
|
40
|
+
# @return [ User ] user The user for the conversation.
|
41
|
+
attr_reader :user
|
42
|
+
|
43
|
+
# Continue the CR conversation. This sends the client final message
|
44
|
+
# to the server after setting the reply from the previous server
|
45
|
+
# communication.
|
46
|
+
#
|
47
|
+
# @example Continue the conversation.
|
48
|
+
# conversation.continue(reply)
|
49
|
+
#
|
50
|
+
# @param [ Protocol::Reply ] reply The reply of the previous
|
51
|
+
# message.
|
52
|
+
#
|
53
|
+
# @return [ Protocol::Query ] The next message to send.
|
54
|
+
#
|
55
|
+
# @since 2.0.0
|
56
|
+
def continue(reply)
|
57
|
+
validate!(reply)
|
58
|
+
Protocol::Query.new(
|
59
|
+
database,
|
60
|
+
Database::COMMAND,
|
61
|
+
LOGIN.merge(user: user.name, nonce: nonce, key: user.auth_key(nonce)),
|
62
|
+
limit: -1
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Finalize the CR conversation. This is meant to be iterated until
|
67
|
+
# the provided reply indicates the conversation is finished.
|
68
|
+
#
|
69
|
+
# @example Finalize the conversation.
|
70
|
+
# conversation.finalize(reply)
|
71
|
+
#
|
72
|
+
# @param [ Protocol::Reply ] reply The reply of the previous
|
73
|
+
# message.
|
74
|
+
#
|
75
|
+
# @return [ Protocol::Query ] The next message to send.
|
76
|
+
#
|
77
|
+
# @since 2.0.0
|
78
|
+
def finalize(reply)
|
79
|
+
validate!(reply)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Start the CR conversation. This returns the first message that
|
83
|
+
# needs to be send to the server.
|
84
|
+
#
|
85
|
+
# @example Start the conversation.
|
86
|
+
# conversation.start
|
87
|
+
#
|
88
|
+
# @return [ Protocol::Query ] The first CR conversation message.
|
89
|
+
#
|
90
|
+
# @since 2.0.0
|
91
|
+
def start
|
92
|
+
Protocol::Query.new(database, Database::COMMAND, Auth::GET_NONCE, limit: -1)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Create the new conversation.
|
96
|
+
#
|
97
|
+
# @example Create the new coversation.
|
98
|
+
# Conversation.new(user, "admin")
|
99
|
+
#
|
100
|
+
# @param [ Auth::User ] user The user to converse about.
|
101
|
+
# @param [ String ] database The database to authenticate against.
|
102
|
+
#
|
103
|
+
# @since 2.0.0
|
104
|
+
def initialize(user, database)
|
105
|
+
@user = user
|
106
|
+
@database = database
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def validate!(reply)
|
112
|
+
raise Unauthorized.new(user) if reply.documents[0]['ok'] != 1
|
113
|
+
@nonce = reply.documents[0][Auth::NONCE]
|
114
|
+
@reply = reply
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'mongo/auth/cr/conversation'
|
16
|
+
|
17
|
+
module Mongo
|
18
|
+
module Auth
|
19
|
+
|
20
|
+
# Defines behaviour for MongoDB-CR authentication.
|
21
|
+
#
|
22
|
+
# @since 2.0.0
|
23
|
+
class CR
|
24
|
+
include Executable
|
25
|
+
|
26
|
+
# Log the user in on the given connection.
|
27
|
+
#
|
28
|
+
# @example Log the user in.
|
29
|
+
# user.login(connection)
|
30
|
+
#
|
31
|
+
# @param [ Mongo::Connection ] connection The connection to log into.
|
32
|
+
#
|
33
|
+
# @return [ Protocol::Reply ] The authentication response.
|
34
|
+
#
|
35
|
+
# @since 2.0.0
|
36
|
+
def login(connection)
|
37
|
+
conversation = Conversation.new(user, auth_database(connection))
|
38
|
+
reply = connection.dispatch([ conversation.start ])
|
39
|
+
reply = connection.dispatch([ conversation.continue(reply) ])
|
40
|
+
conversation.finalize(reply)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
module Auth
|
17
|
+
|
18
|
+
# Defines common behaviour for executable authorization commands.
|
19
|
+
#
|
20
|
+
# @since 2.0.0
|
21
|
+
module Executable
|
22
|
+
|
23
|
+
# @return [ Mongo::Auth::User ] The user to authenticate.
|
24
|
+
attr_reader :user
|
25
|
+
|
26
|
+
# Instantiate a new authenticator.
|
27
|
+
#
|
28
|
+
# @example Create the authenticator.
|
29
|
+
# Mongo::Auth::X509.new(user)
|
30
|
+
#
|
31
|
+
# @param [ Mongo::Auth::User ] user The user to authenticate.
|
32
|
+
#
|
33
|
+
# @since 2.0.0
|
34
|
+
def initialize(user)
|
35
|
+
@user = user
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
# If we are on MongoDB 2.6 and higher, we *always* authorize against the
|
41
|
+
# admin database. Otherwise for 2.4 and lower we authorize against the
|
42
|
+
# auth source provided. The logic for that is encapsulated in the User class.
|
43
|
+
def auth_database(connection)
|
44
|
+
if connection.features.write_command_enabled?
|
45
|
+
Database::ADMIN
|
46
|
+
else
|
47
|
+
user.auth_source
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# Copyright (C) 2014 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
module Auth
|
17
|
+
class LDAP
|
18
|
+
|
19
|
+
# Defines behaviour around a single PLAIN conversation between the
|
20
|
+
# client and server.
|
21
|
+
#
|
22
|
+
# @since 2.0.0
|
23
|
+
class Conversation
|
24
|
+
|
25
|
+
# The login message.
|
26
|
+
#
|
27
|
+
# @since 2.0.0
|
28
|
+
LOGIN = { authenticate: 1, digestPassword: false }.freeze
|
29
|
+
|
30
|
+
# @return [ Protocol::Reply ] reply The current reply in the
|
31
|
+
# conversation.
|
32
|
+
attr_reader :reply
|
33
|
+
|
34
|
+
# @return [ User ] user The user for the conversation.
|
35
|
+
attr_reader :user
|
36
|
+
|
37
|
+
# Finalize the PLAIN conversation. This is meant to be iterated until
|
38
|
+
# the provided reply indicates the conversation is finished.
|
39
|
+
#
|
40
|
+
# @example Finalize the conversation.
|
41
|
+
# conversation.finalize(reply)
|
42
|
+
#
|
43
|
+
# @param [ Protocol::Reply ] reply The reply of the previous
|
44
|
+
# message.
|
45
|
+
#
|
46
|
+
# @return [ Protocol::Query ] The next message to send.
|
47
|
+
#
|
48
|
+
# @since 2.0.0
|
49
|
+
def finalize(reply)
|
50
|
+
validate!(reply)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Start the PLAIN conversation. This returns the first message that
|
54
|
+
# needs to be send to the server.
|
55
|
+
#
|
56
|
+
# @example Start the conversation.
|
57
|
+
# conversation.start
|
58
|
+
#
|
59
|
+
# @return [ Protocol::Query ] The first PLAIN conversation message.
|
60
|
+
#
|
61
|
+
# @since 2.0.0
|
62
|
+
def start
|
63
|
+
Protocol::Query.new(
|
64
|
+
Auth::EXTERNAL,
|
65
|
+
Database::COMMAND,
|
66
|
+
LOGIN.merge(user: user.name, password: user.password, mechanism: LDAP::MECHANISM),
|
67
|
+
limit: -1
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Create the new conversation.
|
72
|
+
#
|
73
|
+
# @example Create the new coversation.
|
74
|
+
# Conversation.new(user, "admin")
|
75
|
+
#
|
76
|
+
# @param [ Auth::User ] user The user to converse about.
|
77
|
+
#
|
78
|
+
# @since 2.0.0
|
79
|
+
def initialize(user)
|
80
|
+
@user = user
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def validate!(reply)
|
86
|
+
raise Unauthorized.new(user) if reply.documents[0]['ok'] != 1
|
87
|
+
@reply = reply
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'mongo/auth/ldap/conversation'
|
16
|
+
|
17
|
+
module Mongo
|
18
|
+
module Auth
|
19
|
+
|
20
|
+
# Defines behaviour for LDAP Proxy authentication.
|
21
|
+
#
|
22
|
+
# @since 2.0.0
|
23
|
+
class LDAP
|
24
|
+
include Executable
|
25
|
+
|
26
|
+
# The authentication mechinism string.
|
27
|
+
#
|
28
|
+
# @since 2.0.0
|
29
|
+
MECHANISM = 'PLAIN'.freeze
|
30
|
+
|
31
|
+
# Log the user in on the given connection.
|
32
|
+
#
|
33
|
+
# @example Log the user in.
|
34
|
+
# user.login(connection)
|
35
|
+
#
|
36
|
+
# @param [ Mongo::Connection ] connection The connection to log into.
|
37
|
+
# on.
|
38
|
+
#
|
39
|
+
# @return [ Protocol::Reply ] The authentication response.
|
40
|
+
#
|
41
|
+
# @since 2.0.0
|
42
|
+
def login(connection)
|
43
|
+
conversation = Conversation.new(user)
|
44
|
+
conversation.finalize(connection.dispatch([ conversation.start ]))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
module Auth
|
17
|
+
|
18
|
+
# Provides constants for the built in roles provided by MongoDB.
|
19
|
+
#
|
20
|
+
# @since 2.0.0
|
21
|
+
module Roles
|
22
|
+
|
23
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#backup
|
24
|
+
#
|
25
|
+
# @since 2.0.0
|
26
|
+
BACKUP = 'backup'.freeze
|
27
|
+
|
28
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#clusterAdmin
|
29
|
+
#
|
30
|
+
# @since 2.0.0
|
31
|
+
CLUSTER_ADMIN = 'clusterAdmin'.freeze
|
32
|
+
|
33
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#clusterManager
|
34
|
+
#
|
35
|
+
# @since 2.0.0
|
36
|
+
CLUSTER_MANAGER = 'clusterManager'.freeze
|
37
|
+
|
38
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#clusterMonitor
|
39
|
+
#
|
40
|
+
# @since 2.0.0
|
41
|
+
CLUSTER_MONITOR = 'clusterMonitor'.freeze
|
42
|
+
|
43
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin
|
44
|
+
#
|
45
|
+
# @since 2.0.0
|
46
|
+
DATABASE_ADMIN = 'dbAdmin'.freeze
|
47
|
+
|
48
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdminAnyDatabase
|
49
|
+
#
|
50
|
+
# @since 2.0.0
|
51
|
+
DATABASE_ADMIN_ANY_DATABASE = 'dbAdminAnyDatabase'.freeze
|
52
|
+
|
53
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#dbOwner
|
54
|
+
#
|
55
|
+
# @since 2.0.0
|
56
|
+
DATABASE_OWNER = 'dbOwner'.freeze
|
57
|
+
|
58
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#hostManager
|
59
|
+
#
|
60
|
+
# @since 2.0.0
|
61
|
+
HOST_MANAGER = 'hostManager'.freeze
|
62
|
+
|
63
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#read
|
64
|
+
#
|
65
|
+
# @since 2.0.0
|
66
|
+
READ = 'read'.freeze
|
67
|
+
|
68
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#readAnyDatabase
|
69
|
+
#
|
70
|
+
# @since 2.0.0
|
71
|
+
READ_ANY_DATABASE = 'readAnyDatabase'.freeze
|
72
|
+
|
73
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#readWriteAnyDatabase
|
74
|
+
#
|
75
|
+
# @since 2.0.0
|
76
|
+
READ_WRITE_ANY_DATABASE = 'readWriteAnyDatabase'.freeze
|
77
|
+
|
78
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
|
79
|
+
#
|
80
|
+
# @since 2.0.0
|
81
|
+
READ_WRITE = 'readWrite'.freeze
|
82
|
+
|
83
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#restore
|
84
|
+
#
|
85
|
+
# @since 2.0.0
|
86
|
+
RESTORE = 'restore'.freeze
|
87
|
+
|
88
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#root
|
89
|
+
#
|
90
|
+
# @since 2.0.0
|
91
|
+
ROOT = 'root'.freeze
|
92
|
+
|
93
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#userAdmin
|
94
|
+
#
|
95
|
+
# @since 2.0.0
|
96
|
+
USER_ADMIN = 'userAdmin'.freeze
|
97
|
+
|
98
|
+
# @see http://docs.mongodb.org/manual/reference/built-in-roles/#userAdminAnyDatabase
|
99
|
+
#
|
100
|
+
# @since 2.0.0
|
101
|
+
USER_ADMIN_ANY_DATABASE = 'userAdminAnyDatabase'.freeze
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|