Giter VIP home page Giter VIP logo

joal's People

Contributors

anthonyraymond avatar journeyover avatar laur89 avatar mylloon avatar nykoo avatar victorbnl avatar vrischmann avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

joal's Issues

output logs

Hi thanks for this project..

i am building a package for Qnap NAS with JOAL

any chance to have a flags with output debug logs ?

i am tweaking with : $JAVA -jar jack-of-all-trades.jar $MY_CONFIG_FOLDER_PATH > JOAL.log

but not really reliable... if have any idea

Questions (Possibly suggestions?).

So I am wanting to know, how often does this thing announce to the trackers? Currently while running tests to make sure my .client file I made is working correctly I only ever see it announce when it does a stop announcement due to the "seed for" timer hitting its mark, but so far I haven't seen any other announcements being made at all.

Is there a way to set up an "always announce to trackers" or setting a time to announce to trackers (other than the stop timer) or anything of the sort?

one more thing, "If the torrent currently seeding reach 0 peers, the file will be moved to <MY_CONFIG_FOLDER_PATH>/torrents/archived folder." is there a way to set up how many of a min you want to go on leechers before the .torrent is sent to the archive folder?

Torrent tracker has changed !

Have you seen that the torrent tracker adress from t411 has changed ? JOAL is not working anymore ! I tried to re-download some new torrent since the migration, but it doesn't change anything.

something wrong with "tomcat" when i run this program

[ERROR] 2017-12-05 15:56:43.723 o.s.b.c.e.t.TomcatStarter: Error starting Tomcat context. Exception: java.lang.IllegalArgumentException. Message: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"

version 2.0.7
device:RaspberryPI 3B
os: Raspbian GNU/Linux 8.0 (jessie)
java version "1.8.0_65"
config,json:
{ "minUploadRate": 0, "maxUploadRate": 0, "simultaneousSeed": 2225, "client": "qbittorrent-3.3.7.client", "keepTorrentWithZeroLeechers": true }

here is the output infomation
log.txt

i have never used java before and i can't understand this output.
please help me to find the solution of this problem. thank you!

[Question ?] This tool allow us to spoof over a PB ? like 20Exabytes ?

Yes i know, Exabytes is to much to able some one to download this size, but i would like to know if this tool return the same issue than Ratio Master have, the Ratio Master return a issue from the C# code where they have used some string like (Int64) and this limits the size to 64 bits, if i'm correct. This string is ''some limitations of '' Ratio Master Spoofer gives, I just would like to know if with you spoofer i can spoof over a Exabyte in 30 Minutes.

In one night with Ratio Master i have spoofed 5.36Eb(Exabyte) i would like to reach 500Eb,however i know this is may be unuseful but just to keep informed if your spoofer have that limitation ?

Rgds,
Cyber P.

Last announce time needs to be Timezone aware

When the joal instance is running on a different computer (which has a different timezone) compared to the one who shows the WebUI; The announce progress bars is always full or always empty because of the timezone shift.

webui: path prefix error?

Hi,

Thank you for Joal, it's a neat little software.

I launch joal like this
java -jar ./jack-of-all-trades-2.1.11.jar --joal-conf=/home/moi/joal/ --spring.main.web-environment=true --server.port=10001 --joal.ui.path.prefix=SECRET_OBFUSCATION_PATH --joal.ui.secret-token=SECRET

both path and secret are alphanumerical. I've tried with and without quotes around the secrets

Seeding work but webui won't connect. It says:
Request was sent to URI '/' and does not match the path prefix, therefore the request Thread has been shut down

I connect to http://localhost:10001/SECRET_OBFUSCATION_PATH/ui/ but connection fails

I have made this work before, but now that I've reinstalled it I can't figure out what I'm doing wrong.

merci!

Systemd init script ?

Hello,

I just found out this awesome tool, everything works great, good job !
I was wondering if there is a way to run the jar file as service at boot with a systemd script ?

[Unit]
Description=Joal

[Service]
ExecStart=/usr/bin/java -jar /opt/joal/jack-of-all-trades-2.1.7.jar --joal-conf="/opt/joal/"

[Install]
WantedBy=multi-user.target

some things like that would work?

Thank you :)

Can't make it work

