/* * Copyright (c) 2008 - 2013 10gen, Inc. <http://10gen.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package course; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBObject; import sun.misc.BASE64Encoder; import java.security.SecureRandom; public class SessionDAO { private final DBCollection sessionsCollection; public SessionDAO(final DB blogDatabase) { sessionsCollection = blogDatabase.getCollection("sessions"); } public String findUserNameBySessionId(String sessionId) { DBObject session = getSession(sessionId); if (session == null) { return null; } else { return session.get("username").toString(); } } // starts a new session in the sessions table public String startSession(String username) { // get 32 byte random number. that's a lot of bits. SecureRandom generator = new SecureRandom(); byte randomBytes[] = new byte[32]; generator.nextBytes(randomBytes); BASE64Encoder encoder = new BASE64Encoder(); String sessionID = encoder.encode(randomBytes); // build the BSON object BasicDBObject session = new BasicDBObject("username", username); session.append("_id", sessionID); sessionsCollection.insert(session); return session.getString("_id"); } // ends the session by deleting it from the sesisons table public void endSession(String sessionID) { sessionsCollection.remove(new BasicDBObject("_id", sessionID)); } // retrieves the session from the sessions table public DBObject getSession(String sessionID) { return sessionsCollection.findOne(new BasicDBObject("_id", sessionID)); } }