initialize
This commit is contained in:
92
src/main/java/com/mesasoft/cn/service/IAuthService.java
Normal file
92
src/main/java/com/mesasoft/cn/service/IAuthService.java
Normal file
@@ -0,0 +1,92 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import com.mesasoft.cn.entity.Auth;
|
||||
import com.mesasoft.cn.model.AuthRecord;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/2/1
|
||||
*/
|
||||
public interface IAuthService {
|
||||
|
||||
/**
|
||||
* 添加权限集
|
||||
*
|
||||
* @param files 文件
|
||||
* @param users 用户
|
||||
* @param auths 权限集
|
||||
*
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
boolean addAuth(String files, String users, String auths);
|
||||
|
||||
/**
|
||||
* 批量删除权限记录
|
||||
*
|
||||
* @param ids 权限编号集
|
||||
*
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean batchDelete(String ids);
|
||||
|
||||
/**
|
||||
* 更新权限
|
||||
*
|
||||
* @param id 权限编号
|
||||
* @param auths 权限
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updateAuth(long id, String auths);
|
||||
|
||||
/**
|
||||
* 获取权限表数据
|
||||
*
|
||||
* @param usernameOrEmail 用户名或邮箱
|
||||
* @param fileName 文件名
|
||||
* @param offset 偏移
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<AuthRecord> listAuth(String usernameOrEmail, String fileName, int offset);
|
||||
|
||||
/**
|
||||
* 获取一个权限
|
||||
*
|
||||
* @param fileId 文件编号
|
||||
* @param userId 用户编号
|
||||
*
|
||||
* @return {@link AuthRecord}
|
||||
*/
|
||||
AuthRecord getByFileIdAndUserId(long fileId, int userId);
|
||||
|
||||
/**
|
||||
* 添加一个默认权限
|
||||
*
|
||||
* @param userId 用户编号
|
||||
* @param fileId 文件编号
|
||||
*
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
boolean insertDefaultAuth(int userId, long fileId);
|
||||
|
||||
/**
|
||||
* 添加一个权限
|
||||
*
|
||||
* @param auth {@link Auth}
|
||||
*
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
boolean insertAuth(Auth auth);
|
||||
|
||||
/**
|
||||
* 通过文件编号删除权限
|
||||
*
|
||||
* @param fileId 文件编号
|
||||
*
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean removeByFileId(long fileId);
|
||||
}
|
||||
65
src/main/java/com/mesasoft/cn/service/ICategoryService.java
Normal file
65
src/main/java/com/mesasoft/cn/service/ICategoryService.java
Normal file
@@ -0,0 +1,65 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import com.mesasoft.cn.entity.Category;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/30
|
||||
*/
|
||||
public interface ICategoryService {
|
||||
|
||||
/**
|
||||
* 添加一个分类
|
||||
*
|
||||
* @param name 分类名称
|
||||
*
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
boolean insert(String name);
|
||||
|
||||
/**
|
||||
* 删除一个分类
|
||||
*
|
||||
* @param id 分类编号
|
||||
*
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean remove(int id);
|
||||
|
||||
/**
|
||||
* 更新分类
|
||||
*
|
||||
* @param id 分类编号
|
||||
* @param name 分类名称
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean update(int id, String name);
|
||||
|
||||
/**
|
||||
* 获取一个分类
|
||||
*
|
||||
* @param id 分类编号
|
||||
*
|
||||
* @return {@link Category}
|
||||
*/
|
||||
Category getById(int id);
|
||||
|
||||
/**
|
||||
* 获取所有的分类
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<Category> list();
|
||||
|
||||
/**
|
||||
* 通过分类名获取ID
|
||||
*
|
||||
* @param name 分类名
|
||||
*
|
||||
* @return {@link Integer}
|
||||
*/
|
||||
int getIdByName(String name);
|
||||
}
|
||||
28
src/main/java/com/mesasoft/cn/service/ICommonService.java
Normal file
28
src/main/java/com/mesasoft/cn/service/ICommonService.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/23
|
||||
*/
|
||||
public interface ICommonService {
|
||||
|
||||
/**
|
||||
* 发送验证码
|
||||
*
|
||||
* @param email 邮箱
|
||||
*
|
||||
* @return 验证码
|
||||
*/
|
||||
int sendVerifyCode(String email);
|
||||
|
||||
/**
|
||||
* 上传头像
|
||||
*
|
||||
* @param multipartFile 头像文件
|
||||
*
|
||||
* @return 头像文件名
|
||||
*/
|
||||
String uploadAvatar(MultipartFile multipartFile);
|
||||
}
|
||||
22
src/main/java/com/mesasoft/cn/service/IConfigService.java
Normal file
22
src/main/java/com/mesasoft/cn/service/IConfigService.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/22
|
||||
*/
|
||||
public interface IConfigService {
|
||||
|
||||
/**
|
||||
* 获取全局配置
|
||||
*
|
||||
* @return {@link String}
|
||||
*/
|
||||
String getGlobalConfig();
|
||||
|
||||
/**
|
||||
* 获取用户配置
|
||||
*
|
||||
* @return {@link String}
|
||||
*/
|
||||
String getUserConfig();
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import com.mesasoft.cn.model.DownloadRecord;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/2/1
|
||||
*/
|
||||
public interface IDownloadedService {
|
||||
|
||||
/**
|
||||
* 添加下载记录
|
||||
*
|
||||
* @param userId 用户编号
|
||||
* @param fileId 文件编号
|
||||
*/
|
||||
void insertDownload(int userId, long fileId);
|
||||
|
||||
/**
|
||||
* 通过文件编号删除下载记录
|
||||
*
|
||||
* @param fileId 文件编号
|
||||
*/
|
||||
void removeByFileId(long fileId);
|
||||
|
||||
/**
|
||||
* 获取所有下载记录
|
||||
*
|
||||
* @param user 用户名或邮箱
|
||||
* @param category 分类名称
|
||||
* @param file 文件名
|
||||
* @param offset 偏移
|
||||
*
|
||||
* @return {@link DownloadRecord}
|
||||
*/
|
||||
List<DownloadRecord> list(String user, String file, String category, int offset);
|
||||
}
|
||||
136
src/main/java/com/mesasoft/cn/service/IFileManagerService.java
Normal file
136
src/main/java/com/mesasoft/cn/service/IFileManagerService.java
Normal file
@@ -0,0 +1,136 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/29
|
||||
*/
|
||||
public interface IFileManagerService {
|
||||
|
||||
|
||||
/**
|
||||
* 下载多个文件
|
||||
*
|
||||
* @param response {@link HttpServletResponse}
|
||||
* @param items 文件集
|
||||
* @param destFile 目标文件名
|
||||
*
|
||||
* @throws IOException 异常
|
||||
*/
|
||||
void multiDownload(HttpServletResponse response, String[] items, String destFile) throws IOException;
|
||||
|
||||
/**
|
||||
* 上传文件(暂时还没有实现)
|
||||
*
|
||||
* @param destination 目标文件
|
||||
* @param files {@link MultipartFile}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject upload(String destination, MultipartFile... files);
|
||||
|
||||
/**
|
||||
* 解压文件
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject extract(JSONObject object);
|
||||
|
||||
/**
|
||||
* 压缩文件
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject compress(JSONObject object);
|
||||
|
||||
/**
|
||||
* 设置文件权限
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject setPermission(JSONObject object);
|
||||
|
||||
/**
|
||||
* 创建文件夹
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject createFolder(JSONObject object);
|
||||
|
||||
/**
|
||||
* 获取文件内容
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return 文件内容
|
||||
*/
|
||||
String getContent(JSONObject object);
|
||||
|
||||
/**
|
||||
* 编辑文件
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject edit(JSONObject object);
|
||||
|
||||
/**
|
||||
* 移除文件
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject remove(JSONObject object);
|
||||
|
||||
/**
|
||||
* 复制文件
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject copy(JSONObject object);
|
||||
|
||||
/**
|
||||
* 移动文件
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject move(JSONObject object);
|
||||
|
||||
/**
|
||||
* 重命名
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONObject rename(JSONObject object);
|
||||
|
||||
/**
|
||||
* 列出文件
|
||||
*
|
||||
* @param object {@link JSONObject}
|
||||
*
|
||||
* @return {@link JSONObject}
|
||||
*/
|
||||
JSONArray list(JSONObject object);
|
||||
}
|
||||
228
src/main/java/com/mesasoft/cn/service/IFileService.java
Normal file
228
src/main/java/com/mesasoft/cn/service/IFileService.java
Normal file
@@ -0,0 +1,228 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import com.mesasoft.cn.entity.User;
|
||||
import com.mesasoft.cn.model.BaseAuthRecord;
|
||||
import com.mesasoft.cn.model.FileBasicRecord;
|
||||
import com.mesasoft.cn.model.FileRecord;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/29
|
||||
*/
|
||||
public interface IFileService {
|
||||
|
||||
/**
|
||||
* 更新文件权限
|
||||
*
|
||||
* @param id 文件编号
|
||||
* @param auth 权限集
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updateAuth(long id, String auth);
|
||||
|
||||
/**
|
||||
* 获取文件权限
|
||||
*
|
||||
* @param id 文件编号
|
||||
*
|
||||
* @return {@link BaseAuthRecord}
|
||||
*/
|
||||
BaseAuthRecord getAuth(long id);
|
||||
|
||||
/**
|
||||
* 批量删除文件
|
||||
*
|
||||
* @param ids 所有文件编号
|
||||
*
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean deleteFiles(String ids);
|
||||
|
||||
/**
|
||||
* 更新文件路径
|
||||
*
|
||||
* @param id 文件编号
|
||||
* @param oldLocalUrl 原本地路径
|
||||
* @param localUrl 本地路径
|
||||
* @param visitUrl 访问路径
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean[] updateUrl(int id, String oldLocalUrl, String localUrl, String visitUrl);
|
||||
|
||||
/**
|
||||
* 更新文件信息
|
||||
*
|
||||
* @param id 文件编号
|
||||
* @param user 用户对象
|
||||
* @param name 文件名
|
||||
* @param category 文件分类
|
||||
* @param tag 标签
|
||||
* @param description 文件描述
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updateFileInfo(long id, User user, String name, String category, String tag, String description);
|
||||
|
||||
/**
|
||||
* 删除文件,验证权限
|
||||
*
|
||||
* @param user 用户对象
|
||||
* @param fileId 文件编号
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean removeFile(User user, long fileId);
|
||||
|
||||
/**
|
||||
* 获取用户的下载资源
|
||||
*
|
||||
* @param userId 用户编号
|
||||
* @param offset 偏移
|
||||
* @param search 搜索
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<FileRecord> listUserDownloaded(int userId, int offset, String search);
|
||||
|
||||
/**
|
||||
* 获取用户的上传资源
|
||||
*
|
||||
* @param userId 用户编号
|
||||
* @param offset 偏移
|
||||
* @param search 搜索
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<FileRecord> listUserUploaded(int userId, int offset, String search);
|
||||
|
||||
/**
|
||||
* 通过编号删除,不验证权限
|
||||
*
|
||||
* @param id 编号
|
||||
*
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean removeById(long id);
|
||||
|
||||
/**
|
||||
* 通过访问路径删除
|
||||
*
|
||||
* @param visitUrl 访问路径
|
||||
*
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean removeByVisitUrl(String visitUrl);
|
||||
|
||||
/**
|
||||
* 通过本地路径删除
|
||||
*
|
||||
* @param localUrl 访问路径
|
||||
*
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean removeByLocalUrl(String localUrl);
|
||||
|
||||
/**
|
||||
* 获取资源
|
||||
*
|
||||
* @param visitUrl 访问路径
|
||||
* @param request {@link HttpServletRequest}
|
||||
*
|
||||
* @return {@link File}
|
||||
*/
|
||||
String getResource(String visitUrl, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 通过访问路径获取本地文件路径
|
||||
*
|
||||
* @param visitUrl 访问路径
|
||||
*
|
||||
* @return {@link String}
|
||||
*/
|
||||
String getLocalUrlByVisitUrl(String visitUrl);
|
||||
|
||||
/**
|
||||
* 获取所有文件
|
||||
*
|
||||
* @param userId 用户编号
|
||||
* @param offset 偏移
|
||||
* @param categoryId 分类编号
|
||||
* @param orderBy 排序方式
|
||||
* @param search 搜索
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<FileRecord> listAll(int userId, int offset, int categoryId, String orderBy, String search);
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param categoryId 分类ID
|
||||
* @param tag 标签
|
||||
* @param description 描述
|
||||
* @param prefix 自定义前缀
|
||||
* @param multipartFile 文件
|
||||
* @param user {@link User}
|
||||
*
|
||||
* @return 是否上传成功
|
||||
*/
|
||||
boolean upload(int categoryId, String tag, String description, String prefix, MultipartFile multipartFile, User
|
||||
user);
|
||||
|
||||
/**
|
||||
* 分享服务器本地文件
|
||||
*
|
||||
* @param prefix 链接前缀
|
||||
* @param files 文件
|
||||
* @param user 用户对象
|
||||
*
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
boolean shareFiles(String prefix, String files, User user);
|
||||
|
||||
/**
|
||||
* 本地路径是否存在
|
||||
*
|
||||
* @param localUrl 本地路径
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean localUrlExists(String localUrl);
|
||||
|
||||
/**
|
||||
* 访问路径是否存在
|
||||
*
|
||||
* @param visitUrl 访问路径
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean visitUrlExists(String visitUrl);
|
||||
|
||||
/**
|
||||
* 通过本地路径获取文件编号
|
||||
*
|
||||
* @param localUrl 本地路径
|
||||
*
|
||||
* @return 文件编号
|
||||
*/
|
||||
long getFileId(String localUrl);
|
||||
|
||||
/**
|
||||
* 获取所有文件基本信息
|
||||
*
|
||||
* @param user 用户名或邮箱
|
||||
* @param category 分类名称
|
||||
* @param file 文件名
|
||||
* @param offset 偏移
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<FileBasicRecord> listBasicAll(String user, String file, String category, int offset);
|
||||
}
|
||||
24
src/main/java/com/mesasoft/cn/service/IUploadedService.java
Normal file
24
src/main/java/com/mesasoft/cn/service/IUploadedService.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import com.mesasoft.cn.model.UploadedRecord;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/2/28
|
||||
*/
|
||||
public interface IUploadedService {
|
||||
|
||||
/**
|
||||
* 获取所有上传记录
|
||||
*
|
||||
* @param user 用户名或邮箱
|
||||
* @param category 分类名称
|
||||
* @param file 文件名
|
||||
* @param offset 偏移
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<UploadedRecord> list(String user, String file, String category, int offset);
|
||||
}
|
||||
161
src/main/java/com/mesasoft/cn/service/IUserService.java
Normal file
161
src/main/java/com/mesasoft/cn/service/IUserService.java
Normal file
@@ -0,0 +1,161 @@
|
||||
package com.mesasoft.cn.service;
|
||||
|
||||
import com.mesasoft.cn.entity.User;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/22
|
||||
*/
|
||||
public interface IUserService {
|
||||
|
||||
/**
|
||||
* 更新用户权限
|
||||
*
|
||||
* @param id 用户编号
|
||||
* @param permission 权限
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updatePermission(int id, int permission);
|
||||
|
||||
/**
|
||||
* 重置用户密码
|
||||
*
|
||||
* @param id 用户编号
|
||||
* @param password 密码
|
||||
*
|
||||
* @return 是否重置成功
|
||||
*/
|
||||
boolean resetPassword(int id, String password);
|
||||
|
||||
/**
|
||||
* 更新用户权限
|
||||
*
|
||||
* @param id 编号
|
||||
* @param auths 操作文件的权限集
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updateFileAuth(int id, String auths);
|
||||
|
||||
/**
|
||||
* 获取用户
|
||||
*
|
||||
* @param permission 当前用户权限
|
||||
* @param condition 筛选条件
|
||||
* @param offset 偏移
|
||||
*
|
||||
* @return {@link List}
|
||||
*/
|
||||
List<User> listUser(int permission, String condition, int offset);
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*
|
||||
* @param loginName 登录名
|
||||
* @param password 密码
|
||||
* @param token 自动登录
|
||||
* @param response 响应
|
||||
*
|
||||
* @return {@link User}
|
||||
*/
|
||||
User login(String loginName, String password, String token, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 注册
|
||||
*
|
||||
* @param username 用户名
|
||||
* @param email 邮箱
|
||||
* @param password 密码
|
||||
*
|
||||
* @return 是否插入成功
|
||||
*/
|
||||
boolean register(String username, String email, String password);
|
||||
|
||||
/**
|
||||
* 重置密码
|
||||
*
|
||||
* @param email 邮箱
|
||||
* @param password 密码
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean resetPasswordByEmail(String email, String password);
|
||||
|
||||
/**
|
||||
* 检查用户名是否存在
|
||||
*
|
||||
* @param username 用户名
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean usernameExists(String username);
|
||||
|
||||
/**
|
||||
* 通过编号获取用户
|
||||
*
|
||||
* @param id 编号
|
||||
*
|
||||
* @return {@link User}
|
||||
*/
|
||||
User getUserById(int id);
|
||||
|
||||
/**
|
||||
* 更新用户登录时间
|
||||
*
|
||||
* @param user {@link User}
|
||||
*/
|
||||
void updateUserLoginTime(User user);
|
||||
|
||||
/**
|
||||
* 更新密码
|
||||
*
|
||||
* @param password 密码
|
||||
* @param id 用户编号
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updatePasswordById(String password, int id);
|
||||
|
||||
/**
|
||||
* 检查密码是否合法
|
||||
*
|
||||
* @param password 密码
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean checkPassword(String password);
|
||||
|
||||
/**
|
||||
* 检查邮箱是否存在
|
||||
*
|
||||
* @param email 邮箱
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean emailExists(String email);
|
||||
|
||||
/**
|
||||
* 更新用户基本信息
|
||||
*
|
||||
* @param id 编号
|
||||
* @param avatar 头像
|
||||
* @param realName 真实姓名
|
||||
* @param email 邮箱
|
||||
*
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
boolean updateBasicInfoById(int id, String avatar, String realName, String email);
|
||||
|
||||
/**
|
||||
* 用过用户名获取用户Id
|
||||
*
|
||||
* @param usernameOrEmail 用户名或邮箱
|
||||
*
|
||||
* @return 用户编号
|
||||
*/
|
||||
int getUserId(String usernameOrEmail);
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.mesasoft.cn.dao.AuthDAO;
|
||||
import com.mesasoft.cn.util.BeanUtils;
|
||||
import com.mesasoft.cn.config.SettingConfig;
|
||||
import com.mesasoft.cn.entity.Auth;
|
||||
import com.mesasoft.cn.model.AuthRecord;
|
||||
import com.mesasoft.cn.modules.constant.ConfigConsts;
|
||||
import com.mesasoft.cn.service.IAuthService;
|
||||
import com.mesasoft.cn.util.ServiceUtils;
|
||||
import com.zhazhapan.modules.constant.ValueConsts;
|
||||
import com.zhazhapan.util.Checker;
|
||||
import com.zhazhapan.util.Formatter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/2/1
|
||||
*/
|
||||
@Service
|
||||
public class AuthServiceImpl implements IAuthService {
|
||||
|
||||
private final AuthDAO authDAO;
|
||||
|
||||
@Autowired
|
||||
public AuthServiceImpl(AuthDAO authDAO) {this.authDAO = authDAO;}
|
||||
|
||||
@Override
|
||||
public boolean addAuth(String files, String users, String auths) {
|
||||
if (Checker.isNotEmpty(files) && Checker.isNotEmpty(users) && Checker.isNotEmpty(auths)) {
|
||||
String[] file = files.split(ValueConsts.COMMA_SIGN);
|
||||
String[] user = users.split(ValueConsts.COMMA_SIGN);
|
||||
for (String f : file) {
|
||||
long fileId = Formatter.stringToLong(f);
|
||||
for (String u : user) {
|
||||
int userId = Formatter.stringToInt(u);
|
||||
if (Checker.isNull(authDAO.exists(userId, fileId))) {
|
||||
Auth auth = new Auth(userId, fileId);
|
||||
auth.setAuth(BeanUtils.getAuth(auths));
|
||||
authDAO.insertAuth(auth);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean batchDelete(String ids) {
|
||||
return Checker.isNotEmpty(ids) && authDAO.batchDelete(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateAuth(long id, String auths) {
|
||||
int[] auth = BeanUtils.getAuth(auths);
|
||||
return authDAO.updateAuthById(id, auth[0], auth[1], auth[2], auth[3], auth[4]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AuthRecord> listAuth(String usernameOrEmail, String fileName, int offset) {
|
||||
long fileId = ServiceUtils.getFileId(fileName);
|
||||
int userId = ServiceUtils.getUserId(usernameOrEmail);
|
||||
return authDAO.listAuthBy(ValueConsts.ZERO_INT, userId, fileId, fileName, offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRecord getByFileIdAndUserId(long fileId, int userId) {
|
||||
List<AuthRecord> authRecords = authDAO.listAuthBy(ValueConsts.ZERO_INT, userId, fileId, ValueConsts
|
||||
.EMPTY_STRING, ValueConsts.ZERO_INT);
|
||||
if (Checker.isNotEmpty(authRecords)) {
|
||||
return authRecords.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean insertDefaultAuth(int userId, long fileId) {
|
||||
int[] defaultAuth = SettingConfig.getAuth(ConfigConsts.AUTH_DEFAULT_OF_SETTING);
|
||||
Auth auth = new Auth(userId, fileId);
|
||||
auth.setAuth(defaultAuth[0], defaultAuth[1], defaultAuth[2], defaultAuth[3], defaultAuth[4]);
|
||||
return insertAuth(auth);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean insertAuth(Auth auth) {
|
||||
return authDAO.insertAuth(auth);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeByFileId(long fileId) {
|
||||
return authDAO.removeAuthByFileId(fileId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.mesasoft.cn.dao.CategoryDAO;
|
||||
import com.mesasoft.cn.entity.Category;
|
||||
import com.mesasoft.cn.modules.constant.DefaultValues;
|
||||
import com.mesasoft.cn.service.ICategoryService;
|
||||
import com.zhazhapan.util.Checker;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/30
|
||||
*/
|
||||
@Service
|
||||
public class CategoryServiceImpl implements ICategoryService {
|
||||
|
||||
private final CategoryDAO categoryDAO;
|
||||
|
||||
@Autowired
|
||||
public CategoryServiceImpl(CategoryDAO categoryDAO) {this.categoryDAO = categoryDAO;}
|
||||
|
||||
@Override
|
||||
public boolean insert(String name) {
|
||||
return Checker.isNotNull(name) && categoryDAO.insertCategory(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(int id) {
|
||||
return isCategorized(id) && categoryDAO.removeCategoryById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean update(int id, String name) {
|
||||
return Checker.isNotEmpty(name) && isCategorized(id) && categoryDAO.updateNameById(id, name);
|
||||
}
|
||||
|
||||
private boolean isCategorized(int id) {
|
||||
return !DefaultValues.UNCATEGORIZED.equals(getById(id).getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Category getById(int id) {
|
||||
return categoryDAO.getCategoryById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Category> list() {
|
||||
return categoryDAO.listCategory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIdByName(String name) {
|
||||
try {
|
||||
return categoryDAO.getIdByName(name);
|
||||
} catch (Exception e) {
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.mesasoft.cn.modules.constant.DefaultValues;
|
||||
import com.mesasoft.cn.config.SettingConfig;
|
||||
import com.mesasoft.cn.service.ICommonService;
|
||||
import com.zhazhapan.modules.constant.ValueConsts;
|
||||
import com.zhazhapan.util.Checker;
|
||||
import com.zhazhapan.util.FileExecutor;
|
||||
import com.zhazhapan.util.MailSender;
|
||||
import com.zhazhapan.util.RandomUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/23
|
||||
*/
|
||||
@Service
|
||||
public class CommonServiceImpl implements ICommonService {
|
||||
|
||||
private static final String EMAIL_TITLE = "请查收您的验证码";
|
||||
private static Logger logger = LoggerFactory.getLogger(CommonServiceImpl.class);
|
||||
|
||||
@Override
|
||||
public int sendVerifyCode(String email) {
|
||||
int code = RandomUtils.getRandomInteger(ValueConsts.VERIFY_CODE_FLOOR, ValueConsts.VERIFY_CODE_CEIL);
|
||||
String content = "<p>您的验证码:" + code + "</p><br/><br/><p>如非本人操作,请忽略本条消息。</p>";
|
||||
try {
|
||||
MailSender.sendMail(email, EMAIL_TITLE, content);
|
||||
return code;
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage());
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String uploadAvatar(MultipartFile multipartFile) {
|
||||
if (!multipartFile.isEmpty()) {
|
||||
String name = RandomUtils.getRandomStringOnlyLowerCase(ValueConsts.SIXTEEN_INT) + ValueConsts.DOT_SIGN +
|
||||
FileExecutor.getFileSuffix(multipartFile.getOriginalFilename());
|
||||
if (Checker.isImage(name) && multipartFile.getSize() < ValueConsts.MB * DefaultValues.TWO_INT) {
|
||||
String path = SettingConfig.getAvatarStoragePath() + ValueConsts.SEPARATOR + name;
|
||||
try {
|
||||
FileExecutor.writeByteArrayToFile(new File(path), multipartFile.getBytes());
|
||||
return name;
|
||||
} catch (IOException e) {
|
||||
logger.error("upload avatar error: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.mesasoft.cn.SketchApplication;
|
||||
import com.mesasoft.cn.modules.constant.ConfigConsts;
|
||||
import com.mesasoft.cn.service.IConfigService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/22
|
||||
*/
|
||||
@Service
|
||||
public class ConfigServiceImpl implements IConfigService {
|
||||
|
||||
@Override
|
||||
public String getGlobalConfig() {
|
||||
JSONObject jsonObject = (JSONObject) SketchApplication.settings.getObjectUseEval(ConfigConsts
|
||||
.GLOBAL_OF_SETTINGS).clone();
|
||||
jsonObject.remove(ConfigConsts.UPLOAD_PATH_OF_GLOBAL);
|
||||
jsonObject.remove(ConfigConsts.TOKEN_PATH_OF_GLOBAL);
|
||||
jsonObject.remove(ConfigConsts.UPLOAD_FORM_OF_SETTING);
|
||||
return jsonObject.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUserConfig() {
|
||||
JSONObject jsonObject = (JSONObject) SketchApplication.settings.getObjectUseEval(ConfigConsts.USER_OF_SETTINGS)
|
||||
.clone();
|
||||
jsonObject.remove(ConfigConsts.EMAIL_CONFIG_OF_USER);
|
||||
return jsonObject.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.mesasoft.cn.dao.DownloadedDAO;
|
||||
import com.mesasoft.cn.model.DownloadRecord;
|
||||
import com.mesasoft.cn.service.IDownloadedService;
|
||||
import com.mesasoft.cn.util.ServiceUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/2/1
|
||||
*/
|
||||
@Service
|
||||
public class DownloadedServiceImpl implements IDownloadedService {
|
||||
|
||||
private final DownloadedDAO downloadDAO;
|
||||
|
||||
@Autowired
|
||||
public DownloadedServiceImpl(DownloadedDAO downloadDAO) {
|
||||
this.downloadDAO = downloadDAO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertDownload(int userId, long fileId) {
|
||||
downloadDAO.insertDownload(userId, fileId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeByFileId(long fileId) {
|
||||
downloadDAO.removeByFileId(fileId);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<DownloadRecord> list(String user, String file, String category, int offset) {
|
||||
return (List<DownloadRecord>) ServiceUtils.invokeFileFilter(downloadDAO, "listDownloadedBy", user, file,
|
||||
category, offset);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ZipUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.mesasoft.cn.modules.constant.DefaultValues;
|
||||
import com.mesasoft.cn.service.IFileManagerService;
|
||||
import com.zhazhapan.modules.constant.ValueConsts;
|
||||
import com.zhazhapan.util.Checker;
|
||||
import com.zhazhapan.util.FileExecutor;
|
||||
import com.zhazhapan.util.Formatter;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.swing.filechooser.FileSystemView;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/29
|
||||
*/
|
||||
@Service
|
||||
public class FileManagerServiceImpl implements IFileManagerService {
|
||||
|
||||
private static Logger logger = Logger.getLogger(FileManagerServiceImpl.class);
|
||||
|
||||
@Override
|
||||
public void multiDownload(HttpServletResponse response, String[] items, String destFile) throws IOException {
|
||||
File zip = ZipUtil.zip(new File(ValueConsts.USER_DESKTOP + File.separator + destFile), ValueConsts.FALSE,
|
||||
FileExecutor.getFiles(items));
|
||||
if (zip.exists()) {
|
||||
response.getOutputStream().write(FileExecutor.readFileToByteArray(zip));
|
||||
FileExecutor.deleteFile(zip);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject upload(String destination, MultipartFile... files) {
|
||||
System.out.println(files.length);
|
||||
if (Checker.isNotEmpty(files)) {
|
||||
if (Checker.isWindows() && destination.length() < ValueConsts.TWO_INT) {
|
||||
destination = "C:";
|
||||
}
|
||||
for (MultipartFile file : files) {
|
||||
if (Checker.isNotNull(file) && !file.isEmpty()) {
|
||||
try {
|
||||
file.transferTo(new File(destination + File.separator + file.getOriginalFilename()));
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
return getBasicResponse(ValueConsts.FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return getBasicResponse(ValueConsts.TRUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject extract(JSONObject object) {
|
||||
String destination = object.getString("destination") + File.separator + object.getString("folderName");
|
||||
String zipFile = object.getString("item");
|
||||
return getBasicResponse(ZipUtil.unzip(zipFile, destination).exists());
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject compress(JSONObject object) {
|
||||
JSONArray array = object.getJSONArray("items");
|
||||
File[] files = new File[array.size()];
|
||||
int i = 0;
|
||||
for (Object file : array) {
|
||||
files[i++] = new File(file.toString());
|
||||
}
|
||||
String dest = object.getString("destination");
|
||||
String name = object.getString("compressedFilename");
|
||||
File zip = ZipUtil.zip(new File(dest + File.separator + name), ValueConsts.FALSE, files);
|
||||
return getBasicResponse(zip.exists());
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject setPermission(JSONObject object) {
|
||||
if (Checker.isLinux()) {
|
||||
JSONArray array = object.getJSONArray("items");
|
||||
int code = object.getInteger("permsCode");
|
||||
for (Object file : array) {
|
||||
try {
|
||||
Runtime.getRuntime().exec("chmod -R " + code + " " + file.toString());
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
return getBasicResponse(ValueConsts.FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
return getBasicResponse(ValueConsts.TRUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject createFolder(JSONObject object) {
|
||||
String folder = object.getString("newPath");
|
||||
return getBasicResponse(FileExecutor.createFolder(folder));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getContent(JSONObject object) {
|
||||
String fileName = object.getString("item");
|
||||
try {
|
||||
return FileExecutor.readFile(fileName);
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject edit(JSONObject object) {
|
||||
String file = object.getString("item");
|
||||
String content = object.getString("content");
|
||||
try {
|
||||
FileExecutor.saveFile(file, content);
|
||||
return getBasicResponse(ValueConsts.TRUE);
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
return getBasicResponse(ValueConsts.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject remove(JSONObject object) {
|
||||
JSONArray array = object.getJSONArray("items");
|
||||
array.forEach(file -> FileExecutor.deleteFile(file.toString()));
|
||||
return getBasicResponse(ValueConsts.TRUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject copy(JSONObject object) {
|
||||
JSONArray array = object.getJSONArray("items");
|
||||
String dest = object.getString("newPath");
|
||||
File[] files = new File[array.size()];
|
||||
int i = 0;
|
||||
for (Object file : array) {
|
||||
files[i++] = new File(file.toString());
|
||||
}
|
||||
try {
|
||||
FileExecutor.copyFiles(files, dest);
|
||||
return getBasicResponse(ValueConsts.TRUE);
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
return getBasicResponse(ValueConsts.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject move(JSONObject object) {
|
||||
JSONArray array = object.getJSONArray("items");
|
||||
String dest = object.getString("newPath");
|
||||
for (Object file : array) {
|
||||
try {
|
||||
FileExecutor.moveToDirectory(new File(file.toString()), new File(dest), ValueConsts.TRUE);
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
return getBasicResponse(ValueConsts.FALSE);
|
||||
}
|
||||
}
|
||||
return getBasicResponse(ValueConsts.TRUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject rename(JSONObject object) {
|
||||
String fileName = object.getString("item");
|
||||
String newFileName = object.getString("newItemPath");
|
||||
FileExecutor.renameTo(fileName, newFileName);
|
||||
return getBasicResponse(ValueConsts.TRUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray list(JSONObject object) {
|
||||
String path = object.getString("path");
|
||||
JSONArray array = new JSONArray();
|
||||
File[] files = null;
|
||||
if (Checker.isWindows()) {
|
||||
if (Checker.isNotEmpty(path) && path.startsWith(ValueConsts.SPLASH_STRING)) {
|
||||
path = path.substring(1);
|
||||
}
|
||||
if (Checker.isEmpty(path)) {
|
||||
FileSystemView fsv = FileSystemView.getFileSystemView();
|
||||
File[] fs = File.listRoots();
|
||||
for (File file : fs) {
|
||||
if (file.getTotalSpace() > 0) {
|
||||
String displayName = fsv.getSystemDisplayName(file);
|
||||
int len = displayName.length();
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("name", displayName.substring(len - 3, len - 1));
|
||||
jsonObject.put("rights", "----------");
|
||||
jsonObject.put("size", file.getTotalSpace() - file.getFreeSpace());
|
||||
jsonObject.put("date", Formatter.datetimeToString(new Date(file.lastModified())));
|
||||
jsonObject.put("type", file.isDirectory() ? "dir" : "file");
|
||||
array.add(jsonObject);
|
||||
}
|
||||
}
|
||||
} else if (path.startsWith(DefaultValues.COLON, 1)) {
|
||||
files = FileExecutor.listFile(path.endsWith(DefaultValues.COLON) ? path + File.separator : path);
|
||||
} else {
|
||||
logger.error("path error");
|
||||
}
|
||||
} else {
|
||||
files = FileExecutor.listFile(Checker.isEmpty(path) ? "/" : (path.startsWith("/") ? path : "/" + path));
|
||||
}
|
||||
if (Checker.isNotNull(files)) {
|
||||
for (File file : files) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("name", file.getName());
|
||||
jsonObject.put("rights", "----------");
|
||||
jsonObject.put("size", file.length());
|
||||
jsonObject.put("date", Formatter.datetimeToString(new Date(file.lastModified())));
|
||||
jsonObject.put("type", file.isDirectory() ? "dir" : "file");
|
||||
array.add(jsonObject);
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
private JSONObject getBasicResponse(boolean isSuccess) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
if (isSuccess) {
|
||||
jsonObject.put("success", true);
|
||||
jsonObject.put("error", null);
|
||||
} else {
|
||||
jsonObject.put("success", null);
|
||||
jsonObject.put("error", "服务器异常");
|
||||
}
|
||||
return jsonObject;
|
||||
}
|
||||
}
|
||||
383
src/main/java/com/mesasoft/cn/service/impl/FileServiceImpl.java
Normal file
383
src/main/java/com/mesasoft/cn/service/impl/FileServiceImpl.java
Normal file
@@ -0,0 +1,383 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.mesasoft.cn.SketchApplication;
|
||||
import com.mesasoft.cn.dao.DownloadedDAO;
|
||||
import com.mesasoft.cn.dao.FileDAO;
|
||||
import com.mesasoft.cn.util.BeanUtils;
|
||||
import com.mesasoft.cn.config.SettingConfig;
|
||||
import com.mesasoft.cn.entity.Category;
|
||||
import com.mesasoft.cn.entity.File;
|
||||
import com.mesasoft.cn.entity.User;
|
||||
import com.mesasoft.cn.model.AuthRecord;
|
||||
import com.mesasoft.cn.model.BaseAuthRecord;
|
||||
import com.mesasoft.cn.model.FileBasicRecord;
|
||||
import com.mesasoft.cn.model.FileRecord;
|
||||
import com.mesasoft.cn.modules.constant.ConfigConsts;
|
||||
import com.mesasoft.cn.modules.constant.DefaultValues;
|
||||
import com.mesasoft.cn.service.IAuthService;
|
||||
import com.mesasoft.cn.service.ICategoryService;
|
||||
import com.mesasoft.cn.service.IFileService;
|
||||
import com.mesasoft.cn.util.ServiceUtils;
|
||||
import com.zhazhapan.modules.constant.ValueConsts;
|
||||
import com.zhazhapan.util.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Isolation;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/29
|
||||
*/
|
||||
@Service
|
||||
public class FileServiceImpl implements IFileService {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
|
||||
|
||||
private static final String FILE_SUFFIX = "{fileSuffix}";
|
||||
|
||||
private static final String RANDOM_ID = "{randomId}";
|
||||
|
||||
private static final String YEAR = "{year}";
|
||||
|
||||
private static final String MONTH = "{month}";
|
||||
|
||||
private static final String DAY = "{day}";
|
||||
|
||||
private static final String AUTHOR = "{author}";
|
||||
|
||||
private static final String FILE_NAME = "{fileName}";
|
||||
|
||||
private static final String CATEGORY_NAME = "{categoryName}";
|
||||
|
||||
private final FileDAO fileDAO;
|
||||
|
||||
private final ICategoryService categoryService;
|
||||
|
||||
private final IAuthService authService;
|
||||
|
||||
private final DownloadedDAO downloadDAO;
|
||||
|
||||
@Autowired
|
||||
public FileServiceImpl(FileDAO fileDAO, ICategoryService categoryService, IAuthService authService,
|
||||
DownloadedDAO downloadDAO) {
|
||||
this.fileDAO = fileDAO;
|
||||
this.categoryService = categoryService;
|
||||
this.authService = authService;
|
||||
this.downloadDAO = downloadDAO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateAuth(long id, String auth) {
|
||||
int[] au = BeanUtils.getAuth(auth);
|
||||
return fileDAO.updateAuthById(id, au[0], au[1], au[2], au[3], au[4]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseAuthRecord getAuth(long id) {
|
||||
return fileDAO.getAuth(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor =
|
||||
Exception.class)
|
||||
public boolean deleteFiles(String ids) {
|
||||
if (Checker.isNotEmpty(ids)) {
|
||||
String[] id = ids.split(ValueConsts.COMMA_SIGN);
|
||||
for (String s : id) {
|
||||
long fileId = Formatter.stringToLong(s);
|
||||
String localUrl = fileDAO.getLocalUrlById(fileId);
|
||||
FileExecutor.deleteFile(localUrl);
|
||||
removeById(fileId);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor =
|
||||
Exception.class)
|
||||
public boolean[] updateUrl(int id, String oldLocalUrl, String localUrl, String visitUrl) {
|
||||
boolean[] b = new boolean[]{false, false};
|
||||
boolean canUpdateLocalUrl = Checker.isExists(oldLocalUrl) && Checker.isNotEmpty(localUrl) && Checker
|
||||
.isNotExists(localUrl) && !localUrlExists(localUrl);
|
||||
if (canUpdateLocalUrl) {
|
||||
FileExecutor.renameTo(oldLocalUrl, localUrl);
|
||||
fileDAO.updateLocalUrlById(id, localUrl);
|
||||
b[0] = true;
|
||||
}
|
||||
if (Checker.isNotEmpty(visitUrl) && !visitUrlExists(visitUrl)) {
|
||||
fileDAO.updateVisitUrlById(id, visitUrl);
|
||||
b[1] = true;
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor =
|
||||
Exception.class)
|
||||
public boolean updateFileInfo(long id, User user, String name, String category, String tag, String description) {
|
||||
File file = fileDAO.getById(id);
|
||||
if (Checker.isNotNull(file) && file.getIsUpdatable() == 1) {
|
||||
AuthRecord authRecord = authService.getByFileIdAndUserId(id, user.getId());
|
||||
String suffix = FileExecutor.getFileSuffix(name);
|
||||
boolean canUpdate = (Checker.isNull(authRecord) ? user.getIsUpdatable() == 1 :
|
||||
authRecord.getIsUpdatable() == 1) && Checker.isNotEmpty(name) && Pattern.compile(SketchApplication.settings.getStringUseEval(ConfigConsts.FILE_SUFFIX_MATCH_OF_SETTING)).matcher(suffix).matches();
|
||||
if (canUpdate) {
|
||||
String localUrl = file.getLocalUrl();
|
||||
java.io.File newFile = new java.io.File(localUrl);
|
||||
String visitUrl = file.getVisitUrl();
|
||||
String newLocalUrl = localUrl.substring(0, localUrl.lastIndexOf(ValueConsts.SEPARATOR) + 1) + name;
|
||||
String newVisitUrl = visitUrl.substring(0, visitUrl.lastIndexOf(ValueConsts.SPLASH_STRING) + 1) + name;
|
||||
file.setName(name);
|
||||
file.setSuffix(suffix);
|
||||
file.setLocalUrl(newLocalUrl);
|
||||
file.setVisitUrl(newVisitUrl);
|
||||
file.setCategoryId(categoryService.getIdByName(category));
|
||||
file.setTag(tag);
|
||||
file.setDescription(description);
|
||||
boolean isValid = (localUrl.endsWith(ValueConsts.SEPARATOR + name) || (!Checker.isExists(newLocalUrl)
|
||||
&& !localUrlExists(newLocalUrl) && !visitUrlExists(newVisitUrl)));
|
||||
if (isValid && fileDAO.updateFileInfo(file)) {
|
||||
return newFile.renameTo(new java.io.File(newLocalUrl));
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeFile(User user, long fileId) {
|
||||
File file = fileDAO.getById(fileId);
|
||||
boolean isDeleted = false;
|
||||
if (Checker.isNotNull(file) && file.getIsDeletable() == 1) {
|
||||
AuthRecord authRecord = authService.getByFileIdAndUserId(fileId, user.getId());
|
||||
String localUrl = fileDAO.getLocalUrlById(fileId);
|
||||
isDeleted = (Checker.isNull(authRecord) ? user.getIsDeletable() == 1 : authRecord.getIsDeletable() == 1)
|
||||
&& removeById(fileId);
|
||||
if (isDeleted) {
|
||||
FileExecutor.deleteFile(localUrl);
|
||||
}
|
||||
}
|
||||
return isDeleted;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FileRecord> listUserDownloaded(int userId, int offset, String search) {
|
||||
return fileDAO.listUserDownloaded(userId, offset, search);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FileRecord> listUserUploaded(int userId, int offset, String search) {
|
||||
return fileDAO.listUserUploaded(userId, offset, search);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor =
|
||||
Exception.class)
|
||||
public boolean removeById(long id) {
|
||||
downloadDAO.removeByFileId(id);
|
||||
authService.removeByFileId(id);
|
||||
return fileDAO.removeById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeByVisitUrl(String visitUrl) {
|
||||
long fileId = fileDAO.getIdByVisitUrl(visitUrl);
|
||||
return removeById(fileId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeByLocalUrl(String localUrl) {
|
||||
long fileId = fileDAO.getIdByLocalUrl(localUrl);
|
||||
return removeById(fileId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getResource(String visitUrl, HttpServletRequest request) {
|
||||
logger.info("visit url: " + visitUrl);
|
||||
boolean downloadable = SketchApplication.settings.getBooleanUseEval(ConfigConsts
|
||||
.ANONYMOUS_DOWNLOADABLE_OF_SETTING);
|
||||
User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
|
||||
File file = fileDAO.getFileByVisitUrl(visitUrl);
|
||||
AuthRecord authRecord = null;
|
||||
if (Checker.isNotNull(file)) {
|
||||
authRecord = authService.getByFileIdAndUserId(file.getId(), Checker.isNull(user) ? 0 : user.getId());
|
||||
}
|
||||
boolean canDownload = Checker.isNotNull(file) && file.getIsDownloadable() == 1 && (downloadable || (Checker
|
||||
.isNull(authRecord) ? (Checker.isNotNull(user) && user.getIsDownloadable() == 1) : authRecord
|
||||
.getIsDownloadable() == 1));
|
||||
if (canDownload) {
|
||||
fileDAO.updateDownloadTimesById(file.getId());
|
||||
if (Checker.isNotNull(user)) {
|
||||
downloadDAO.insertDownload(user.getId(), file.getId());
|
||||
}
|
||||
return file.getLocalUrl();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocalUrlByVisitUrl(String visitUrl) {
|
||||
return fileDAO.getLocalUrlByVisitUrl(Checker.checkNull(visitUrl));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FileRecord> listAll(int userId, int offset, int categoryId, String orderBy, String search) {
|
||||
return fileDAO.listAll(userId, offset, categoryId, orderBy, search);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor =
|
||||
Exception.class)
|
||||
public boolean upload(int categoryId, String tag, String description, String prefix, MultipartFile multipartFile,
|
||||
User user) {
|
||||
if (user.getIsUploadable() == 1) {
|
||||
String name = multipartFile.getOriginalFilename();
|
||||
String suffix = FileExecutor.getFileSuffix(name);
|
||||
String localUrl = SettingConfig.getUploadStoragePath() + ValueConsts.SEPARATOR + name;
|
||||
Category category = categoryService.getById(categoryId);
|
||||
long maxSize = Formatter.sizeToLong(SketchApplication.settings.getStringUseEval(ConfigConsts
|
||||
.FILE_MAX_SIZE_OF_SETTING));
|
||||
long size = multipartFile.getSize();
|
||||
boolean fileExists = localUrlExists(localUrl);
|
||||
//检测标签是否合法
|
||||
if (SketchApplication.settings.getBooleanUseEval(ConfigConsts.TAG_REQUIRE_OF_SETTING)) {
|
||||
String[] tags = Checker.checkNull(tag).split(ValueConsts.SPACE);
|
||||
if (tags.length <= SketchApplication.settings.getIntegerUseEval(ConfigConsts.TAG_SIZE_OF_SETTING)) {
|
||||
int maxLength = SketchApplication.settings.getIntegerUseEval(ConfigConsts.TAG_LENGTH_OF_SETTING);
|
||||
for (String t : tags) {
|
||||
if (t.length() > maxLength) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//是否可以上传
|
||||
boolean canUpload = !multipartFile.isEmpty() && size <= maxSize && Pattern.compile(SketchApplication
|
||||
.settings.getStringUseEval(ConfigConsts.FILE_SUFFIX_MATCH_OF_SETTING)).matcher(suffix).matches()
|
||||
&& (Checker.isNotExists(localUrl) || !fileExists || SketchApplication.settings.getBooleanUseEval
|
||||
(ConfigConsts.FILE_COVER_OF_SETTING));
|
||||
logger.info("is empty [" + multipartFile.isEmpty() + "], file size [" + size + "], max file size [" +
|
||||
maxSize + "]");
|
||||
if (canUpload) {
|
||||
String visitUrl = getRegularVisitUrl(Checker.isNotEmpty(prefix) && user.getPermission() > 1 ? prefix
|
||||
: SketchApplication.settings.getStringUseEval(ConfigConsts.CUSTOM_LINK_RULE_OF_SETTING), user,
|
||||
name, suffix, category);
|
||||
if (fileExists) {
|
||||
removeByLocalUrl(localUrl);
|
||||
}
|
||||
if (visitUrlExists(visitUrl)) {
|
||||
removeByVisitUrl(visitUrl);
|
||||
}
|
||||
try {
|
||||
multipartFile.transferTo(new java.io.File(localUrl));
|
||||
logger.info("local url of upload file: " + localUrl);
|
||||
File file = new File(name, suffix, localUrl, visitUrl, WebUtils.scriptFilter(description),
|
||||
WebUtils.scriptFilter(tag), user.getId(), categoryId);
|
||||
int[] auth = SettingConfig.getAuth(ConfigConsts.FILE_DEFAULT_AUTH_OF_SETTING);
|
||||
file.setAuth(auth[0], auth[1], auth[2], auth[3], auth[4]);
|
||||
boolean isSuccess = fileDAO.insertFile(file);
|
||||
if (isSuccess) {
|
||||
long fileId = fileDAO.getIdByLocalUrl(localUrl);
|
||||
if (fileId > 0) {
|
||||
authService.insertDefaultAuth(user.getId(), fileId);
|
||||
}
|
||||
} else {
|
||||
FileExecutor.deleteFile(localUrl);
|
||||
}
|
||||
return isSuccess;
|
||||
} catch (Exception e) {
|
||||
FileExecutor.deleteFile(localUrl);
|
||||
logger.error("save file error: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String getRegularVisitUrl(String customUrl, User user, String fileName, String suffix, Category category) {
|
||||
Date date = new Date();
|
||||
suffix = suffix.startsWith(".") ? "" : "." + suffix;
|
||||
if (Checker.isNotEmpty(customUrl)) {
|
||||
try {
|
||||
customUrl = URLDecoder.decode(customUrl, "utf-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
logger.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
if (!customUrl.contains(FILE_NAME) && !customUrl.contains(RANDOM_ID)) {
|
||||
customUrl += (customUrl.endsWith("/") ? "" : "/") + fileName;
|
||||
}
|
||||
customUrl = customUrl.replace(YEAR, DateUtils.getYear(date)).replace(MONTH, DateUtils.getMonth(date)).replace
|
||||
(DAY, DateUtils.getDay(date)).replace(AUTHOR, user.getUsername()).replace(FILE_NAME, fileName)
|
||||
.replace(CATEGORY_NAME, Checker.checkNull(Checker.isNull(category) ? "uncategorized" : category
|
||||
.getName())).replace(RANDOM_ID, String.valueOf(RandomUtils.getRandomInteger(ValueConsts
|
||||
.NINE_INT))).replace(FILE_SUFFIX, suffix);
|
||||
return "/file" + (customUrl.startsWith("/") ? "" : "/") + customUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor =
|
||||
Exception.class)
|
||||
public boolean shareFiles(String prefix, String files, User user) {
|
||||
if (Checker.isNotEmpty(files)) {
|
||||
String[] paths = files.split(ValueConsts.COMMA_SIGN);
|
||||
for (String path : paths) {
|
||||
java.io.File f = new java.io.File(path);
|
||||
String name = f.getName();
|
||||
String suffix = FileExecutor.getFileSuffix(name);
|
||||
String visitUrl = getRegularVisitUrl(prefix, user, name, suffix, null);
|
||||
if (f.exists() && f.isFile() && !localUrlExists(path) && !visitUrlExists(visitUrl)) {
|
||||
File file = new File(name, suffix, path, visitUrl, ValueConsts.EMPTY_STRING,
|
||||
ValueConsts.EMPTY_STRING, user.getId(),
|
||||
categoryService.getIdByName(DefaultValues.UNCATEGORIZED));
|
||||
file.setAuth(ValueConsts.ONE_INT, ValueConsts.ZERO_INT, ValueConsts.ZERO_INT,
|
||||
ValueConsts.ZERO_INT, ValueConsts.ONE_INT);
|
||||
fileDAO.insertFile(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean localUrlExists(String localUrl) {
|
||||
return fileDAO.checkLocalUrl(localUrl) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visitUrlExists(String visitUrl) {
|
||||
return fileDAO.checkVisitUrl(visitUrl) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getFileId(String localUrl) {
|
||||
try {
|
||||
return fileDAO.getIdByLocalUrl(localUrl);
|
||||
} catch (Exception e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<FileBasicRecord> listBasicAll(String user, String file, String category, int offset) {
|
||||
return (List<FileBasicRecord>) ServiceUtils.invokeFileFilter(fileDAO, "listBasicBy", user, file, category,
|
||||
offset);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.mesasoft.cn.dao.UploadedDAO;
|
||||
import com.mesasoft.cn.model.UploadedRecord;
|
||||
import com.mesasoft.cn.service.IUploadedService;
|
||||
import com.mesasoft.cn.util.ServiceUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/2/28
|
||||
*/
|
||||
@Service
|
||||
public class UploadedServiceImpl implements IUploadedService {
|
||||
|
||||
private final UploadedDAO uploadedDAO;
|
||||
|
||||
@Autowired
|
||||
public UploadedServiceImpl(UploadedDAO uploadedDAO) {this.uploadedDAO = uploadedDAO;}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<UploadedRecord> list(String user, String file, String category, int offset) {
|
||||
return (List<UploadedRecord>) ServiceUtils.invokeFileFilter(uploadedDAO, "listUploadedBy", user, file,
|
||||
category, offset);
|
||||
}
|
||||
}
|
||||
163
src/main/java/com/mesasoft/cn/service/impl/UserServiceImpl.java
Normal file
163
src/main/java/com/mesasoft/cn/service/impl/UserServiceImpl.java
Normal file
@@ -0,0 +1,163 @@
|
||||
package com.mesasoft.cn.service.impl;
|
||||
|
||||
import com.mesasoft.cn.SketchApplication;
|
||||
import com.mesasoft.cn.dao.UserDAO;
|
||||
import com.mesasoft.cn.util.BeanUtils;
|
||||
import com.mesasoft.cn.config.SettingConfig;
|
||||
import com.mesasoft.cn.config.TokenConfig;
|
||||
import com.mesasoft.cn.entity.User;
|
||||
import com.mesasoft.cn.modules.constant.ConfigConsts;
|
||||
import com.mesasoft.cn.service.IUserService;
|
||||
import com.zhazhapan.modules.constant.ValueConsts;
|
||||
import com.zhazhapan.util.Checker;
|
||||
import com.zhazhapan.util.DateUtils;
|
||||
import com.zhazhapan.util.MailSender;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* @author pantao
|
||||
* @since 2018/1/22
|
||||
*/
|
||||
@Service
|
||||
public class UserServiceImpl implements IUserService {
|
||||
|
||||
private final UserDAO userDAO;
|
||||
|
||||
private Logger logger = Logger.getLogger(UserServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
public UserServiceImpl(UserDAO userDAO) {this.userDAO = userDAO;}
|
||||
|
||||
@Override
|
||||
public boolean updatePermission(int id, int permission) {
|
||||
return userDAO.updatePermission(id, permission > 2 ? 2 : permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean resetPassword(int id, String password) {
|
||||
boolean result = Checker.isNotEmpty(password) && userDAO.updatePasswordById(id, password);
|
||||
if (result) {
|
||||
TokenConfig.removeTokenByValue(id);
|
||||
try {
|
||||
MailSender.sendMail(getUserById(id).getEmail(), "密码重置通知", "您的密码已被管理员重置为:" + password);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateFileAuth(int id, String auths) {
|
||||
int[] auth = BeanUtils.getAuth(auths);
|
||||
return userDAO.updateAuthById(id, auth[0], auth[1], auth[2], auth[3], auth[4]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<User> listUser(int permission, String condition, int offset) {
|
||||
return userDAO.listUserBy(permission, condition, offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public User login(String loginName, String password, String token, HttpServletResponse response) {
|
||||
boolean allowLogin = SketchApplication.settings.getBooleanUseEval(ConfigConsts.ALLOW_LOGIN_OF_SETTINGS);
|
||||
User user = null;
|
||||
if (allowLogin) {
|
||||
if (Checker.isNotEmpty(token) && SketchApplication.tokens.containsKey(token)) {
|
||||
user = userDAO.getUserById(SketchApplication.tokens.get(token));
|
||||
if (Checker.isNotNull(response)) {
|
||||
Cookie cookie = new Cookie(ValueConsts.TOKEN_STRING, TokenConfig.generateToken(token, user.getId
|
||||
()));
|
||||
cookie.setMaxAge(30 * 24 * 60 * 60);
|
||||
response.addCookie(cookie);
|
||||
}
|
||||
}
|
||||
if (Checker.isNull(user) && Checker.isNotEmpty(loginName) && Checker.isNotEmpty(password)) {
|
||||
user = userDAO.login(loginName, password);
|
||||
if (Checker.isNotNull(user)) {
|
||||
TokenConfig.removeTokenByValue(user.getId());
|
||||
}
|
||||
}
|
||||
updateUserLoginTime(user);
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean register(String username, String email, String password) {
|
||||
boolean allowRegister = SketchApplication.settings.getBooleanUseEval(ConfigConsts.ALLOW_REGISTER_OF_SETTINGS);
|
||||
if (allowRegister) {
|
||||
boolean isValid = Checker.isEmail(email) && checkPassword(password) && Pattern.compile(SketchApplication.settings
|
||||
.getStringUseEval(ConfigConsts.USERNAME_PATTERN_OF_SETTINGS)).matcher(username).matches();
|
||||
if (isValid) {
|
||||
User user = new User(username, ValueConsts.EMPTY_STRING, email, password);
|
||||
int[] auth = SettingConfig.getAuth(ConfigConsts.USER_DEFAULT_AUTH_OF_SETTING);
|
||||
user.setAuth(auth[0], auth[1], auth[2], auth[3], auth[4]);
|
||||
return userDAO.insertUser(user);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean resetPasswordByEmail(String email, String password) {
|
||||
return Checker.isEmail(email) && checkPassword(password) && userDAO.updatePasswordByEmail(password, email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPassword(String password) {
|
||||
int min = SketchApplication.settings.getIntegerUseEval(ConfigConsts.PASSWORD_MIN_LENGTH_OF_SETTINGS);
|
||||
int max = SketchApplication.settings.getIntegerUseEval(ConfigConsts.PASSWORD_MAX_LENGTH_OF_SETTINGS);
|
||||
return Checker.isLimited(password, min, max);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean emailExists(String email) {
|
||||
return Checker.isEmail(email) && userDAO.checkEmail(email) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateBasicInfoById(int id, String avatar, String realName, String email) {
|
||||
return Checker.isEmail(email) && userDAO.updateBasicInfo(id, Checker.checkNull(avatar), Checker.checkNull
|
||||
(realName), email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUserId(String usernameOrEmail) {
|
||||
try {
|
||||
return userDAO.getUserId(Checker.checkNull(usernameOrEmail));
|
||||
} catch (Exception e) {
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean usernameExists(String username) {
|
||||
return Checker.isNotEmpty(username) && userDAO.checkUsername(username) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getUserById(int id) {
|
||||
return userDAO.getUserById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUserLoginTime(User user) {
|
||||
if (Checker.isNotNull(user)) {
|
||||
user.setLastLoginTime(DateUtils.getCurrentTimestamp());
|
||||
userDAO.updateUserLoginTime(user.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updatePasswordById(String password, int id) {
|
||||
return checkPassword(password) && userDAO.updatePasswordById(id, password);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user