package org.red5.server.plugin.admin.dao;
/*
* RED5 Open Source Flash Server - http://www.osflash.org/red5
*
* Copyright (c) 2006-2008 by respective authors (see below). All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any later
* version.
*
* This library 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this library; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import javax.sql.DataSource;
import org.red5.logging.Red5LoggerFactory;
import org.red5.server.plugin.admin.domain.UserDetails;
import org.slf4j.Logger;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
/**
* Simple DAO for manipulation of the user database.
*
* @author Paul Gregoire (mondain@gmail.com)
*/
public class UserDAO {
private static Logger log = Red5LoggerFactory.getLogger(UserDAO.class, "admin");
public static boolean addUser(String username, String hashedPassword) {
boolean result = false;
Connection conn = null;
PreparedStatement stmt = null;
try {
// JDBC stuff
DataSource ds = UserDatabase.getDataSource();
conn = ds.getConnection();
//make a statement
stmt = conn.prepareStatement("INSERT INTO APPUSER (username, password, enabled) VALUES (?, ?, 'enabled')");
stmt.setString(1, username);
stmt.setString(2, hashedPassword);
log.debug("Add user: {}", stmt.execute());
//add role
stmt = conn.prepareStatement("INSERT INTO APPROLE (username, authority) VALUES (?, 'ROLE_SUPERVISOR')");
stmt.setString(1, username);
log.debug("Add role: {}", stmt.execute());
//
result = true;
} catch (Exception e) {
log.error("Error connecting to db", e);
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
return result;
}
public static UserDetails getUser(String username) {
UserDetails details = null;
Connection conn = null;
PreparedStatement stmt = null;
try {
// JDBC stuff
DataSource ds = UserDatabase.getDataSource();
conn = ds.getConnection();
//make a statement
stmt = conn.prepareStatement("SELECT * FROM APPUSER WHERE username = ?");
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
log.debug("User found");
details = new UserDetails();
details.setEnabled("enabled".equals(rs.getString("enabled")));
details.setPassword(rs.getString("password"));
details.setUserid(rs.getInt("userid"));
details.setUsername(rs.getString("username"));
//
rs.close();
//get role
stmt = conn.prepareStatement("SELECT authority FROM APPROLE WHERE username = ?");
stmt.setString(1, username);
rs = stmt.executeQuery();
if (rs.next()) {
Collection<? extends GrantedAuthority> authorities;
// authorities.addAll((Collection<?>) new GrantedAuthorityImpl(rs.getString("authority")));
// details.setAuthorities(authorities);
//
//if (daoAuthenticationProvider != null) {
//User usr = new User(username, details.getPassword(), true, true, true, true, authorities);
//daoAuthenticationProvider.getUserCache().putUserInCache(usr);
//}
}
}
rs.close();
} catch (Exception e) {
log.error("Error connecting to db", e);
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
return details;
}
}