mirror of
https://github.com/datahub-project/datahub.git
synced 2025-07-14 12:41:30 +00:00
233 lines
5.9 KiB
Java
233 lines
5.9 KiB
Java
![]() |
/**
|
||
|
* Copyright 2015 LinkedIn Corp. All rights reserved.
|
||
|
*
|
||
|
* 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.
|
||
|
*/
|
||
|
package dao;
|
||
|
|
||
|
import java.util.*;
|
||
|
|
||
|
import models.*;
|
||
|
import org.apache.commons.lang3.StringUtils;
|
||
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||
|
import play.Logger;
|
||
|
|
||
|
public class UserDAO extends AbstractMySQLOpenSourceDAO
|
||
|
{
|
||
|
private final static String GET_CURRENT_USER_INFO = "SELECT u.id, u.name, u.email, " +
|
||
|
"u.username, u.department_number, s.detail_default_view, s.default_watch " +
|
||
|
"FROM users u LEFT JOIN user_settings s on u.id = s.user_id WHERE username = ?";
|
||
|
|
||
|
private final static String UPDATE_USER_SETTINGS = "INSERT INTO user_settings" +
|
||
|
"(user_id, detail_default_view, default_watch) VALUES(?, ?, ?) " +
|
||
|
"ON DUPLICATE KEY UPDATE detail_default_view = ?, default_watch = ?";
|
||
|
|
||
|
private final static String GET_USER_ID = "SELECT id FROM users WHERE username = ?";
|
||
|
|
||
|
private final static String CREATE_USER = "INSERT INTO users " +
|
||
|
"(name, username, password_digest, email, password_digest_type, authentication_type) " +
|
||
|
"VALUES(?, ?, SHA1(?), ? , 'SHA1', 'default')";
|
||
|
|
||
|
private final static String GET_USER_COUNT = "SELECT COUNT(*) FROM users WHERE username = ?";
|
||
|
|
||
|
private final static String GET_USER_INFO_BY_USERNAME = "SELECT id, password_digest, " +
|
||
|
"authentication_type FROM users WHERE username = ? and authentication_type = 'default'";
|
||
|
|
||
|
private final static String PASSWORD_COLUMN = "password_digest";
|
||
|
|
||
|
private final static String DEFAULT_DETAIL_VIEW = "accordion";
|
||
|
|
||
|
private final static String DEFAULT_WATCH = "weekly";
|
||
|
|
||
|
public static String signUp(String userName, String firstName, String lastName, String email, String password)
|
||
|
{
|
||
|
String message = "Sign up failed. Please try again.";
|
||
|
if (StringUtils.isBlank(userName))
|
||
|
{
|
||
|
return "User name is required.";
|
||
|
}
|
||
|
|
||
|
if (StringUtils.isBlank(firstName))
|
||
|
{
|
||
|
return "First name is required.";
|
||
|
}
|
||
|
|
||
|
if (StringUtils.isBlank(lastName))
|
||
|
{
|
||
|
return "Last name is required.";
|
||
|
}
|
||
|
|
||
|
if (StringUtils.isBlank(password))
|
||
|
{
|
||
|
return "Password is required and must be at least 6 characters.";
|
||
|
}
|
||
|
|
||
|
Integer count = (Integer)getJdbcTemplate().queryForObject(
|
||
|
GET_USER_COUNT,
|
||
|
Integer.class,
|
||
|
userName);
|
||
|
if (count != null && count > 0)
|
||
|
{
|
||
|
message = "The username you input has been used. Please choose another.";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
int row = getJdbcTemplate().update(CREATE_USER,
|
||
|
firstName + " " + lastName,
|
||
|
userName,
|
||
|
password,
|
||
|
email);
|
||
|
if (row > 0)
|
||
|
{
|
||
|
message = "";
|
||
|
}
|
||
|
}
|
||
|
return message;
|
||
|
}
|
||
|
|
||
|
public static Boolean authenticate(String userName, String password)
|
||
|
{
|
||
|
List<Map<String, Object>> rows = null;
|
||
|
rows = getJdbcTemplate().queryForList(
|
||
|
GET_USER_INFO_BY_USERNAME,
|
||
|
userName);
|
||
|
if (rows != null)
|
||
|
{
|
||
|
for (Map row : rows) {
|
||
|
|
||
|
String digestPassword = (String)row.get(PASSWORD_COLUMN);
|
||
|
if (StringUtils.isNotBlank(digestPassword))
|
||
|
{
|
||
|
if (digestPassword.equals(play.api.libs.Codecs.sha1(password)))
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public static User getCurrentUser(String username)
|
||
|
{
|
||
|
User user = new User();
|
||
|
try
|
||
|
{
|
||
|
if (StringUtils.isNotBlank(username))
|
||
|
{
|
||
|
user = (User)getJdbcTemplate().queryForObject(
|
||
|
GET_CURRENT_USER_INFO,
|
||
|
new UserRowMapper(),
|
||
|
username);
|
||
|
}
|
||
|
}
|
||
|
catch(EmptyResultDataAccessException e)
|
||
|
{
|
||
|
Logger.error("UserDAO getCurrentUser failed, username = " + username);
|
||
|
Logger.error("Exception = " + e.getMessage());
|
||
|
}
|
||
|
|
||
|
return user;
|
||
|
}
|
||
|
|
||
|
public static Integer getUserIDByUserName(String userName)
|
||
|
{
|
||
|
Integer userId = 0;
|
||
|
if (StringUtils.isNotBlank(userName))
|
||
|
{
|
||
|
try {
|
||
|
userId = (Integer)getJdbcTemplate().queryForObject(
|
||
|
GET_USER_ID,
|
||
|
Integer.class,
|
||
|
userName);
|
||
|
} catch (EmptyResultDataAccessException e) {
|
||
|
userId = 0;
|
||
|
Logger.error("Get user id failed, user name = " + userName);
|
||
|
Logger.error("Exception = " + e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return userId;
|
||
|
}
|
||
|
|
||
|
public static String updateUserSettings(Map<String, String[]> settings, String user)
|
||
|
{
|
||
|
String message = "Internal error";
|
||
|
if (settings == null || settings.size() == 0)
|
||
|
{
|
||
|
return "Empty post body";
|
||
|
}
|
||
|
|
||
|
String defaultView = "";
|
||
|
if (settings.containsKey("detail_default_view"))
|
||
|
{
|
||
|
String[] defaultViewArray = settings.get("detail_default_view");
|
||
|
if (defaultViewArray != null && defaultViewArray.length > 0)
|
||
|
{
|
||
|
defaultView = defaultViewArray[0];
|
||
|
}
|
||
|
}
|
||
|
String defaultWatch = "";
|
||
|
if (settings.containsKey("default_watch"))
|
||
|
{
|
||
|
String[] defaultWatchArray = settings.get("default_watch");
|
||
|
if (defaultWatchArray != null && defaultWatchArray.length > 0)
|
||
|
{
|
||
|
defaultWatch = defaultWatchArray[0];
|
||
|
}
|
||
|
}
|
||
|
Integer userId = 0;
|
||
|
if (StringUtils.isNotBlank(user))
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
userId = (Integer)getJdbcTemplate().queryForObject(
|
||
|
GET_USER_ID,
|
||
|
Integer.class,
|
||
|
user);
|
||
|
}
|
||
|
catch(EmptyResultDataAccessException e)
|
||
|
{
|
||
|
Logger.error("UserDAO updateUserSettings get user id failed, username = " + user);
|
||
|
Logger.error("Exception = " + e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
if (userId != null && userId > 0)
|
||
|
{
|
||
|
if (StringUtils.isBlank(defaultView))
|
||
|
{
|
||
|
defaultView = DEFAULT_DETAIL_VIEW;
|
||
|
}
|
||
|
|
||
|
if (StringUtils.isBlank(defaultWatch))
|
||
|
{
|
||
|
defaultWatch = DEFAULT_WATCH;
|
||
|
}
|
||
|
|
||
|
int row = getJdbcTemplate().update(UPDATE_USER_SETTINGS,
|
||
|
userId,
|
||
|
defaultView,
|
||
|
defaultWatch,
|
||
|
defaultView,
|
||
|
defaultWatch);
|
||
|
if (row > 0)
|
||
|
{
|
||
|
message = "";
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
message = "User not found";
|
||
|
}
|
||
|
return message;
|
||
|
}
|
||
|
}
|