summaryrefslogtreecommitdiff
path: root/src/mongo/db/auth/auth_decorations.cpp
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@mongodb.com>2015-04-16 16:08:39 -0400
committerAndy Schwerin <schwerin@mongodb.com>2015-04-17 12:09:54 -0400
commitb085e20c6b387ee28c3b21f9402d5f917d2a253e (patch)
tree6995a12af5b04b40d7b5af288de570a9fc50abb3 /src/mongo/db/auth/auth_decorations.cpp
parent92310cd644240a760afb94bda469c319048251c1 (diff)
downloadmongo-b085e20c6b387ee28c3b21f9402d5f917d2a253e.tar.gz
SERVER-17817 Rename client_auth_session.cpp to auth_decorations.cpp
Diffstat (limited to 'src/mongo/db/auth/auth_decorations.cpp')
-rw-r--r--src/mongo/db/auth/auth_decorations.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/mongo/db/auth/auth_decorations.cpp b/src/mongo/db/auth/auth_decorations.cpp
new file mode 100644
index 00000000000..46a38c64ac1
--- /dev/null
+++ b/src/mongo/db/auth/auth_decorations.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2015 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects for
+ * all of the code used other than as permitted herein. If you modify file(s)
+ * with this exception, you may extend this exception to your version of the
+ * file(s), but you are not obligated to do so. If you do not wish to do so,
+ * delete this exception statement from your version. If you delete this
+ * exception statement from all source files in the program, then also delete
+ * it in the license file.
+ */
+
+#include "mongo/platform/basic.h"
+
+#include <memory>
+#include <utility>
+
+#include "mongo/db/auth/authentication_session.h"
+#include "mongo/db/auth/authorization_manager.h"
+#include "mongo/db/auth/authorization_session.h"
+#include "mongo/db/client_basic.h"
+#include "mongo/db/service_context.h"
+#include "mongo/util/assert_util.h"
+
+namespace mongo {
+namespace {
+
+ const auto getAuthenticationSession =
+ ClientBasic::declareDecoration<std::unique_ptr<AuthenticationSession>>();
+
+ const auto getAuthorizationManager =
+ ServiceContext::declareDecoration<std::unique_ptr<AuthorizationManager>>();
+
+ const auto getAuthorizationSession =
+ ClientBasic::declareDecoration<std::unique_ptr<AuthorizationSession>>();
+
+} // namespace
+
+ void AuthenticationSession::set(
+ ClientBasic* client,
+ std::unique_ptr<AuthenticationSession> newSession) {
+ getAuthenticationSession(client) = std::move(newSession);
+ }
+
+ void AuthenticationSession::swap(
+ ClientBasic* client,
+ std::unique_ptr<AuthenticationSession>& other) {
+ using std::swap;
+ swap(getAuthenticationSession(client), other);
+ }
+
+ AuthorizationManager* AuthorizationManager::get(ServiceContext* service) {
+ return getAuthorizationManager(service).get();
+ }
+
+ AuthorizationManager* AuthorizationManager::get(ServiceContext& service) {
+ return getAuthorizationManager(service).get();
+ }
+
+ void AuthorizationManager::set(ServiceContext* service,
+ std::unique_ptr<AuthorizationManager> authzManager) {
+ auto& manager = getAuthorizationManager(service);
+ invariant(authzManager);
+ invariant(!manager);
+ manager = std::move(authzManager);
+ }
+
+ AuthorizationSession* AuthorizationSession::get(ClientBasic* client) {
+ return get(*client);
+ }
+
+ AuthorizationSession* AuthorizationSession::get(ClientBasic& client) {
+ AuthorizationSession* retval = getAuthorizationSession(client).get();
+ massert(16481,
+ "No AuthorizationManager has been set up for this connection",
+ retval);
+ return retval;
+ }
+
+ bool AuthorizationSession::exists(ClientBasic* client) {
+ return getAuthorizationSession(client).get();
+ }
+
+ void AuthorizationSession::set(
+ ClientBasic* client,
+ std::unique_ptr<AuthorizationSession> authorizationSession) {
+ auto& authzSession = getAuthorizationSession(client);
+ invariant(authorizationSession);
+ invariant(!authzSession);
+ authzSession = std::move(authorizationSession);
+ }
+
+} // namespace mongo