Hi.
I've tried joal with the transmission client, but it does not seem to work.
I get the following log:

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
[INFO ] 2019-01-19 10:29:06.709 [           main] o.a.j.JackOfAllTradesApplication: Starting JackOfAllTradesApplication v2.1.11 on laptop with PID 6899 (/tmp/joal/jack-of-all-trades-2.1.11.jar started by user in /tmp/joal)
[INFO ] 2019-01-19 10:29:06.717 [           main] o.a.j.JackOfAllTradesApplication: No active profile set, falling back to default profiles: default
[INFO ] 2019-01-19 10:29:08.494 [           main] o.s.b.w.e.t.TomcatWebServer: Tomcat initialized with port(s): 41669 (http)
[INFO ] 2019-01-19 10:29:08.537 [           main] o.a.c.h.Http11NioProtocol: Initializing ProtocolHandler ["http-nio-41669"]
[INFO ] 2019-01-19 10:29:08.552 [           main] o.a.c.c.StandardService: Starting service [Tomcat]
[INFO ] 2019-01-19 10:29:08.554 [           main] o.a.c.c.StandardEngine: Starting Servlet Engine: Apache Tomcat/9.0.12
[INFO ] 2019-01-19 10:29:08.574 [           main] o.a.c.c.AprLifecycleListener: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
[INFO ] 2019-01-19 10:29:08.699 [           main] o.a.c.c.C.[.[.[/]: Initializing Spring embedded WebApplicationContext
[INFO ] 2019-01-19 10:29:08.700 [           main] o.s.w.c.ContextLoader: Root WebApplicationContext: initialization completed in 1907 ms
[INFO ] 2019-01-19 10:29:08.799 [           main] o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'characterEncodingFilter' to: [/*]
[INFO ] 2019-01-19 10:29:08.799 [           main] o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
[INFO ] 2019-01-19 10:29:08.799 [           main] o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'formContentFilter' to: [/*]
[INFO ] 2019-01-19 10:29:08.799 [           main] o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'requestContextFilter' to: [/*]
[INFO ] 2019-01-19 10:29:08.800 [           main] o.s.b.w.s.DelegatingFilterProxyRegistrationBean: Mapping filter: 'springSecurityFilterChain' to: [/*]
[INFO ] 2019-01-19 10:29:08.987 [           main] o.s.s.c.ThreadPoolTaskExecutor: Initializing ExecutorService 'taskExecutor'
[INFO ] 2019-01-19 10:29:09.342 [           main] o.s.b.a.w.s.WelcomePageHandlerMapping: Adding welcome page: class path resource [public/index.html]
[INFO ] 2019-01-19 10:29:09.569 [           main] o.s.b.a.s.s.UserDetailsServiceAutoConfiguration: 

Using generated security password: <HIDDEN>

[INFO ] 2019-01-19 10:29:09.759 [           main] o.s.s.w.DefaultSecurityFilterChain: Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@1a1ed4e5, org.springframework.security.web.context.SecurityContextPersistenceFilter@4dd94a58, org.springframework.security.web.header.HeaderWriterFilter@30b9eadd, org.springframework.security.web.csrf.CsrfFilter@4ee33af7, org.springframework.security.web.authentication.logout.LogoutFilter@39aa45a1, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@54534abf, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@2c42b421, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@667e34b1, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@45673f68, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@a8a8b75, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@2e647e59, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@1c6e0a08, org.springframework.security.web.session.SessionManagementFilter@412c995d, org.springframework.security.web.access.ExceptionTranslationFilter@6b9c69a9, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@4564e94b]
[INFO ] 2019-01-19 10:29:09.839 [           main] o.a.c.h.Http11NioProtocol: Starting ProtocolHandler ["http-nio-41669"]
[INFO ] 2019-01-19 10:29:09.849 [           main] o.a.t.u.n.NioSelectorPool: Using a shared selector for servlet write/read
[INFO ] 2019-01-19 10:29:09.880 [           main] o.s.b.w.e.t.TomcatWebServer: Tomcat started on port(s): 41669 (http) with context path ''
[INFO ] 2019-01-19 10:29:09.885 [           main] o.a.j.JackOfAllTradesApplication: Started JackOfAllTradesApplication in 3.809 seconds (JVM running for 5.031)
[INFO ] 2019-01-19 10:29:09.889 [           main] o.a.j.c.t.c.ConnectionHandler: Listening for incoming peer connections on port 49152.
[INFO ] 2019-01-19 10:29:09.894 [           main] o.a.j.c.t.c.ConnectionHandler: Fetching ip from: http://icanhazip.com/
[INFO ] 2019-01-19 10:29:10.004 [           main] o.a.j.c.t.c.ConnectionHandler: Successfully fetch public IP address: 173.179.179.8
[INFO ] 2019-01-19 10:29:10.004 [           main] o.a.j.c.t.c.ConnectionHandler: Ip reported to tracker will be: 173.179.179.8
[INFO ] 2019-01-19 10:29:10.133 [           main] o.a.j.c.c.JoalConfigProvider: App configuration has been successfully loaded.
[INFO ] 2019-01-19 10:29:30.022 [torrent-file-watcher-0] o.a.j.c.t.w.TorrentFileProvider: Torrent file addition detected, hot creating file: ~/.config/joal/torrents/linux.torrent
[INFO ] 2019-01-19 10:29:30.048 [torrent-file-watcher-0] c.t.t.c.Torrent: Multi-file torrent information:
[INFO ] 2019-01-19 10:29:30.049 [torrent-file-watcher-0] c.t.t.c.Torrent:   Torrent name: Linux
[INFO ] 2019-01-19 10:29:30.049 [torrent-file-watcher-0] c.t.t.c.Torrent:   Announced at:
[INFO ] 2019-01-19 10:29:30.049 [torrent-file-watcher-0] c.t.t.c.Torrent:      1. https://www.tracker.com/announce?passkey=<HIDDEN>
[INFO ] 2019-01-19 10:29:30.050 [torrent-file-watcher-0] c.t.t.c.Torrent:   Created on..: 2019-01-01T01:51:22.000-0500
[INFO ] 2019-01-19 10:29:30.051 [torrent-file-watcher-0] c.t.t.c.Torrent:   Created by..: ruTorrent (PHP Class - Adrien Gibrat)
[INFO ] 2019-01-19 10:29:30.051 [torrent-file-watcher-0] c.t.t.c.Torrent:   Found 2 file(s) in multi-file torrent structure.
[INFO ] 2019-01-19 10:29:30.051 [torrent-file-watcher-0] c.t.t.c.Torrent:   Pieces......: 137 piece(s) (8388608 byte(s)/piece)
[INFO ] 2019-01-19 10:29:30.052 [torrent-file-watcher-0] c.t.t.c.Torrent:   Total size..: 1 144 890 770 byte(s)
[INFO ] 2019-01-19 10:29:37.456 [   annnouncer-0] o.a.j.c.t.c.a.Announcer: ³¤ðáÐdIê|!CÀä{¶ has announced successfully. Response: 10 seeders, 0 leechers, 1800s interval
[WARN ] 2019-01-19 10:59:37.673 [   annnouncer-1] o.a.j.c.t.c.a.Announcer: ³¤ðáÐdIê|!CÀä{¶ has failed to announce
com.turn.ttorrent.client.announce.AnnounceException: Failed to announce: error or connection aborted.
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.announce(TrackerClient.java:57)
	at org.araymond.joal.core.ttorrent.client.announcer.Announcer.announce(Announcer.java:63)
	at org.araymond.joal.core.ttorrent.client.announcer.request.AnnouncerExecutor.lambda$execute$0(AnnouncerExecutor.java:40)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.turn.ttorrent.client.announce.AnnounceException: Failed to announce: error or connection aborted.
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.makeCallAndGetResponseAsByteBuffer(TrackerClient.java:93)
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.announce(TrackerClient.java:44)
	... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
	at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279)
	at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
	at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
	at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152)
	at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
	at org.apache.http.client.fluent.Request.internalExecute(Request.java:173)
	at org.apache.http.client.fluent.Request.execute(Request.java:177)
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.makeCallAndGetResponseAsByteBuffer(TrackerClient.java:89)
	... 7 more





[WARN ] 2019-01-19 11:29:37.869 [   annnouncer-2] o.a.j.c.t.c.a.Announcer: ³¤ðáÐdIê|!CÀä{¶ has failed to announce
com.turn.ttorrent.client.announce.AnnounceException: Failed to announce: error or connection aborted.
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.announce(TrackerClient.java:57)
	at org.araymond.joal.core.ttorrent.client.announcer.Announcer.announce(Announcer.java:63)
	at org.araymond.joal.core.ttorrent.client.announcer.request.AnnouncerExecutor.lambda$execute$0(AnnouncerExecutor.java:40)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.turn.ttorrent.client.announce.AnnounceException: Failed to announce: error or connection aborted.
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.makeCallAndGetResponseAsByteBuffer(TrackerClient.java:93)
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.announce(TrackerClient.java:44)
	... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
	at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279)
	at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
	at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
	at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152)
	at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
	at org.apache.http.client.fluent.Request.internalExecute(Request.java:173)
	at org.apache.http.client.fluent.Request.execute(Request.java:177)
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.makeCallAndGetResponseAsByteBuffer(TrackerClient.java:89)
	... 7 more
^C[INFO ] 2019-01-19 11:30:19.140 [       Thread-2] o.a.j.ApplicationClosingListener: Gracefully shutting down application.
[WARN ] 2019-01-19 11:30:19.200 [   annnouncer-0] o.a.j.c.t.c.a.Announcer: ³¤ðáÐdIê|!CÀä{¶ has failed to announce
com.turn.ttorrent.client.announce.AnnounceException: Failed to announce: error or connection aborted.
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.announce(TrackerClient.java:57)
	at org.araymond.joal.core.ttorrent.client.announcer.Announcer.announce(Announcer.java:63)
	at org.araymond.joal.core.ttorrent.client.announcer.request.AnnouncerExecutor.lambda$execute$0(AnnouncerExecutor.java:40)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.turn.ttorrent.client.announce.AnnounceException: Failed to announce: error or connection aborted.
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.makeCallAndGetResponseAsByteBuffer(TrackerClient.java:93)
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.announce(TrackerClient.java:44)
	... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
	at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279)
	at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
	at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
	at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152)
	at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
	at org.apache.http.client.fluent.Request.internalExecute(Request.java:173)
	at org.apache.http.client.fluent.Request.execute(Request.java:177)
	at org.araymond.joal.core.ttorrent.client.announcer.tracker.TrackerClient.makeCallAndGetResponseAsByteBuffer(TrackerClient.java:89)
	... 7 more
[INFO ] 2019-01-19 11:30:19.203 [       Thread-3] o.a.j.c.t.c.ConnectionHandler: Ip fetcher thread has been stopped.
[INFO ] 2019-01-19 11:30:19.215 [       Thread-2] o.a.j.ApplicationClosingListener: JOAL gracefully shut down.
[INFO ] 2019-01-19 11:30:19.221 [       Thread-2] o.s.s.c.ThreadPoolTaskExecutor: Shutting down ExecutorService 'taskExecutor'
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.catalina.loader.WebappClassLoaderBase (jar:file:/tmp/joal/jack-of-all-trades-2.1.11.jar!/BOOT-INF/lib/tomcat-embed-core-9.0.12.jar!/) to field java.io.ObjectStreamClass$Caches.localDescs
WARNING: Please consider reporting this to the maintainers of org.apache.catalina.loader.WebappClassLoaderBase
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Thanks for your help.

Openvpn

Dont know if it is because im running joal into a openvpn net container, but the UI cant connect to the backend.

FAILED TO CONNECT TO JOAL, RETRY IN 8 SECONDS.

I use the --net=container:openvpn argument when launching the docker container

Firefox support is broken

First of all : well done for this new version !!

Everything works fine, well seems to do, except of the web ui. When I launch Firefox, there is a gray page, the source code shows <noscript>You need to enable JavaScript to run this app.</noscript> and the console shows this one :

SecurityError: The operation is insecure.  main.b47f58e5.js:1
	client webstomp.js:871
	value JOALStompClient.js:51:23
	t.connectStomp index.js:25:2
	<anonyme> index.js:9
	t bootstrap c645ea51d4d0d6c06e97:19
	<anonyme> main.b47f58e5.js:11838:17
	t bootstrap c645ea51d4d0d6c06e97:19
	<anonyme> bootstrap c645ea51d4d0d6c06e97:62
	<anonyme> main.b47f58e5.js:1:9

What's wrong Doc ?

(yes, obviously javascript is enable ;) )

iFrame support?

Hello i'm using joal since yesterday and it's working perfectly, thank you i love this feature.

I would like to use Joal with Organizr to able able to centralise everything. However Joal refuse to load whithin the app in iFrame mode. When i set it to new tab it works but out of the Organizr interface.

I understand thats maybe due to the extra "/joal/ui/" in the adress after the port.

I have tried to reverse proxy whithout success.

Do you know if both iframe and reverse proxy are possible or not.

Thanks.

Start joal at boot

Hi!
I have a Raspberry Pi and i would like to start Joal at boot, without getting me to do it manually.
How is it possible? Thanks !

Work on HD torrent or ipt ?

Hello i have tested your app and looks like working on public torrent and on semi private but in private torrents like HDT or IPT the app doesn't work, the log says 0 leeacher when in reallity we have 10 or more leachers to seed.

Can you fix it ?

Issue with Joal v2.1.4 + openSUSE Leap + openjdk version "1.8.0_171"

Hi, i have this error with Joal v2.1.4 + openSUSE Leap 15.0 + openjdk version "1.8.0_171".

Thank you very much for your excellent work!

�[0m[INFO ] 2018-07-24 22:55:15.747 [ main] o.a.j.JackOfAllTradesApplication: Starting JackOfAllTradesApplication v2.1.4 on r2d2 with PID 18455 (/opt/joal-master/jack-of-all-trades-2.1.4.jar started by sysop in /opt/joal-master)
�[m�[0m[INFO ] 2018-07-24 22:55:15.754 [ main] o.a.j.JackOfAllTradesApplication: No active profile set, falling back to default profiles: default
�[m�[0m[INFO ] 2018-07-24 22:55:15.829 [ main] o.s.c.a.AnnotationConfigApplicationContext: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@59a6e353: startup date [Tue Jul 24 22:55:15 CEST 2018]; root of context hierarchy
�[m�[0m[INFO ] 2018-07-24 22:55:16.797 [ main] o.s.b.f.a.AutowiredAnnotationBeanPostProcessor: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
�[m�[0m[INFO ] 2018-07-24 22:55:17.111 [ main] o.s.s.c.ThreadPoolTaskExecutor: Initializing ExecutorService 'taskExecutor'
�[m�[0m[INFO ] 2018-07-24 22:55:17.422 [ main] o.a.j.JackOfAllTradesApplication: Started JackOfAllTradesApplication in 2.255 seconds (JVM running for 3.413)
�[m�[0;33m[WARN ] 2018-07-24 22:55:17.432 [ main] o.a.j.c.t.c.ConnectionHandler: Could not bind to r2d2/192.168.1.54:49152, trying next port...
�[m�[0;33m[WARN ] 2018-07-24 22:55:17.433 [ main] o.a.j.c.t.c.ConnectionHandler: Could not bind to r2d2/192.168.1.54:49153, trying next port...
�[m�[0;33m[WARN ] 2018-07-24 22:55:17.433 [ main] o.a.j.c.t.c.ConnectionHandler: Could not bind to r2d2/192.168.1.54:49154, trying next port...
�[m�[0;33m[WARN ] 2018-07-24 22:55:17.433 [ main] o.a.j.c.t.c.ConnectionHandler: Could not bind to r2d2/192.168.1.54:49155, trying next port...
�[m�[0;33m[WARN ] 2018-07-24 22:55:17.433 [ main] o.a.j.c.t.c.ConnectionHandler: Could not bind to r2d2/192.168.1.54:49156, trying next port...
�[m�[0;33m[WARN ] 2018-07-24 22:55:17.434 [ main] o.a.j.c.t.c.ConnectionHandler: Could not bind to r2d2/192.168.1.54:49157, trying next port...

....
�[m�[31m[ERROR] 2018-07-24 22:55:18.523 [ main] o.a.j.ApplicationReadyListener: Fatal error encountered
java.lang.IllegalStateException: Fatal error encountered
at org.araymond.joal.ApplicationReadyListener.onApplicationEvent(ApplicationReadyListener.java:37)
at org.araymond.joal.ApplicationReadyListener.onApplicationEvent(ApplicationReadyListener.java:17)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:400)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:354)
at org.springframework.boot.context.event.EventPublishingRunListener.running(EventPublishingRunListener.java:103)
at org.springframework.boot.SpringApplicationRunListeners.running(SpringApplicationRunListeners.java:78)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.io.IOException: No available port for the BitTorrent client!
at org.araymond.joal.core.ttorrent.client.ConnectionHandler.bindToPort(ConnectionHandler.java:148)
at org.araymond.joal.core.ttorrent.client.ConnectionHandler.start(ConnectionHandler.java:53)
at org.araymond.joal.core.SeedManager.init(SeedManager.java:60)
at org.araymond.joal.ApplicationReadyListener.onApplicationEvent(ApplicationReadyListener.java:34)
... 20 more
�[m�[0m[INFO ] 2018-07-24 22:55:18.525 [ main] o.s.c.a.AnnotationConfigApplicationContext: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@59a6e353: startup date [Tue Jul 24 22:55:15 CEST 2018]; root of context hierarchy
�[m�[0m[INFO ] 2018-07-24 22:55:18.526 [ main] o.a.j.ApplicationClosingListener: Gracefully shutting down application.
�[m�[0m[INFO ] 2018-07-24 22:55:18.526 [ main] o.a.j.ApplicationClosingListener: JOAL gracefully shut down.
�[m

Error docker creation

I got this error when i try to install it via docker :
docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused "exec: "--joal-conf=/data": stat --joal-conf=/data: no such file or directory".

ERROR 403 Webui

Hello,

When I try to access the web interface of joal with the appropriate command, I have an access error "HTTP ERROR 403".

Can you help me ?

Thank you in advance.

Command :
java -jar ./joal/jack-of-all-trades-2.1.7.jar --joal-conf="mypath" --spring.main.web-environment=true --server.port="myport"--joal.ui.path.prefix="mypath" --joal.ui.secret-token="mdp"

PS : Si tu es français on n'est pas obligé de le faire en anglais ;)

Can't run web-ui

Hi !

I am trying to use the latest version of joal (2.1.3) on my Raspberry Pi 3 (Raspbian Stretch) but I am getting some troubles.

I run this command (my ISP doesn't support IPv6) :
java -jar ./jack-of-all-trades-2.1.3.jar --joal-conf=/opt/joal --spring.main.web-environment=true --server.port=7073

But I have those logs in the terminal :

[INFO ] 2018-06-19 10:42:19.197 [           main] o.a.j.JackOfAllTradesApplication: Starting JackOfAllTradesApplication v2.1.3 on rpi with PID 8875 (/opt/joal/jack-of-all-trades-2.1.3.jar started by root in /opt/joal)
[INFO ] 2018-06-19 10:42:19.221 [           main] o.a.j.JackOfAllTradesApplication: No active profile set, falling back to default profiles: default
[INFO ] 2018-06-19 10:42:19.491 [           main] o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext: Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1690630: startup date [Tue Jun 19 10:42:19 CEST 2018]; root of context hierarchy
[INFO ] 2018-06-19 10:42:23.586 [           main] o.s.b.f.a.AutowiredAnnotationBeanPostProcessor: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[INFO ] 2018-06-19 10:42:25.320 [           main] o.xnio: XNIO version 3.3.8.Final
[INFO ] 2018-06-19 10:42:25.396 [           main] o.x.nio: XNIO NIO Implementation Version 3.3.8.Final
[WARN ] 2018-06-19 10:42:25.602 [           main] i.u.w.jsr: UT026009: XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used
[WARN ] 2018-06-19 10:42:25.603 [           main] i.u.w.jsr: UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
[INFO ] 2018-06-19 10:42:25.745 [           main] i.u.servlet: Initializing Spring embedded WebApplicationContext
[INFO ] 2018-06-19 10:42:25.745 [           main] o.s.w.c.ContextLoader: Root WebApplicationContext: initialization completed in 6265 ms
[WARN ] 2018-06-19 10:42:25.783 [           main] o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'endpointObfuscatorConfiguration' defined in URL [jar:file:/opt/joal/jack-of-all-trades-2.1.3.jar!/BOOT-INF/classes!/org/araymond/joal/web/config/EndpointObfuscatorConfiguration.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
[INFO ] 2018-06-19 10:42:25.820 [           main] o.s.b.a.l.ConditionEvaluationReportLoggingListener: 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[ERROR] 2018-06-19 10:42:25.828 [           main] o.s.b.SpringApplication: Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'endpointObfuscatorConfiguration' defined in URL [jar:file:/opt/joal/jack-of-all-trades-2.1.3.jar!/BOOT-INF/classes!/org/araymond/joal/web/config/EndpointObfuscatorConfiguration.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
	at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:12)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'endpointObfuscatorConfiguration' defined in URL [jar:file:/opt/joal/jack-of-all-trades-2.1.3.jar!/BOOT-INF/classes!/org/araymond/joal/web/config/EndpointObfuscatorConfiguration.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
	at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:241)
	at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.createDeploymentManager(UndertowServletWebServerFactory.java:280)
	at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.getWebServer(UndertowServletWebServerFactory.java:204)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152)
	... 16 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'endpointObfuscatorConfiguration' defined in URL [jar:file:/opt/joal/jack-of-all-trades-2.1.3.jar!/BOOT-INF/classes!/org/araymond/joal/web/config/EndpointObfuscatorConfiguration.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:368)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1250)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:541)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:225)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:213)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:90)
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:79)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:250)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:237)
	at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory$Initializer.onStartup(UndertowServletWebServerFactory.java:602)
	at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:192)
	at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:174)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:239)
	... 20 more
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172)
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)
	at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237)
	at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211)
	at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175)
	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:839)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:721)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1270)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:541)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
	... 45 more

If I run the following command :
java -jar ./jack-of-all-trades-2.1.3.jar --joal-conf=/opt/joal
Everything is ok.

Here is my java version :

root@rpi:/opt/joal # java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) Client VM (build 25.171-b11, mixed mode)
root@rpi:/opt/joal # javac -version
javac 1.8.0_171

Thanks for your help and for your great work !

Webserver

Hi,

is it possible to run it with JBoss/Tomcat .. ?

Access behind reverse proxy

Hi !

I open another issue because I try to access to the web UI behind a reverse proxy.
To run joal, the command is :
java -jar /opt/joal/jack-of-all-trades-2.1.3.jar --joal-conf=/opt/joal --spring.main.web-environment=true --server.port=7073 --joal.ui.path.prefix=joal --joal.ui.secret-token="test"

Now, if I visit http://x.x.x.x:7073/joal/ui/ though local network, it works with those parameters :

Now, if I set up a virtual host behind a reverse proxy :

<VirtualHost *:443>
	DocumentRoot "/var/www/html"
	ServerName joal.server.fr
	ServerAlias www.joal.server.fr

	LogLevel warn
	ErrorLog ${APACHE_LOG_DIR}/joal-error.log
	CustomLog ${APACHE_LOG_DIR}/joal-access.log combined

	RewriteEngine On
	RewriteCond %{HTTP_HOST} !^www\. [NC]
	RewriteRule ^(.*)$ http://www.%{HTTP_HOST}$1 [R=301,L]

	<Directory /var/www/joal/>
		Options +FollowSymLinks -Indexes -MultiViews
		AllowOverride all
		Order allow,deny
		allow from all
	</Directory>

	ProxyPass / http://127.0.0.1:7073/joal/ui/
	ProxyPassReverse / http://127.0.0.1:7073/joal/ui/
	ProxyRequests Off

        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/joal.server.fr/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/joal.server.fr/privkey.pem
</VirtualHost>
</IfModule>

The web UI works but I've got this message in the right top corner :

The parameters are :

I don't know if it's possible to use it behind a reverse proxy with SSL encryption like but.

Thanks for your help :)

Problem WS

Hi,

I have a problem, the program starts without any problems
but I would like to use the interface and this one must call a web service
but I have a 403 error on the ws

Can you prove you can help me?

https://image.ibb.co/gUaPDS/Sans_titre.png

Thx

Unable to Access WebUI (joal running in docker - The URL was not normalized)

Hi,

I'm unable to access the WebUI of Joal (firefox returns me 403 when I try to access
http://server_ip/joal/secret_path/ui )

Joal is running in a container (with --net=container:container_name to dperson/openvpn-client,
(that works, when i run docker logs joal, i can see the public IP which is the VPN one))

I put a nginx reverse proxy (docker, alpine aarch64 image) to have an access to the WebUI, above is my
/etc/nginx/conf.d/joal.conf

server {
   listen 80;
   server_name 192.XXX.X.XXX;

location /joal {
        proxy_pass http://joal:90XX/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Proxy "";

            proxy_http_version 1.1;
            proxy_set_header Connection "upgrade";
            proxy_set_header Upgrade $http_upgrade;
            proxy_read_timeout 600s;

            access_log off;
                }
}

when I try to access the WebUI, I got errors (in red) when I launch docker logs joal

[ERROR] 2018-12-03 08:26:52.635 [http-nio-90XX-exec-3] o.a.c.c.C.[.[.[.[dispatcherServletRegistration]: Servlet.service() for servlet [dispatcherServletRegistration] in context with path [] threw exception org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.

Thank you for your help :)

EDIT_1 : Solved the Access of the WebUI by correcting joal.conf ... (stupid error from me...)
new working UI conf

server {
   listen 80;
   server_name 192.XXX.X.XXX;

location /joal/ {
        proxy_pass  http://joal:90XX/secret_path/ui/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Proxy "";

            proxy_http_version 1.1;
            proxy_set_header Connection "upgrade";
            proxy_set_header Upgrade $http_upgrade;
            proxy_read_timeout 600s;

            access_log off;
                }
}

But now it shows "Failed to connect to Joal", I changed the value in "Change connection settings" to

Server address : 192.XXX.X.XXX
Server port : 80 (so it's nginx listening port)
Path prefix : secret_path (in my case only numers)
Secret Token : token (special charac, letters, numbers, i set up in docker run command)

Is this right ?

Error Unregistered torrent

Bonjour j'ai l'erreur suivante quand je lance le programme que se soit sur W10 ou un vps Debian 8
Tracker : hdf.world

00:56:51.894 [main] INFO  com.turn.ttorrent.common.Torrent - Single-file torrent information:
00:56:51.898 [main] INFO  com.turn.ttorrent.common.Torrent -   Torrent name: KONG_SKULL_ISLAND_3D_HDCLUB.iso
00:56:51.900 [main] INFO  com.turn.ttorrent.common.Torrent -   Announced at:
00:56:51.901 [main] INFO  com.turn.ttorrent.common.Torrent -      1. http://hdf.world:2710/CENSORED/announce
00:56:51.907 [main] INFO  com.turn.ttorrent.common.Torrent -   Created on..: 2017-06-26T18:33:38.000+0200
00:56:51.907 [main] INFO  com.turn.ttorrent.common.Torrent -   Created by..: ruTorrent (PHP Class - Adrien Gibrat)
00:56:51.907 [main] INFO  com.turn.ttorrent.common.Torrent -   Pieces......: 2570 piece(s) (16777216 byte(s)/piece)
00:56:51.908 [main] INFO  com.turn.ttorrent.common.Torrent -   Total size..: 43 109 974 016 byte(s)
00:56:52.038 [main] INFO  org.araymond.joal.ttorent.client.ConnectionHandler - Listening for incoming connections on CENSORED/***.***.143.20:49152.
00:56:52.160 [main] INFO  org.araymond.joal.SeedManager - Start seeding for 1187 minutes.
00:56:52.167 [bt-announce(..6D3470)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...
00:56:52.552 [bt-announce(..6D3470)] WARN  org.araymond.joal.ttorent.client.Client - 0 peers found for this torrent, stop seeding this torrent.
00:56:52.569 [bt-announce(..6D3470)] INFO  org.araymond.joal.torrent.watcher.TorrentFileProvider - Successfully moved file: /root/joal-conf/resources/torrents/Kong Skull Island - 2017 (Blu-Ray Original - AVC - 3D 108                     0p)-6561.torrent to archive folder
00:56:52.573 [bt-announce(..6D3470)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STOPPED to tracker with 0U/0D/0L bytes...
00:56:57.920 [main] INFO  com.turn.ttorrent.common.Torrent - Multi-file torrent information:
00:56:57.925 [main] INFO  com.turn.ttorrent.common.Torrent -   Torrent name: Inferno.2016.x265.HEVC.1080p.Multi.VFF.VO.DTSHDMA.Sub.Fr.En.GuS2SuG
00:56:57.925 [main] INFO  com.turn.ttorrent.common.Torrent -   Announced at:
00:56:57.926 [main] INFO  com.turn.ttorrent.common.Torrent -      1. http://hdf.world:2710/***/announce
00:56:57.926 [main] INFO  com.turn.ttorrent.common.Torrent -   Created on..: 2017-06-30T16:22:55.000+0200
00:56:57.926 [main] INFO  com.turn.ttorrent.common.Torrent -   Created by..: BitTorrent/7.9.9
00:56:57.927 [main] INFO  com.turn.ttorrent.common.Torrent -   Found 2 file(s) in multi-file torrent structure.
00:56:57.930 [main] INFO  com.turn.ttorrent.common.Torrent -   Pieces......: 1906 piece(s) (8388608 byte(s)/piece)
00:56:57.931 [main] INFO  com.turn.ttorrent.common.Torrent -   Total size..: 15 982 080 109 byte(s)
00:56:57.932 [main] INFO  org.araymond.joal.ttorent.client.ConnectionHandler - Listening for incoming connections on CENSORED/***.***.***.20:49152.
00:56:57.934 [main] INFO  org.araymond.joal.SeedManager - Start seeding for 1185 minutes.
00:56:57.939 [bt-announce(..576972)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...
00:56:58.283 [bt-announce(..576972)] WARN  org.araymond.joal.ttorent.client.announce.Announce - Unregistered torrent
00:57:03.285 [bt-announce(..576972)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...
00:57:03.643 [bt-announce(..576972)] WARN  org.araymond.joal.ttorent.client.announce.Announce - Unregistered torrent
00:57:08.645 [bt-announce(..576972)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...
00:57:09.007 [bt-announce(..576972)] WARN  org.araymond.joal.ttorent.client.announce.Announce - Unregistered torrent
00:57:14.008 [bt-announce(..576972)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...
00:57:14.329 [bt-announce(..576972)] WARN  org.araymond.joal.ttorent.client.announce.Announce - Unregistered torrent
00:57:19.330 [bt-announce(..576972)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...
00:57:19.659 [bt-announce(..576972)] WARN  org.araymond.joal.ttorent.client.announce.Announce - Unregistered torrent
00:57:21.837 [Thread-2] INFO  org.araymond.joal.torrent.watcher.TorrentFileProvider - Torrent file deletion detected, hot deleted file: /root/joal-conf/resou                                                                                rces/torrents/Kong Skull Island - 2017 (Blu-Ray Original - AVC - 3D 1080p)-6561.torrent
00:57:24.660 [bt-announce(..576972)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...
00:57:25.011 [bt-announce(..576972)] WARN  org.araymond.joal.ttorent.client.announce.Announce - Unregistered torrent
00:57:30.013 [bt-announce(..576972)] INFO  org.araymond.joal.ttorent.client.announce.HTTPTrackerClient - Announcing STARTED to tracker with 0U/0D/0L bytes...

Et ainsi de suite infiniment.

Add Ktorrent

Hello,
Ktorrent is the default torrent present in Kubuntu (KDE Plasma).
Could you please add it to the supported torrent programs?
Thank you

Add Joal to Docker Hub

Hi!

I'm using Docker on my NAS Synology to run Docker container and there's a GUI to DL, create and run/manage container. Usually I use the search bar to DL something but I can't find "anthonyraymond/joal" (it use Docker Hub as source).

Is it possible to add it to Docker Hub? It would be easier for every Synology user to run Joal!
Thanks in advance.

Issue with 2.0.7 version

Hello,
I'm trying run the last version but I have some troubles
bellow is log of my terminal

It was working with previous version, did I forget something?
thanks for your amazing work!

`kleiton@rasp1:$ cd Documentos/joal-conf/
kleiton@rasp1:
/Documentos/joal-conf$
kleiton@rasp1:/Documentos/joal-conf$ ls
clients config.json jack-of-all-trades-2.0.7.jar torrents
kleiton@rasp1:
/Documentos/joal-conf$ java -Djava.net.preferIPv6Addresses=true -jar jack-of-all-trades-2.0.7.jar -joal-conf=/home/kleiton/Documentos/joal-conf/ --spring.main.web-environment=true -server.port=9095 --joal.ui.path.prefix="kk" --joal.ui.secret-token="kk"
[INFO ] 2017-11-18 21:10:12.635 o.a.j.JackOfAllTradesApplication: Starting JackOfAllTradesApplication v2.0.7 on rasp1 with PID 4612 (/home/kleiton/Documentos/joal-conf/jack-of-all-trades-2.0.7.jar started by kleiton in /home/kleiton/Documentos/joal-conf)
[DEBUG] 2017-11-18 21:10:12.674 o.a.j.JackOfAllTradesApplication: Running with Spring Boot v1.5.7.RELEASE, Spring v4.3.11.RELEASE
[INFO ] 2017-11-18 21:10:12.675 o.a.j.JackOfAllTradesApplication: No active profile set, falling back to default profiles: default
[INFO ] 2017-11-18 21:10:13.204 o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext: Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@7b0070: startup date [Sat Nov 18 21:10:13 BRT 2017]; root of context hierarchy
[INFO ] 2017-11-18 21:10:16.115 o.h.v.i.u.Version: HV000001: Hibernate Validator 5.3.5.Final
[INFO ] 2017-11-18 21:10:22.079 o.s.b.f.a.AutowiredAnnotationBeanPostProcessor: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[INFO ] 2017-11-18 21:10:27.515 o.s.b.c.e.t.TomcatEmbeddedServletContainer: Tomcat initialized with port(s): 18254 (http)
[INFO ] 2017-11-18 21:10:27.621 o.a.c.c.StandardService: Starting service [Tomcat]
[INFO ] 2017-11-18 21:10:27.636 o.a.c.c.StandardEngine: Starting Servlet Engine: Apache Tomcat/8.5.20
[INFO ] 2017-11-18 21:10:29.385 o.a.c.c.C.[.[.[/]: Initializing Spring embedded WebApplicationContext
[INFO ] 2017-11-18 21:10:29.386 o.s.w.c.ContextLoader: Root WebApplicationContext: initialization completed in 16219 ms
[INFO ] 2017-11-18 21:10:31.286 o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'characterEncodingFilter' to: [/]
[INFO ] 2017-11-18 21:10:31.287 o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'hiddenHttpMethodFilter' to: [/
]
[INFO ] 2017-11-18 21:10:31.288 o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'httpPutFormContentFilter' to: [/]
[INFO ] 2017-11-18 21:10:31.288 o.s.b.w.s.FilterRegistrationBean: Mapping filter: 'requestContextFilter' to: [/
]
[INFO ] 2017-11-18 21:10:31.299 o.s.b.w.s.DelegatingFilterProxyRegistrationBean: Mapping filter: 'springSecurityFilterChain' to: [/]
[INFO ] 2017-11-18 21:10:31.300 o.s.b.w.s.ServletRegistrationBean: Mapping servlet: 'dispatcherServletRegistration' to [/kk/
]
[INFO ] 2017-11-18 21:10:35.465 o.s.s.c.ThreadPoolTaskExecutor: Initializing ExecutorService 'clientInboundChannelExecutor'
[INFO ] 2017-11-18 21:10:35.612 o.s.s.c.ThreadPoolTaskExecutor: Initializing ExecutorService 'clientOutboundChannelExecutor'
[INFO ] 2017-11-18 21:10:36.750 o.a.c.c.StandardService: Stopping service [Tomcat]
[INFO ] 2017-11-18 21:10:36.911 o.s.b.a.l.AutoConfigurationReportLoggingInitializer:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
[ERROR] 2017-11-18 21:10:36.977 o.s.b.SpringApplication: Application startup failed
java.lang.IllegalArgumentException: Could not resolve placeholder 'joal-conf' in value "${joal-conf}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:467)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
[INFO ] 2017-11-18 21:10:37.026 o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext: Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@7b0070: startup date [Sat Nov 18 21:10:13 BRT 2017]; root of context hierarchy
[WARN ] 2017-11-18 21:10:37.051 o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext: Exception thrown from ApplicationListener handling ContextClosedEvent
java.lang.IllegalArgumentException: Could not resolve placeholder 'joal-conf' in value "${joal-conf}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:467)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:235)
at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:192)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:991)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:958)
at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
[WARN ] 2017-11-18 21:10:37.060 o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext: Exception thrown from LifecycleProcessor on context close
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@7b0070: startup date [Sat Nov 18 21:10:13 BRT 2017]; root of context hierarchy
at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:427)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:999)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:958)
at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
[INFO ] 2017-11-18 21:10:37.074 o.s.s.c.ThreadPoolTaskExecutor: Shutting down ExecutorService 'clientOutboundChannelExecutor'
[INFO ] 2017-11-18 21:10:37.075 o.s.s.c.ThreadPoolTaskExecutor: Shutting down ExecutorService 'clientInboundChannelExecutor'
kleiton@rasp1:~/Documentos/joal-conf$
`

Possible on synology ?

Hello, thanks you very much for this awsome feature.

I would like to know if it could be possible somehow to use joal on a Synology NAS.

Thanks.

Auto-download unseeded torrents from T411(suggestion)

Encore une suggestion, serait-ce possible d'ajouter un système qui télécharge automatiquement des torrents non-seedés en provenance de t411, pour augmenter son ratio sans rien faire du tout? :)
Je sais pas du tout si c'est possible ou pas, je suggère juste !
Merci 👍

Client list order

Fix client list order, because they appear unordered in WebUi.
Better fix the order of listClient() method. Because the order is subject to complex behavior (1.1.12 is less 1.11.2), take a look at "version semantic ordering" on google.

Failed to connect to JOAL.

Hi, I got this message on Joal UI when I try to connect.

I install Joal with docker-compose and traefik reverse proxy.

I can reach joal.server.com/secret_path/ui but after i get the failed to connect message and in console I get an other error who says "Firefox can't connect to wss://joal.server.com:80/"

If someone can help me ! Thanks

Port listening / IP interface

Hello,

I have installed joal on my dedicated server, and I have some suggests:

  • "Listening for incoming peer connections on port XXXX" => since I have a firewall on my server, it would be great to be able to choose this port manually in the configuration file, so I can open it in the firewall.

  • "Fetching ip from: http://ident.me/" , "Successfully fetch public IP address: XXXXX", "Ip reported to tracker will be XXXXX" => I have multiple IP addresses on my server, and in my case for my real Transmission server I have fixed one specific IP address. It would be great to be able to specify also the same IP address in joal configuration file, so others ips are not connected with torrents, and the seed would come from the same IP than the real client.

Thank you for your work :)

[INFO ] 2019-02-18 01:33:39.963 [ main] o.a.j.ApplicationClosingListener: JOAL gracefully shut down.

[ERROR] 2019-02-18 01:33:39.902 [ main] o.a.j.ApplicationReadyListener: Fatal error encountered
java.lang.IllegalStateException: Fatal error encountered
at org.araymond.joal.ApplicationReadyListener.onApplicationEvent(ApplicationReadyListener.java:37)
at org.araymond.joal.ApplicationReadyListener.onApplicationEvent(ApplicationReadyListener.java:17)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:398)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:355)
at org.springframework.boot.context.event.EventPublishingRunListener.running(EventPublishingRunListener.java:105)
at org.springframework.boot.SpringApplicationRunListeners.running(SpringApplicationRunListeners.java:78)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:332)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at java.io.OutputStream.write(OutputStream.java:75)
at com.turn.ttorrent.bcodec.BEncoder.bencode(BEncoder.java:92)
at com.turn.ttorrent.bcodec.BEncoder.bencode(BEncoder.java:71)
at com.turn.ttorrent.bcodec.BEncoder.bencode(BEncoder.java:108)
at com.turn.ttorrent.common.Torrent.(Torrent.java:144)
at org.araymond.joal.core.torrent.torrent.MockedTorrent.(MockedTorrent.java:35)
at org.araymond.joal.core.torrent.torrent.MockedTorrent.fromFile(MockedTorrent.java:57)
at org.araymond.joal.core.torrent.watcher.TorrentFileProvider.onFileCreate(TorrentFileProvider.java:90)
at org.araymond.joal.core.torrent.watcher.TorrentFileWatcher$$Lambda$372/895281180.accept(Unknown Source)
at java.lang.Iterable.forEach(Iterable.java:75)
at org.araymond.joal.core.torrent.watcher.TorrentFileWatcher.start(TorrentFileWatcher.java:57)
at org.araymond.joal.core.torrent.watcher.TorrentFileProvider.start(TorrentFileProvider.java:49)
at org.araymond.joal.core.SeedManager.init(SeedManager.java:61)
at org.araymond.joal.ApplicationReadyListener.onApplicationEvent(ApplicationReadyListener.java:34)
at org.araymond.joal.ApplicationReadyListener.onApplicationEvent(ApplicationReadyListener.java:17)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:398)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:355)
at org.springframework.boot.context.event.EventPublishingRunListener.running(EventPublishingRunListener.java:105)
at org.springframework.boot.SpringApplicationRunListeners.running(SpringApplicationRunListeners.java:78)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:332)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[INFO ] 2019-02-18 01:33:39.943 [ main] o.a.j.ApplicationClosingListener: Gracefully shutting down application.
[INFO ] 2019-02-18 01:33:39.947 [ Thread-4] o.a.j.c.t.c.ConnectionHandler: Ip fetcher thread has been stopped.
[INFO ] 2019-02-18 01:33:39.963 [ main] o.a.j.ApplicationClosingListener: JOAL gracefully shut down.

The program crashed.Is there insufficient memory?

Joal deployment on heroku

I deployed this on a heroku server, everything is working smoothly until I open the app.
I has Failed to connect to Joal, retry in 8 seconds
Then I open the console and find this error message WebSocket connection to 'wss://xxxxxxxxxxxxxxxxxxxxxxxx:xx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyy' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR
Please help.

Upcomming features in v2.0.0

Feel free to discuss about features and tell me if you have idea to improve v2.0.0

Features

  • GUI compatible. (GUI will NOT be in this repository, JOAL is and will remain a command line tool. But it will be possible to connect a GUI with some kind of RPC or Websocket). An official Electron (for desktop) and webui are both planned as separate repositories. (follow desktop app progress at https://github.com/anthonyraymond/joal-electron)
  • More security, joal will be able to disable himself. In case of a major bug has been detected, all joal client will be remortly shutted down. (Don't be affraid, there will be nothing on your computer that will report stats to any server, JOAL will simply check if a file is present in a certain directory in https://github.com/anthonyraymond/joal).
  • Brand new upload speed manager, more safe and more close to real client than ever. And more performant than every seed faker.
  • Ability to seed multiple torrent concurently.
  • The pause between seed will be removed, it wasn't a good idea in the first place, and does not improve security. As long a JOAL will be started, it will seed.
  • Bulletproof! v1.x.x was developped in a hurry (so far it seems to work perfectly), but v2.x.x will be insanely tested and much more extensible.
  • Hot-reloading JOAL configuration config.json. (This is still and idea, i'm not a 100% sure to include this features).

ROADMAP

In progress

Todo

Done

  • Switch from Gson to Jackson.
  • Introduce spring(boot).
  • Make ConfigProvider injectable.
  • Make BitTorrentClientProvider injectable.
  • Make TorrentFileProvider injectable.
  • Turn SeedManager in components to allow injection.
  • Try if re-enabling log4j shutdown hook is possible (currently, last announce log is skipped if not disabled). [Not possible]
  • Make TorrentFileProvider returns MockedTorrent instead of FilePath.
  • Huge refactoring effort to make classes more responsible of their own state and less dependant of others classes.
  • Ensure core components are tested.
  • Find a way to reduce number of Thread required to prevent critical thread (BandwithManager) to be put in idle state when joal is running on cheap computers like raspberry. [Not needed]
  • Chose between RPC and Websocket (or both....) protocol to allow remote control (Stomp event messaging was chosen).
  • Refactor key generation to allow key refresh on (NEVER, RESTART, ANNOUNCE, TORRENT).
  • Add ipv6 support for tracker requests.
  • Rework all .clients files to take care of the new changes.
  • Add a config flag to completly disable web resources exposure.
  • Ensure exposed method won't be reachable by anybody (both websocket and http).
  • Add more version of µTorrent and Deluge.
  • Expose control over Stomp messaging.
  • Implement authentication for websocket. Login / password or maybe a secret token.

Rescheduled for v2.0.1

Can be this be used as a form of universal torrent web ui ?

I never liked the fact that when I switch the client, I must switch its web UI. I would like one UI to control them all. I am currently on Tixati and its material theme which looks nice but its coupled with tixati.

Are you planning to support his kind of usage and what is your stance on it ?

is there a way to only seed until X ratio

Is there a way to only seed until X ratio.
so we dont have to keep monitoring it - as uploading 50gb for a 2 gig download might seem suss for example and might get flagged
Cheers

web ui authorization issue

Everything works fine until the last step, the web ui refuse to access for authorization issue.
I guess it is because password was set and the environment wasn't set up right, but i've no idea how to fix this. What may i do for this issue?

BTW, thx for great try on this repo.

Commande en tâche de fond

Bonjour,

Avant tout félicitation à toi anthony pour ce super boulot !!

Tout fonctionne bien pour ma part sauf que lorsque je ferme mon terminal ou la commande "java -jar ./jack-of-all-trades.******" est lancé je perd automatique l'accès à mon joal.

Une solution pour que cette commande java reste lancer en tâche de fond ?

Description: Raspbian GNU/Linux 8.0 (jessie)

Ability to set custom upload speed per torrent

There are times when I'm hunting for BP only and don't want to fake upload to tracker or there're partial seeders and I don't want to show upload data. In cases like that upload speed is inherited from what's been set in global config. It'd be helpful to have per torrent based upload speed.

Webui error

java -jar /root/joal-conf/jack-of-all-trades-2.1.5.jar --joal-conf="/root/joal-conf" --spring.main.web-environment=true
[INFO ] 2018-07-25 21:14:52.640 [ main] o.a.j.JackOfAllTradesApplication: Starting JackOfAllTradesApplication v2.1.5 on localhost with PID 7823 (/root/joal-conf/jack-of-all-trades-2.1.5.jar started by root in /root)
[INFO ] 2018-07-25 21:14:52.688 [ main] o.a.j.JackOfAllTradesApplication: No active profile set, falling back to default profiles: default
[INFO ] 2018-07-25 21:14:53.264 [ main] o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext: Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@39ba5a14: startup date [Wed Jul 25 21:14:53 CST 2018]; root of context hierarchy
[INFO ] 2018-07-25 21:15:02.248 [ main] o.s.b.f.a.AutowiredAnnotationBeanPostProcessor: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[INFO ] 2018-07-25 21:15:05.509 [ main] o.s.b.w.e.t.TomcatWebServer: Tomcat initialized with port(s): 11728 (http)
[INFO ] 2018-07-25 21:15:05.705 [ main] o.a.c.h.Http11NioProtocol: Initializing ProtocolHandler ["http-nio-11728"]
[INFO ] 2018-07-25 21:15:05.781 [ main] o.a.c.c.StandardService: Starting service [Tomcat]
[INFO ] 2018-07-25 21:15:05.786 [ main] o.a.c.c.StandardEngine: Starting Servlet Engine: Apache Tomcat/8.5.31
[INFO ] 2018-07-25 21:15:05.854 [localhost-startStop-1] o.a.c.c.AprLifecycleListener: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/aarch64:/lib:/usr/lib]
[INFO ] 2018-07-25 21:15:06.412 [localhost-startStop-1] o.a.c.c.C.[.[.[/]: Initializing Spring embedded WebApplicationContext
[INFO ] 2018-07-25 21:15:06.414 [localhost-startStop-1] o.s.w.c.ContextLoader: Root WebApplicationContext: initialization completed in 13173 ms
[ERROR] 2018-07-25 21:15:06.487 [localhost-startStop-1] o.s.b.w.e.t.TomcatStarter: Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException. Message: Error creating bean with name 'endpointObfuscatorConfiguration' defined in URL [jar:file:/root/joal-conf/jack-of-all-trades-2.1.5.jar!/BOOT-INF/classes!/org/araymond/joal/web/config/EndpointObfuscatorConfiguration.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
[INFO ] 2018-07-25 21:15:06.666 [ main] o.a.c.c.StandardService: Stopping service [Tomcat]
[WARN ] 2018-07-25 21:15:06.710 [ main] o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
[INFO ] 2018-07-25 21:15:06.775 [ main] o.s.b.a.l.ConditionEvaluationReportLoggingListener:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[ERROR] 2018-07-25 21:15:06.793 [ main] o.s.b.SpringApplication: Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
at org.araymond.joal.JackOfAllTradesApplication.main(JackOfAllTradesApplication.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:126)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:86)
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:413)
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:174)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152)
... 16 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'endpointObfuscatorConfiguration' defined in URL [jar:file:/root/joal-conf/jack-of-all-trades-2.1.5.jar!/BOOT-INF/classes!/org/araymond/joal/web/config/EndpointObfuscatorConfiguration.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1256)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1105)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:226)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:214)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:91)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:80)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:250)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:237)
at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:54)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5245)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'joal.ui.path.prefix' in value "${joal.ui.path.prefix}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:839)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:818)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:724)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:197)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1276)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1133)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503)
... 28 more

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.