docker run -d --name torrssen2 -p 8080:8080 -v {data path}:/root/data tarpha/torrssen2
22 |
23 | ## 수정이력
24 |
25 | - 0.9.54: minor update
26 | - 0.9.53: minor update
27 | - 0.9.52: minor update
28 | - 0.9.51: 내장 RSS 한 곳 추가
29 | - 0.9.50: minor update
30 | - 0.9.49: 내장 RSS 한 곳 추가
31 | - 0.9.48: 포스터 정상 표시
32 | - 0.9.47: F1RST 릴 표시 추가
33 | - 0.9.46: 내장 RSS 정리
34 | - 0.9.45: 내장 RSS 한 곳 추가
35 | - 0.9.44: 자동 다운로드 추가 시 title에 빈 값이 들어가는 문제 수정
36 | - 0.9.43: 자동 다운로드 중복 오류 수정. 내장 RSS 사이트 변경
37 | - 0.9.42: tvSeries 여부에 따른 Feed Title rule 변경
38 | - 0.9.41: 내장 RSS 한 곳 제거
39 | - 0.9.40: Scheduler hang 현상 조치(시도)
40 | - 0.9.39: 내장 RSS SSL 오류 수정
41 | - 0.9.38: 복수 화질 자동 다운로드 기능 추가. 자동 다운로드 이력 정리 기능 추가
42 | - 0.9.37: 마이너 오류 수정. 테마 보정
43 | - 0.9.36: 시스템 다크모드 적용 옵션 추가
44 | - 0.9.35: Spring boot version up (2.2.2), 리스트 내 자동다운로드 상위화질 체크 버그 수정
45 | - 0.9.34: Proxy 서버 지원. 내장 RSS 모듈 추가.
46 | - 0.9.33: FileStation API 변경(?)에 따른 파일명 변경 로직 수정
47 | - 0.9.32: 자동 다운로드 시 RSS 사이트 선택 기능 추가 (선택 안할 시 전체 사이트)
48 | - 0.9.31: 자동 다운로드 관리 개별 건에 대한 사용자 실행 기능 추가
49 | - 0.9.30: RSS Feed desc 컬럼 길이 수정 (1024)
50 | - 0.9.29: RSS Site 관리에서 이름 수정 시 기존 Feed를 못불러 오는 오류 수정
51 | - 0.9.28: RSS Load 오류 수정
52 | - 0.9.27: RSS Feed description에 http link가 있을 경우 표시
53 | - 0.9.26: RSS List 저장 오류 수정
54 | - 0.9.25: 다운로드 스테이션 외부 요청 건 필터링 로직 보안
55 | - 0.9.24: 자동 다운로드 매칭 시 단건 조건 추가
56 | - 0.9.23: DOWNLOAD_LIST URI Column 길이 2048로 변경
57 | - 0.9.22: 자동다운로드 시 자막 다운로드 오류 수정
58 | - 0.9.21: 자동다운로드 이력 파일명 변경 상태 추가
59 | - 0.9.20: 트랜스미션 다운로드 시 .torrent 파일 로직 수정
60 | - 0.9.19: 자동다운로드관리 일괄 수정 항목별로 가능하게 변경
61 | - 0.9.18: 자동다운로드관리 일괄 수정 변경. RSS 일괄 다운로드 추가
62 | - 0.9.17: 자동다운로드관리 검색/일괄 수정 추가
63 | - 0.9.16: 자동다운로드 시 Quality Number Casting 오류 수정
64 | - 0.9.15: 자동다운로드 시 시리즈 여부 추가. 각 리스트 동작 아이콘 위치 변경
65 | - 0.9.14: 다운로드 완료 시 즉시 완료(v) 표시
66 | - 0.9.13: 다운로드 스테이션 텔레그램 발송 오류 수정
67 | - 0.9.11: 자동 다운로드 시 자막 다운로드 기능 추가
68 | - 0.9.10: 트랜스미션/다운로드 스테이션 접속 테스트 후 다운로드 실패 오류 수정
69 | - 0.9.9 : 접속 테스트 추가 (텔레그램/트랜스미션/다운로드 스테이션)
70 | - 0.9.8 : infinite scroll, 사용자 아이디 변경 가능
71 | - 0.9.7 : 다운로드 스테이션 폴더 내 복수 파일 이동 시 삭제 오류 수정
72 | - 0.9.6 : 다운로드 스테이션 폴더 삭제 오류 수정 (이동 시 taskid를 발급하는데 이를 확인해서 완료를 체크하고...)
73 | - 0.9.5 : 화면 수정 (더보기 버튼 크기, 자동다운로드/다운로드완료 여부, RSS 메뉴 스크롤 등), 마이너 버그 수정
74 | - 0.9.4 : 트랜스 미션 사용 시 일반 파일(토렌트가 아닌) 다운로드 로직 추가. 포스터 오류 수정
75 | - 0.9.3 : 다운로드 스테이션 파일명 변경 로직 추가
76 | - 0.9.2 : 다운로드 스테이션 폴더 제거 로직 추가
77 | - 0.9.1 : 내장 다운로드 모듈 비활성화(안정성 하락), 폴더 제거 로직 트랜스미션에서 가능하도록 수정
78 | - 0.9.0 : 마이너 버그 수정. 메모리 관리 향상(openj9)
79 | - 0.8.8 : 자막 다운로드 오류 수정
80 | - 0.8.7 : 폴더 삭제 로직 향상
81 | - 0.8.6 : 마이너 버그 수정. 피드에 자막 정보 추가
82 | - 0.8.5 : 스케줄링 자동 업데이트
83 | - 0.8.2 : 자동다운로드 경로 저장 시 한글 문제 해결. 자동다운로드 체크 시 제목 수정 가능. 합본 제목 정제 수정.
84 | - 0.8.0 : 동시 다운로드 수 설정 (EMBEDDED만)
85 | - 0.7.8 : 마이너 버그 수정
86 | - 0.7.7 : 컨테이너 재시작 시 자동 업데이트
87 | - 0.7.6 : 메뉴에 버전 정보 표시, 내장 다운로더 추가(embedded), 파일명 변경 패턴에 일자 추가.
88 | - 0.6.9 : 트랜스미션 콜백 옵션 추가, FEED link 컬럼 길이 변경(2048), RSS 리스트 제목 파싱 옵션 추가
89 | - 0.6.7 : 로그인 오류 수정, recovery 암호 파일 자동 생성 (/root/data/symmetricKey)
90 | - 0.6.5 : 로그인 기능 추가
91 | - 0.6.2 : 목록 내 경과시간 버그 수정, 트랜스미션 사용 시 별도 콜백 없이도 텔레그램 발송 기능 추가
92 | - 0.6.0 : 마이너 버그 수정
93 | - 0.5.9 : 포스터 매칭 타이틀 로직 수정
94 | - 0.5.8 : 화면에서 리스트 삭제 시 목록 바로 반영. RSS 갱신 버튼 RSS 아이콘에 추가. RSS 갱신 시 리스트에 바로 반영
95 | - 0.5.7 : 다운로드 스테이션 대상 폴더가 없을 시 생성 로직 추가. 리스트 타이틀 정제 로직 변경.
96 | - 0.5.5 : 다운로드 스테이션 오류 몇개 수정, 리스트에 날짜 추가, 리스트 삭제 기능 추가, 리스트 건 수 관리 기능 추가, tomcat -> undertow, 로그 레벨 변경(에러만), 리스트 로드 시 시간 역순으로 저장
97 | - 0.5.0 : Release
98 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | | Version | Supported |
6 | | ------- | ------------------ |
7 | | 0.9.x | :white_check_mark: |
8 | | < 0.5 | :x: |
9 |
10 | ## Reporting a Vulnerability
11 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'org.springframework.boot' version '2.3.3.RELEASE'
3 | id "io.freefair.lombok" version "5.1.1"
4 | id 'java'
5 | }
6 |
7 | apply plugin: 'io.spring.dependency-management'
8 |
9 | group = 'com.tarpha'
10 | version = '0.9.54'
11 | sourceCompatibility = '1.8'
12 |
13 | repositories {
14 | mavenCentral()
15 | jcenter()
16 | }
17 |
18 | ext {
19 | swaggerVersion = '2.9.2'
20 | romeVersion = '1.12.0'
21 | httpclientVersion = '4.5.8'
22 | commonsLangVersion = '3.9'
23 | commonsCollectionVersion = '4.3'
24 | commonsIoVersion = '2.6'
25 | commonsCodecVersion = '1.12'
26 | jsonVersion = '20180813'
27 | jsonSmartVersion = '2.3'
28 | asyncHttpClientVersion = '2.10.1'
29 | btVersion = '1.8'
30 | jsoupVersion = '1.13.1'
31 | // htmlunitVersion = '2.55.0'
32 | }
33 |
34 | configurations {
35 | developmentOnly
36 | runtimeClasspath {
37 | extendsFrom developmentOnly
38 | }
39 | implementation {
40 | exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
41 | }
42 | }
43 |
44 | springBoot {
45 | buildInfo ()
46 | }
47 |
48 | dependencies {
49 | implementation 'org.springframework.boot:spring-boot-starter-actuator'
50 | implementation 'org.springframework.boot:spring-boot-starter-cache'
51 | implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
52 | implementation 'org.springframework.boot:spring-boot-starter-security'
53 | implementation 'org.springframework.boot:spring-boot-starter-undertow'
54 | implementation 'org.springframework.boot:spring-boot-starter-web'
55 | implementation 'org.springframework.boot:spring-boot-starter-websocket'
56 |
57 | implementation "io.springfox:springfox-swagger2:${swaggerVersion}"
58 | implementation "io.springfox:springfox-swagger-ui:${swaggerVersion}"
59 |
60 | implementation "com.rometools:rome:${romeVersion}"
61 |
62 | implementation "org.apache.httpcomponents:httpclient:${httpclientVersion}"
63 |
64 | implementation "org.apache.commons:commons-lang3:${commonsLangVersion}"
65 | implementation "org.apache.commons:commons-collections4:${commonsCollectionVersion}"
66 |
67 | implementation "org.json:json:${jsonVersion}"
68 |
69 | implementation "commons-io:commons-io:${commonsIoVersion}"
70 | implementation "commons-codec:commons-codec:${commonsCodecVersion}"
71 |
72 | implementation "net.minidev:json-smart:${jsonSmartVersion}"
73 |
74 | implementation "org.asynchttpclient:async-http-client:${asyncHttpClientVersion}"
75 |
76 | // implementation "com.github.atomashpolskiy:bt-core:${btVersion}"
77 | // implementation "com.github.atomashpolskiy:bt-http-tracker-client:${btVersion}"
78 | // implementation "com.github.atomashpolskiy:bt-dht:${btVersion}"
79 |
80 | implementation "org.jsoup:jsoup:${jsoupVersion}"
81 |
82 | // implementation "net.sourceforge.htmlunit:htmlunit:${htmlunitVersion}"
83 |
84 | developmentOnly("org.springframework.boot:spring-boot-devtools")
85 |
86 | runtimeOnly 'com.h2database:h2'
87 |
88 | testImplementation 'org.springframework.boot:spring-boot-starter-test'
89 | testImplementation 'org.springframework.security:spring-security-test'
90 | }
91 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.3"
2 | services:
3 | torrssen2:
4 | image: tarpha/torrssen2:latest
5 | restart: unless-stopped
6 | ports:
7 | - "8080:8080"
8 | volumes:
9 | - /docker/torrssen:/root/data
10 | links:
11 | - php
12 | - tunnel
13 | php:
14 | image: php:7.2-apache
15 | restart: unless-stopped
16 | volumes:
17 | - /docker/php:/var/www/html
18 | tunnel:
19 | image: sadeghhayeri/green-tunnel:latest
20 | restart: unless-stopped
--------------------------------------------------------------------------------
/docker/Dockerfile:
--------------------------------------------------------------------------------
1 | #FROM openjdk:8-alpine
2 | FROM adoptopenjdk/openjdk8-openj9:alpine-slim
3 | #COPY torrssen2-0.8.3.jar torrssen2.jar
4 | COPY run.sh /run.sh
5 | COPY kill.sh /kill.sh
6 | RUN apk --no-cache add git
7 | RUN git clone https://github.com/tarpha/torrssen2.git
8 | VOLUME [ "/root/data" ]
9 | EXPOSE 8080
10 | #ENV BASE_URL http://localhost:8080
11 | #CMD [ "java", "-jar", "torrssen2.jar"]
12 | ENTRYPOINT ["/run.sh"]
--------------------------------------------------------------------------------
/docker/Dockerfile.dev:
--------------------------------------------------------------------------------
1 | #FROM openjdk:8-alpine
2 | FROM adoptopenjdk/openjdk8-openj9:alpine-slim
3 | COPY torrssen2-*.jar torrssen2.jar
4 | #COPY run.sh /run.sh
5 | #COPY kill.sh /kill.sh
6 | #RUN apk --no-cache add git
7 | #RUN git clone https://github.com/tarpha/torrssen2.git
8 | VOLUME [ "/root/data" ]
9 | EXPOSE 8080
10 | #ENV BASE_URL http://localhost:8080
11 | CMD [ "java", "-jar", "torrssen2.jar", "--spring.profiles.active=dev"]
12 | #ENTRYPOINT ["/run.sh"]
--------------------------------------------------------------------------------
/docker/Dockerfile.pi:
--------------------------------------------------------------------------------
1 | FROM tarpha/ubuntu:openjdk-8-pi
2 | ENV LC_ALL=C.UTF-8
3 | COPY run_pi.sh /run.sh
4 | COPY kill.sh /kill.sh
5 | RUN apt-get install -y git
6 | RUN git clone https://github.com/tarpha/torrssen2.git
7 | VOLUME [ "/root/data" ]
8 | EXPOSE 8080
9 | ENTRYPOINT ["/run.sh"]
--------------------------------------------------------------------------------
/docker/kill.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | ps - ef | grep torrssen2.jar | awk '{print $1}' | xargs kill
4 |
--------------------------------------------------------------------------------
/docker/run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | while true
4 | do
5 | cd /torrssen2 && git pull && cd /
6 |
7 | cp /torrssen2/docker/torrssen2-*.jar torrssen2.jar
8 |
9 | #java -jar torrssen2.jar
10 | java $JAVA_OPTS -Xshareclasses -Xquickstart -jar torrssen2.jar
11 | done
12 |
--------------------------------------------------------------------------------
/docker/run_pi.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | while true
4 | do
5 | cd /torrssen2 && git pull && cd /
6 |
7 | cp /torrssen2/docker/torrssen2-*.jar torrssen2.jar
8 |
9 | java -jar torrssen2.jar
10 | #java $JAVA_OPTS -Xshareclasses -Xquickstart -jar torrssen2.jar
11 | done
12 |
--------------------------------------------------------------------------------
/docker/torrssen2-0.9.49.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tarpha/torrssen2/131ca5b55e986f2fba3ad43b23d1cf8747e4cfdf/docker/torrssen2-0.9.49.jar
--------------------------------------------------------------------------------
/docker/transmission/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine
2 |
3 | ARG DOCKER_UID
4 |
5 | # Create a user to run the application
6 | RUN adduser -D -u ${DOCKER_UID} transmission
7 | COPY ./settings.json /home/transmission/.config/settings.json
8 | RUN chown -R transmission:transmission /home/transmission
9 | WORKDIR /home/transmission
10 |
11 | # Data and config volumes
12 | VOLUME /home/transmission/.config
13 | VOLUME /home/transmission/Downloads
14 | VOLUME /home/transmission/incomplete
15 | VOLUME /home/transmission/watch
16 |
17 | # Install Transmission
18 | RUN apk update && apk add --no-cache transmission-daemon
19 |
20 | EXPOSE 9091
21 |
22 | USER transmission
23 | ENTRYPOINT ["transmission-daemon", "--foreground", "--log-info"]
--------------------------------------------------------------------------------
/docker/transmission/done.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | FILE_NAME=${TR_TORRENT_NAME}
3 |
4 | # DELETE DIRECTORY FILE TO ONLY FILE
5 | # if [ -d "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}" ]
6 | # then
7 | # if [ -f "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"/*.mp4 ]
8 | # then
9 | # FILE_NAME=$(ls "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"/*.mp4 | awk '{print $1}' | head -1 | xargs -n 1 basename)
10 | # mv "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"/*.mp4 "${TR_TORRENT_DIR}"
11 | # rm -rf "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"
12 | # elif [ -f "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"/*.mkv ]
13 | # then
14 | # FILE_NAME=$(ls "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"/*.mp4 | awk '{print $1}' | head -1 | xargs -n 1 basename)
15 | # mv "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"/*.mkv "${TR_TORRENT_DIR}"
16 | # rm -rf "${TR_TORRENT_DIR}/${TR_TORRENT_NAME}"
17 | # fi
18 | # fi
19 |
20 | #CALL SERVICE
21 | generate_post_data()
22 | {
23 | cat <