增加第二个数据库用于存放缓存相关数据;移除部分残留代码;规范化Request方法,更新UA;优化部分代码;
This commit is contained in:
parent
e1afc3a6c5
commit
9df2b7994b
@ -7,15 +7,15 @@ import com.pengrad.telegrambot.model.Chat;
|
||||
import com.pengrad.telegrambot.model.Message;
|
||||
import com.pengrad.telegrambot.model.MessageEntity;
|
||||
import com.pengrad.telegrambot.response.SendResponse;
|
||||
import com.sun.tools.javac.Main;
|
||||
import com.zaxxer.hikari.HikariConfig;
|
||||
import org.springframework.aot.hint.annotation.RegisterReflectionForBinding;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import com.pengrad.telegrambot.model.User;
|
||||
|
||||
@Configuration
|
||||
@RegisterReflectionForBinding(classes = {CRC32Cache.class, CustomConfiguration.class,
|
||||
GalleryForQuery.class, Gallery.class, GalleryTask.class, MaskDomain.class,
|
||||
@RegisterReflectionForBinding(classes = {CustomConfiguration.class,
|
||||
GalleryForQuery.class, Gallery.class, GalleryTask.class, HikariConfig.class,
|
||||
PageNameCache.class, ShareFile.class, Tag.class, TagMark.class, User.class,
|
||||
SendResponse.class, Message.class, com.pengrad.telegrambot.model.User.class,
|
||||
Chat.class, MessageEntity.class,
|
||||
|
||||
@ -1,11 +1,8 @@
|
||||
package com.lion.lionwebsite.Configuration;
|
||||
|
||||
import com.lion.lionwebsite.Domain.MaskDomain;
|
||||
import com.lion.lionwebsite.Interceptor.HumanInterceptor;
|
||||
import com.lion.lionwebsite.Interceptor.PersonalInterceptor;
|
||||
import com.lion.lionwebsite.Interceptor.TaskHandlerInterceptor;
|
||||
import com.lion.lionwebsite.Util.CustomUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
@ -36,14 +33,4 @@ public class InterceptorConfiguration implements WebMvcConfigurer {
|
||||
public HandlerInterceptor getHumanInterceptor(){
|
||||
return new HumanInterceptor();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CustomUtil getParameterUtil(){
|
||||
CustomUtil customUtil = new CustomUtil();
|
||||
MaskDomain[] maskDomains = new MaskDomain[2];
|
||||
maskDomains[0] = new MaskDomain("exhentai.org", "element-plus.org");
|
||||
maskDomains[1] = new MaskDomain("e-hentai.org", "element.org");
|
||||
customUtil.setMaskDomains(maskDomains);
|
||||
return customUtil;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
package com.lion.lionwebsite.Configuration;
|
||||
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@Configuration
|
||||
public class SqlConfiguration {
|
||||
@Bean(name = "datasource-main")
|
||||
@ConfigurationProperties(prefix = "spring.datasource-main")
|
||||
public DataSource dataSourceMain() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Bean(name = "datasource-cache")
|
||||
@ConfigurationProperties(prefix = "spring.datasource-cache")
|
||||
public DataSource dataSourceCache() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Bean(name = "sqlSessionFactory-main")
|
||||
public SqlSessionFactory sqlSessionFactoryMain(@Qualifier("datasource-main") DataSource dataSource) throws Exception {
|
||||
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
|
||||
sessionFactoryBean.setDataSource(dataSource);
|
||||
return sessionFactoryBean.getObject();
|
||||
}
|
||||
|
||||
@Bean(name = "sqlSessionFactory-cache")
|
||||
public SqlSessionFactory sqlSessionFactoryCache(@Qualifier("datasource-cache") DataSource dataSource) throws Exception {
|
||||
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
|
||||
sessionFactoryBean.setDataSource(dataSource);
|
||||
return sessionFactoryBean.getObject();
|
||||
}
|
||||
|
||||
@Bean(name = "sqlSessionTemplate-main")
|
||||
public SqlSessionTemplate sqlSessionTemplateMain(@Qualifier("sqlSessionFactory-main") SqlSessionFactory sqlSessionFactory) {
|
||||
return new SqlSessionTemplate(sqlSessionFactory);
|
||||
}
|
||||
|
||||
@Bean(name = "sqlSessionTemplate-cache")
|
||||
public SqlSessionTemplate sqlSessionTemplateCache(@Qualifier("sqlSessionFactory-cache") SqlSessionFactory sqlSessionFactory) {
|
||||
return new SqlSessionTemplate(sqlSessionFactory);
|
||||
}
|
||||
}
|
||||
@ -3,15 +3,12 @@ package com.lion.lionwebsite.Controller;
|
||||
import com.lion.lionwebsite.Service.CollectService;
|
||||
import com.lion.lionwebsite.Service.GalleryManageService;
|
||||
import com.lion.lionwebsite.Service.UserServiceImpl;
|
||||
import com.lion.lionwebsite.Util.CustomUtil;
|
||||
import com.lion.lionwebsite.Util.Response;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@ -22,14 +19,11 @@ public class GalleryManageController {
|
||||
|
||||
CollectService collectService;
|
||||
|
||||
CustomUtil customUtil;
|
||||
|
||||
UserServiceImpl userService;
|
||||
|
||||
public GalleryManageController(GalleryManageService galleryManageService, CollectService collectService, CustomUtil customUtil, UserServiceImpl userService) {
|
||||
public GalleryManageController(GalleryManageService galleryManageService, CollectService collectService, UserServiceImpl userService) {
|
||||
this.galleryManageService = galleryManageService;
|
||||
this.collectService = collectService;
|
||||
this.customUtil = customUtil;
|
||||
this.userService = userService;
|
||||
}
|
||||
|
||||
@ -73,7 +67,7 @@ public class GalleryManageController {
|
||||
return galleryManageService.selectGalleryByDownloader(AuthCode);
|
||||
}
|
||||
default -> {
|
||||
return Response._default();
|
||||
return Response._failure("参数错误");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
|
||||
import com.lion.lionwebsite.Domain.CRC32Cache;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
@Mapper
|
||||
public interface CRC32CacheMapper {
|
||||
@Insert("insert into CRC32Cache (path, lastModifyTime, crc32) values (#{path}, #{lastModifyTime}, #{crc32})")
|
||||
void insertCache(CRC32Cache crc32Cache);
|
||||
|
||||
@Select("select * from CRC32Cache where path=#{path}")
|
||||
CRC32Cache selectCache(String path);
|
||||
|
||||
@Select("select * from CRC32Cache where path like '%' || #{name} || '%'")
|
||||
CRC32Cache selectCacheByName(String name);
|
||||
|
||||
// @Update("update CRC32Cache set lastModifyTime=#{lastModifyTime}, crc32=#{crc32} where path=#{path}")
|
||||
// void updateCache(CRC32Cache crc32Cache);
|
||||
|
||||
@Delete("delete from CRC32Cache where path=#{path}")
|
||||
void deleteCacheByPath(String path);
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.cache;
|
||||
|
||||
import com.lion.lionwebsite.Domain.PageNameCache;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
@ -17,6 +17,6 @@ public interface PageNameCacheMapper {
|
||||
@Delete("delete from pageName where gid=#{gid}")
|
||||
void deletePageNameByGid(int gid);
|
||||
|
||||
@Delete("delete from pageName where gid=#{gid} and page=#{page}")
|
||||
void deletePageName(PageNameCache pageNameCache);
|
||||
// @Delete("delete from pageName where gid=#{gid} and page=#{page}")
|
||||
// void deletePageName(PageNameCache pageNameCache);
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.normal;
|
||||
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.normal;
|
||||
|
||||
import com.lion.lionwebsite.Domain.CustomConfiguration;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.normal;
|
||||
|
||||
import com.lion.lionwebsite.Domain.Gallery;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.normal;
|
||||
|
||||
import com.lion.lionwebsite.Domain.ShareFile;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.normal;
|
||||
|
||||
import com.lion.lionwebsite.Domain.SubBind;
|
||||
import com.lion.lionwebsite.Domain.SubUpdateRecord;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.normal;
|
||||
|
||||
import com.lion.lionwebsite.Domain.Tag;
|
||||
import com.lion.lionwebsite.Domain.TagMark;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.lion.lionwebsite.Dao;
|
||||
package com.lion.lionwebsite.Dao.normal;
|
||||
|
||||
import com.lion.lionwebsite.Domain.User;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
@ -1,14 +0,0 @@
|
||||
package com.lion.lionwebsite.Domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CRC32Cache {
|
||||
String path;
|
||||
long lastModifyTime;
|
||||
String crc32;
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
package com.lion.lionwebsite.Domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
public class MaskDomain {
|
||||
String raw;
|
||||
String mask;
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package com.lion.lionwebsite.Filter;
|
||||
|
||||
import com.lion.lionwebsite.Dao.UserMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.UserMapper;
|
||||
import com.lion.lionwebsite.Util.CustomUtil;
|
||||
import jakarta.servlet.*;
|
||||
import jakarta.servlet.annotation.WebFilter;
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
package com.lion.lionwebsite.Interceptor;
|
||||
|
||||
import com.lion.lionwebsite.Dao.UserMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.UserMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
@ -14,7 +15,7 @@ public class TaskHandlerInterceptor implements HandlerInterceptor {
|
||||
@Resource
|
||||
UserMapper userMapper;
|
||||
|
||||
String[] AuthCodes = null;
|
||||
String[] AuthCodes;
|
||||
|
||||
public TaskHandlerInterceptor(UserMapper userMapper) {
|
||||
this.userMapper = userMapper;
|
||||
@ -22,7 +23,7 @@ public class TaskHandlerInterceptor implements HandlerInterceptor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
|
||||
public boolean preHandle(HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler){
|
||||
String auth = request.getParameter("AuthCode");
|
||||
|
||||
if(auth != null)
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package com.lion.lionwebsite;
|
||||
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.mybatis.spring.annotation.MapperScans;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||
@ -9,6 +11,10 @@ import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
@ServletComponentScan(value = "com.lion.lionwebsite.Filter")
|
||||
@MapperScans({
|
||||
@MapperScan(basePackages = "com.lion.lionwebsite.Dao.normal", sqlSessionTemplateRef = "sqlSessionTemplate-main", sqlSessionFactoryRef = "sqlSessionFactory-main"),
|
||||
@MapperScan(basePackages = "com.lion.lionwebsite.Dao.cache", sqlSessionTemplateRef = "sqlSessionTemplate-cache", sqlSessionFactoryRef = "sqlSessionFactory-cache")
|
||||
})
|
||||
public class LionWebsiteApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.lion.lionwebsite.Service;
|
||||
|
||||
import com.lion.lionwebsite.Dao.CollectMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.CollectMapper;
|
||||
import com.lion.lionwebsite.Util.Response;
|
||||
import lombok.Data;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -2,7 +2,8 @@ package com.lion.lionwebsite.Service;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.lion.lionwebsite.Dao.*;
|
||||
import com.lion.lionwebsite.Dao.cache.PageNameCacheMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.*;
|
||||
import com.lion.lionwebsite.Domain.*;
|
||||
import com.lion.lionwebsite.Exception.ResolutionNotMatchException;
|
||||
import com.lion.lionwebsite.Error.ErrorCode;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package com.lion.lionwebsite.Service;
|
||||
|
||||
import com.lion.lionwebsite.Dao.CustomConfigurationMapper;
|
||||
import com.lion.lionwebsite.Dao.GalleryMapper;
|
||||
import com.lion.lionwebsite.Dao.ShareFileMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.CustomConfigurationMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.GalleryMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.ShareFileMapper;
|
||||
import com.lion.lionwebsite.Domain.CustomConfiguration;
|
||||
import com.lion.lionwebsite.Domain.ShareFile;
|
||||
import com.lion.lionwebsite.Util.CustomUtil;
|
||||
@ -29,8 +29,6 @@ import static java.nio.file.FileVisitResult.CONTINUE;
|
||||
@Service
|
||||
@Data
|
||||
public class LocalServiceImpl{
|
||||
String fires = "https://api.dler.io/sub?target=clash&new_name=true&url=https%3A%2F%2Ffast.losadhwselfff2332dasd.xyz%2Flink%2Fz0pfwyTvC5naXkbb%3Fclash%3D1&insert=false&config=https%3A%2F%2Fraw.githubusercontent.com%2FACL4SSR%2FACL4SSR%2Fmaster%2FClash%2Fconfig%2FACL4SSR_Online.ini";
|
||||
|
||||
String DouNaiClash = "https://aaaa.gay/link/X7zEqkIx5gtIGugO?client=clashmeta";
|
||||
|
||||
String DouNaiV2ray = "https://aaaa.gay/link/X7zEqkIx5gtIGugO?client=v2";
|
||||
@ -81,8 +79,6 @@ public class LocalServiceImpl{
|
||||
return false;
|
||||
}
|
||||
|
||||
File mixin = new File("sub/sub.txt");
|
||||
File firesFile = new File("sub/fires.txt");
|
||||
File DouNaiClashFile = new File("sub/DouNaiClash.txt");
|
||||
File DouNaiV2rayFile = new File("sub/DouNaiV2ray.txt");
|
||||
File directory = new File("sub");
|
||||
@ -90,31 +86,17 @@ public class LocalServiceImpl{
|
||||
if(!directory.isDirectory())
|
||||
Files.createDirectory(Paths.get("sub"));
|
||||
|
||||
List<String> fires_profile = null;
|
||||
List<String> DouNaiClash_profile = null;
|
||||
OutputStream outputStream;
|
||||
|
||||
//下载薯条订阅
|
||||
try(FileWriter writer = new FileWriter(firesFile)) {
|
||||
fires_profile = Get(fires);
|
||||
for (String i : fires_profile)
|
||||
writer.write(i + "\n");
|
||||
|
||||
System.out.println("load fires complete");
|
||||
}catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
System.out.println("load fires failure");
|
||||
}
|
||||
List<String> DouNaiClash_profile;
|
||||
|
||||
//下载豆奶v2ray订阅
|
||||
try(FileWriter writer = new FileWriter(DouNaiV2rayFile)) {
|
||||
String DouNaiV2rayRaw = Get(DouNaiV2ray).get(0);
|
||||
String DouNaiV2rayRaw = Get(DouNaiV2ray).getFirst();
|
||||
String[] v2rayPlain = new String(Base64.getDecoder().decode(DouNaiV2rayRaw)).split("\n");
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
//过滤高倍率节点
|
||||
for(String node: v2rayPlain){
|
||||
String name = URLDecoder.decode(node.split("#")[1], StandardCharsets.UTF_8);
|
||||
if(name.startsWith("①") && name.contains("流量")){
|
||||
if(name.startsWith("⛅") && name.contains("流量")){
|
||||
float ratio = Float.parseFloat(name.substring(name.indexOf("(") + 1, name.indexOf(")")).replace("倍流量", ""));
|
||||
if(ratio <= 1)
|
||||
stringBuilder.append(node).append("\n");
|
||||
@ -163,44 +145,6 @@ public class LocalServiceImpl{
|
||||
System.out.println("load DouNai clash failure");
|
||||
}
|
||||
|
||||
//处理合并
|
||||
assert DouNaiClash_profile != null;
|
||||
int side_start = DouNaiClash_profile.indexOf("proxies:");
|
||||
int side_end = DouNaiClash_profile.indexOf("proxy-groups:");
|
||||
|
||||
List<String> side_proxy = new ArrayList<>();
|
||||
List<String> side_name = new ArrayList<>();
|
||||
for (int i = side_start + 1; i < side_end; i++) {
|
||||
side_proxy.add(DouNaiClash_profile.get(i));
|
||||
if (DouNaiClash_profile.get(i).contains("name"))
|
||||
side_name.add(DouNaiClash_profile.get(i).replace("name:", ""));
|
||||
}
|
||||
|
||||
List<String> final_profile = new ArrayList<>();
|
||||
assert fires_profile != null;
|
||||
for (String i : fires_profile) {
|
||||
if (i.equals("proxy-groups:"))
|
||||
final_profile.addAll(side_proxy);
|
||||
|
||||
final_profile.add(i);
|
||||
if (i.equals("proxy-groups:")) {
|
||||
final_profile.add(" -");
|
||||
final_profile.add(" name: e站流量");
|
||||
final_profile.add(" type: select");
|
||||
final_profile.add(" proxies:");
|
||||
for (String x : side_name)
|
||||
final_profile.add(" " + x);
|
||||
|
||||
}
|
||||
if (i.equals("rules:"))
|
||||
final_profile.add(" - DOMAIN-KEYWORD,hentai,e站流量");
|
||||
}
|
||||
|
||||
outputStream = Files.newOutputStream(mixin.toPath());
|
||||
for(String i: final_profile)
|
||||
outputStream.write((i + "\n").getBytes(StandardCharsets.UTF_8));
|
||||
outputStream.close();
|
||||
|
||||
configurationMapper.updateConfiguration(CustomConfiguration.LAST_UPDATE_SUB_TIME, dateTimeFormatter.format(LocalDateTime.now()));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -3,9 +3,9 @@ package com.lion.lionwebsite.Service;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.lion.lionwebsite.Dao.CustomConfigurationMapper;
|
||||
import com.lion.lionwebsite.Dao.ShareFileMapper;
|
||||
import com.lion.lionwebsite.Dao.UserMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.CustomConfigurationMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.ShareFileMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.UserMapper;
|
||||
import com.lion.lionwebsite.Domain.CustomConfiguration;
|
||||
import com.lion.lionwebsite.Domain.ShareFile;
|
||||
import com.lion.lionwebsite.Interceptor.TaskHandlerInterceptor;
|
||||
@ -22,7 +22,6 @@ import org.apache.commons.compress.archivers.ArchiveEntry;
|
||||
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
|
||||
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
|
||||
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package com.lion.lionwebsite.Service;
|
||||
|
||||
import com.lion.lionwebsite.Dao.CustomConfigurationMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.CustomConfigurationMapper;
|
||||
|
||||
import com.lion.lionwebsite.Dao.ShareFileMapper;
|
||||
import com.lion.lionwebsite.Dao.UserMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.ShareFileMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.UserMapper;
|
||||
import com.lion.lionwebsite.Domain.CustomConfiguration;
|
||||
import com.lion.lionwebsite.Domain.ShareFile;
|
||||
import com.lion.lionwebsite.Domain.User;
|
||||
@ -23,6 +23,8 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Calendar;
|
||||
@ -129,7 +131,7 @@ public class PublicServiceImpl {
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
outputStream.write(imageBytes);
|
||||
outputStream.close();
|
||||
}catch (IOException e){
|
||||
}catch (IOException | URISyntaxException e){
|
||||
e.printStackTrace();
|
||||
try {
|
||||
response.sendError(503);
|
||||
@ -139,8 +141,8 @@ public class PublicServiceImpl {
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] getImageBytesFromUrl(String imageUrl) throws IOException {
|
||||
URL url = new URL(imageUrl);
|
||||
public static byte[] getImageBytesFromUrl(String imageUrl) throws IOException, URISyntaxException {
|
||||
URL url = new URI(imageUrl).toURL();
|
||||
InputStream inputStream = null;
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
|
||||
|
||||
@ -121,8 +121,8 @@ public class QueryService {
|
||||
public String requests(String url, boolean isDirect, HttpServletResponse response, OutputStream local) throws IOException {
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||
CloseableHttpResponse httpResponse;
|
||||
HashMap<String, String> headers = new HashMap<>();
|
||||
|
||||
HashMap<String, String> headers = new HashMap<>();
|
||||
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36");
|
||||
headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
|
||||
headers.put("Upgrade-Insecure-Requests", "1");
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.lion.lionwebsite.Service;
|
||||
|
||||
import com.lion.lionwebsite.Dao.GalleryMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.GalleryMapper;
|
||||
import com.lion.lionwebsite.Domain.Gallery;
|
||||
import com.lion.lionwebsite.Domain.GalleryTask;
|
||||
import com.lion.lionwebsite.Message.*;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.lion.lionwebsite.Service;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.lion.lionwebsite.Dao.SubMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.SubMapper;
|
||||
import com.lion.lionwebsite.Domain.SubBind;
|
||||
import com.lion.lionwebsite.Domain.SubUpdateRecord;
|
||||
import com.lion.lionwebsite.Util.CustomUtil;
|
||||
|
||||
@ -1,12 +1,11 @@
|
||||
package com.lion.lionwebsite.Service;
|
||||
|
||||
import com.lion.lionwebsite.Dao.GalleryMapper;
|
||||
import com.lion.lionwebsite.Dao.TagMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.GalleryMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.TagMapper;
|
||||
import com.lion.lionwebsite.Domain.Gallery;
|
||||
import com.lion.lionwebsite.Domain.Tag;
|
||||
import com.lion.lionwebsite.Util.Response;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package com.lion.lionwebsite.Service;
|
||||
|
||||
import com.lion.lionwebsite.Dao.CollectMapper;
|
||||
import com.lion.lionwebsite.Dao.GalleryMapper;
|
||||
import com.lion.lionwebsite.Dao.UserMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.CollectMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.GalleryMapper;
|
||||
import com.lion.lionwebsite.Dao.normal.UserMapper;
|
||||
import com.lion.lionwebsite.Domain.User;
|
||||
import com.lion.lionwebsite.Interceptor.TaskHandlerInterceptor;
|
||||
import com.lion.lionwebsite.Util.CustomUtil;
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
package com.lion.lionwebsite.Util;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.lion.lionwebsite.Domain.MaskDomain;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.URL;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.regex.Matcher;
|
||||
@ -28,8 +25,6 @@ public class CustomUtil {
|
||||
|
||||
public static ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
private MaskDomain[] maskDomains;
|
||||
|
||||
public static String fileSizeToString(long fileSize){
|
||||
if (fileSize < ONE_KB) {
|
||||
return fileSize + "B";
|
||||
|
||||
@ -2,12 +2,12 @@ package com.lion.lionwebsite.Util;
|
||||
|
||||
import com.lion.lionwebsite.Domain.Gallery;
|
||||
import com.lion.lionwebsite.Exception.ResolutionNotMatchException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.entity.EntityBuilder;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.jsoup.Jsoup;
|
||||
@ -19,11 +19,8 @@ import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.*;
|
||||
@Slf4j
|
||||
public class GalleryUtil {
|
||||
|
||||
static String EX_HENTAI = "https://exhentai.org";
|
||||
static String E_HENTAI = "https://e-hentai.org";
|
||||
public class GalleryUtil {
|
||||
|
||||
static String POST = "post";
|
||||
static String GET = "get";
|
||||
@ -59,7 +56,7 @@ public class GalleryUtil {
|
||||
gallery.setProceeding(0);
|
||||
|
||||
//访问本子页面
|
||||
String galleryPage = requests(url, null, GET, null);
|
||||
String galleryPage = requests(url, GET, null, null);
|
||||
Document galleryDoc = Jsoup.parse(galleryPage);
|
||||
|
||||
//收集本子基本信息
|
||||
@ -69,10 +66,6 @@ public class GalleryUtil {
|
||||
gallery.setFileSize(CustomUtil.stringToFileSize(galleryDoc.select("#gdd > table > tbody > tr:nth-child(5) > td.gdt2").text().replace(" ", "")));
|
||||
gallery.setDisplayFileSize(CustomUtil.fileSizeToString(gallery.getFileSize()));
|
||||
|
||||
String thumb_link = galleryDoc.select("#gd1 > div").get(0).attr("style");
|
||||
thumb_link = thumb_link.substring(thumb_link.indexOf("url(") + 4, thumb_link.lastIndexOf(")")).replace("https://s.exhentai.org/t", "");
|
||||
gallery.setThumb_link(thumb_link);
|
||||
|
||||
//查找下载页面链接并初始化参数
|
||||
String download_link = galleryDoc.select("#gd5 > p:nth-child(2) > a").attr("onclick").split("'")[1];
|
||||
HashMap<String, String> extraProperties = new HashMap<>();
|
||||
@ -81,7 +74,7 @@ public class GalleryUtil {
|
||||
|
||||
|
||||
//访问下载页面,获取分辨率
|
||||
String downloadPage = requests(download_link, extraProperties, GET, null);
|
||||
String downloadPage = requests(download_link, GET, extraProperties, null);
|
||||
Document downloadDoc = Jsoup.parse(downloadPage);
|
||||
Elements resolutions = downloadDoc.select("#db > div > table > tbody > tr > td");
|
||||
download_link = downloadDoc.select("#hathdl_form").attr("action");
|
||||
@ -126,9 +119,11 @@ public class GalleryUtil {
|
||||
gallery.setResolution(targetResolution);
|
||||
gallery.setFileSize(CustomUtil.stringToFileSize(availableResolution.get(targetResolution).replace(" ", "")));
|
||||
gallery.setDisplayFileSize(CustomUtil.fileSizeToString(gallery.getFileSize()));
|
||||
|
||||
|
||||
//提交下载请求
|
||||
downloadPage = requests(download_link, extraProperties, POST, targetResolution);
|
||||
HashMap<String, String> body = new HashMap<>();
|
||||
body.put("hathdl_xres", targetResolution.replace("x", "").replace("Original", "org"));
|
||||
downloadPage = requests(download_link, POST, extraProperties, body);
|
||||
downloadDoc = Jsoup.parse(downloadPage);
|
||||
|
||||
//判断下载请求是否提交成功
|
||||
@ -144,7 +139,7 @@ public class GalleryUtil {
|
||||
|
||||
|
||||
public static String queryUpdateLink(String link) throws IOException{
|
||||
String page = requests(link, null, GET, null);
|
||||
String page = requests(link, GET, null, null);
|
||||
Document document = Jsoup.parse(page);
|
||||
|
||||
Elements select = document.select("#gnd");
|
||||
@ -166,40 +161,29 @@ public class GalleryUtil {
|
||||
if(url.length() < 40)
|
||||
return null;
|
||||
|
||||
if(!url.contains("/g/") || !url.contains("hentai"))
|
||||
if(!url.contains("/g/") || !url.contains("exhentai"))
|
||||
return null;
|
||||
else if (url.contains(EX_HENTAI))
|
||||
return EX_HENTAI;
|
||||
else if (url.contains(E_HENTAI))
|
||||
return E_HENTAI;
|
||||
else{
|
||||
System.out.println(url);
|
||||
return null;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 自用request
|
||||
* @param url 链接
|
||||
* @param extraProperties 额外参数
|
||||
* @param headers 额外参数
|
||||
* @param method 请求方法
|
||||
* @param targetResolution 目标分辨率
|
||||
* @return 请求页面
|
||||
* @throws IOException 可能会抛出IO错误
|
||||
*/
|
||||
public static String requests(String url, HashMap<String, String> extraProperties, String method, String targetResolution) throws IOException {
|
||||
public static String requests(String url, String method, HashMap<String, String> headers, HashMap<String, String> body) throws IOException {
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||
CloseableHttpResponse httpResponse;
|
||||
HashMap<String, String> headers = new HashMap<>();
|
||||
if(headers == null)
|
||||
headers = new HashMap<>();
|
||||
|
||||
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36");
|
||||
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0");
|
||||
headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
|
||||
headers.put("Upgrade-Insecure-Requests", "1");
|
||||
if(url.contains("exhentai"))
|
||||
headers.put("Cookie", "ipb_member_id=5774855; ipb_pass_hash=4b061c3abe25289568b5a8e0123fb3b9; igneous=cea2e08fb; sk=oye107wk02gtomb56x65dmv4qzbn; nw=1");
|
||||
|
||||
if(extraProperties != null)
|
||||
headers.putAll(extraProperties);
|
||||
headers.put("Cookie", "ipb_member_id=5774855; ipb_pass_hash=4b061c3abe25289568b5a8e0123fb3b9; igneous=cea2e08fb; sk=oye107wk02gtomb56x65dmv4qzbn; nw=1");
|
||||
|
||||
if(method.equals(GET)){
|
||||
HttpGet httpGet = new HttpGet(url);
|
||||
@ -214,11 +198,12 @@ public class GalleryUtil {
|
||||
httpPost.addHeader(header.getKey(), header.getValue());
|
||||
}
|
||||
|
||||
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
|
||||
multipartEntityBuilder.addTextBody("hathdl_xres",
|
||||
targetResolution.replace("x", "").replace("Original", "org"));
|
||||
|
||||
httpPost.setEntity(multipartEntityBuilder.build());
|
||||
if(body != null) {
|
||||
EntityBuilder entityBuilder = EntityBuilder.create();
|
||||
entityBuilder.setContentType(ContentType.APPLICATION_JSON);
|
||||
entityBuilder.setText(CustomUtil.objectMapper.writeValueAsString(body));
|
||||
httpPost.setEntity(entityBuilder.build());
|
||||
}
|
||||
httpResponse = httpClient.execute(httpPost);
|
||||
}
|
||||
HttpEntity responseEntity = httpResponse.getEntity();
|
||||
|
||||
@ -50,9 +50,10 @@ public class Response {
|
||||
setResult("failure");
|
||||
}
|
||||
|
||||
public void failure(String result){
|
||||
public Response failure(String result){
|
||||
failure();
|
||||
setData(result);
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getResult(){
|
||||
@ -82,13 +83,6 @@ public class Response {
|
||||
return response.toJSONString();
|
||||
}
|
||||
|
||||
public static String _default(){
|
||||
Response response = Response.generateResponse();
|
||||
response.failure("参数错误");
|
||||
|
||||
return response.toJSONString();
|
||||
}
|
||||
|
||||
public String toJSONString(){
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
Binary file not shown.
@ -6,9 +6,12 @@ server:
|
||||
enabled: true
|
||||
|
||||
spring:
|
||||
datasource:
|
||||
datasource-main:
|
||||
driver-class-name: org.sqlite.JDBC
|
||||
url: jdbc:sqlite:/root/LionWebsite/LionWebsite.db
|
||||
jdbc-url: jdbc:sqlite:/root/LionWebsite/LionWebsite.db
|
||||
datasource-cache:
|
||||
driver-class-name: org.sqlite.JDBC
|
||||
jdbc-url: jdbc:sqlite:/root/LionWebsite/cache.db
|
||||
mvc:
|
||||
view:
|
||||
prefix: /resources/templates/
|
||||
@ -21,8 +24,6 @@ spring:
|
||||
max-request-size: 10000MB
|
||||
enabled: true
|
||||
|
||||
mybatis:
|
||||
type-aliases-package: com.lion.lionwebsite.Dao
|
||||
|
||||
personal-service:
|
||||
StoragePath: /storage/
|
||||
@ -35,7 +36,6 @@ remote-service:
|
||||
ip: 5.255.110.45
|
||||
|
||||
local-service:
|
||||
fires: https://api.dler.io/sub?target=clash&new_name=true&url=https%3A%2F%2Ffast.losadhwselfff2332dasd.xyz%2Flink%2Fz0pfwyTvC5naXkbb%3Fclash%3D1&insert=false&config=https%3A%2F%2Fraw.githubusercontent.com%2FACL4SSR%2FACL4SSR%2Fmaster%2FClash%2Fconfig%2FACL4SSR_Online.ini
|
||||
DouNaiClash: https://aaaa.gay/link/X7zEqkIx5gtIGugO?client=clashmeta
|
||||
DouNaiV2ray: https://aaaa.gay/link/X7zEqkIx5gtIGugO?client=v2
|
||||
|
||||
|
||||
BIN
src/main/resources/cache.db
Normal file
BIN
src/main/resources/cache.db
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user