mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-09-09 20:22:40 -04:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab90c4c36a | ||
|
|
57abc3215c | ||
|
|
8848e5b2fb | ||
|
|
9a12300877 | ||
|
|
31e052796d | ||
|
|
9ae6b71d2b | ||
|
|
944816e765 | ||
|
|
3e75a76602 | ||
|
|
ab16e1359c | ||
|
|
442522c2ff | ||
|
|
54e868dd72 | ||
|
|
128e0d03d7 | ||
|
|
d6ccb620be | ||
|
|
a498a98336 | ||
|
|
e39d1e323a | ||
|
|
091b9cfafd | ||
|
|
08aaca09df | ||
|
|
f99fb0202f | ||
|
|
5636283f31 | ||
|
|
0ccb23b9d3 | ||
|
|
ee9a6c0b6c | ||
|
|
e3308e61b2 | ||
|
|
53e6ae479d | ||
|
|
7549f23956 | ||
|
|
2f92c2b3e9 | ||
|
|
a2b3ed3de1 | ||
|
|
fb8b181205 | ||
|
|
bc73f7de05 | ||
|
|
1355f40a60 | ||
|
|
45873d4cbb | ||
|
|
f32847229a | ||
|
|
72630c30ae | ||
|
|
990dce2232 | ||
|
|
c56f974ee4 | ||
|
|
6d8fd5853a | ||
|
|
99447d7a62 | ||
|
|
6455a44ed4 | ||
|
|
cb05869e0c | ||
|
|
56ced93868 | ||
|
|
50dad36028 | ||
|
|
936b2db7df | ||
|
|
11ba9ae12a | ||
|
|
a61a5539a7 | ||
|
|
77f7490aea | ||
|
|
a7198b6a81 | ||
|
|
977dbc805f | ||
|
|
abcca19820 | ||
|
|
52a7b5dcff | ||
|
|
9518714885 | ||
|
|
4a89fcf8ea | ||
|
|
d11e757c6e | ||
|
|
4f9ed7803f | ||
|
|
95bc069af9 | ||
|
|
d1d9bab65a | ||
|
|
e2560bf214 | ||
|
|
825322baa4 | ||
|
|
7a5ca5b226 | ||
|
|
cb4f022d17 | ||
|
|
913e4ea02e | ||
|
|
aa0d44a60b | ||
|
|
8b5f29df8f | ||
|
|
82954f5930 | ||
|
|
67f1858315 | ||
|
|
55bb81ceef | ||
|
|
6864810ace | ||
|
|
bae55636a8 | ||
|
|
f4778abd1f | ||
|
|
2cb716ce26 | ||
|
|
3246e9c6d4 | ||
|
|
ae6d5f54bd | ||
|
|
bd95c29866 | ||
|
|
074eed16e1 | ||
|
|
3b72a005fd | ||
|
|
afb9a4758f | ||
|
|
35c180216b | ||
|
|
f0c6fe5786 | ||
|
|
bd8c245b83 | ||
|
|
effc7265d4 | ||
|
|
bd9a8e5c33 | ||
|
|
c55d662e1f | ||
|
|
dbfabc1d80 | ||
|
|
d897936da5 | ||
|
|
f81a8c97c4 | ||
|
|
e93e01dd59 | ||
|
|
79b504ff93 | ||
|
|
52dafd4ab8 | ||
|
|
0cc538ac5a | ||
|
|
4b99d04454 | ||
|
|
708fad33f3 | ||
|
|
c6dc25c9c2 | ||
|
|
07be38cd01 | ||
|
|
0121e0ae16 | ||
|
|
f24b3ced28 | ||
|
|
157dfc928d | ||
|
|
d10639542d | ||
|
|
c0f0b7eb31 | ||
|
|
d6d70325db | ||
|
|
46954165d2 | ||
|
|
58e7d520bf | ||
|
|
a4f8040324 | ||
|
|
8d5cc9a3e6 | ||
|
|
4592ce4d55 | ||
|
|
b62b38b5af | ||
|
|
14b1d4630c | ||
|
|
8a42abd1e7 | ||
|
|
41e5dfdf18 | ||
|
|
41de13388c | ||
|
|
1f16f13169 | ||
|
|
ef23d40972 | ||
|
|
b07b43496c | ||
|
|
2ba04f1a6a | ||
|
|
e7e06dea41 | ||
|
|
ce32504a81 | ||
|
|
7cd6c94482 | ||
|
|
fcb3d01194 | ||
|
|
af0b53990c | ||
|
|
e3861954ba | ||
|
|
006dd8dc77 | ||
|
|
dbff203c62 | ||
|
|
f45eb891cd | ||
|
|
77b58240cf | ||
|
|
97ae1ff10e | ||
|
|
8734a4f24b | ||
|
|
480fce55a8 | ||
|
|
d4136fadd2 | ||
|
|
308bc375bd | ||
|
|
3bbcf6a41e | ||
|
|
3d5d10a4c1 | ||
|
|
0e979c14f0 | ||
|
|
70f49114ac | ||
|
|
f730607414 | ||
|
|
0172ee25c9 | ||
|
|
699d75bb9f | ||
|
|
95822704c8 | ||
|
|
76e5f69e67 | ||
|
|
abd31d0249 | ||
|
|
9ae7ee6e2d | ||
|
|
18f4cc25f3 | ||
|
|
b755192600 | ||
|
|
045140cfbc | ||
|
|
4e7e44e25f | ||
|
|
5c4dfa4cc6 | ||
|
|
b7e3401e8e | ||
|
|
90cee7fb31 | ||
|
|
8e0e3cf35e | ||
|
|
7f72584537 | ||
|
|
8f0d606892 | ||
|
|
9fafe64cff | ||
|
|
94b42e0597 | ||
|
|
b2c1960d93 | ||
|
|
9d24b4cc35 | ||
|
|
3d675b033c | ||
|
|
0d2d9be8b3 | ||
|
|
6e9b6dab97 | ||
|
|
44a1717f6d | ||
|
|
4f51c74297 | ||
|
|
87c64a8c5d | ||
|
|
b6c6635f22 | ||
|
|
5a7abcb07c | ||
|
|
65232d134b | ||
|
|
d7b4bdefe5 | ||
|
|
6d9174bea1 | ||
|
|
921edfd4c5 | ||
|
|
786d5b0667 | ||
|
|
e846c71f20 | ||
|
|
0108e2ef5a | ||
|
|
9a81277ff6 | ||
|
|
06cc2ff316 | ||
|
|
7cdf4cb48c | ||
|
|
c34c547f1f | ||
|
|
9507294db7 | ||
|
|
ae7dd62d9f | ||
|
|
52e309cb09 | ||
|
|
b580373982 | ||
|
|
ec7bde5bb2 | ||
|
|
3516eeec5b | ||
|
|
52351192e6 | ||
|
|
3a6f04496d | ||
|
|
47f2df2112 | ||
|
|
363a26b8a1 | ||
|
|
7e50a00f55 | ||
|
|
a7d6a80e82 | ||
|
|
e7da95b2ac | ||
|
|
74fca23d59 | ||
|
|
0a12fa1253 | ||
|
|
1263068140 | ||
|
|
916c191b18 | ||
|
|
d8c0220353 | ||
|
|
4ab425d15c | ||
|
|
74e5633d1c | ||
|
|
89d36bbc61 | ||
|
|
1877ac18a5 | ||
|
|
5e42e25617 | ||
|
|
c27c9564cf | ||
|
|
c4b0da335d | ||
|
|
fab36ec008 | ||
|
|
8a2b875779 | ||
|
|
efaffb8298 | ||
|
|
e004eb3f00 | ||
|
|
43e8f6dc81 | ||
|
|
f5bff8fe7c | ||
|
|
fad8484b93 | ||
|
|
7664b54f89 | ||
|
|
21cbc353dd | ||
|
|
8d66306ec4 | ||
|
|
479daf0e76 | ||
|
|
bf0fbb7b10 | ||
|
|
d3c91f1585 | ||
|
|
ca165b328a | ||
|
|
fa2ffeea92 | ||
|
|
0d00965ac3 | ||
|
|
7d7bec1f80 | ||
|
|
b6fd915365 | ||
|
|
fecae72267 | ||
|
|
7bffd91e3f | ||
|
|
f859521a7e | ||
|
|
a869386fac | ||
|
|
8bc7885b7a | ||
|
|
78be46738d | ||
|
|
6fce73855c | ||
|
|
fa844a6223 | ||
|
|
906379dd09 | ||
|
|
37cded612f | ||
|
|
73e8fade61 | ||
|
|
758cc7afab | ||
|
|
d74b7b06d2 | ||
|
|
39009f2f71 | ||
|
|
9fdc1c6813 | ||
|
|
c5568fe830 | ||
|
|
bad81f84b9 | ||
|
|
2ac08dd0e6 | ||
|
|
408ffc4539 | ||
|
|
eb958327c5 | ||
|
|
e157d77a1e | ||
|
|
e961c9ea8f | ||
|
|
258c4f769d | ||
|
|
b31fedd857 | ||
|
|
eafe69500b | ||
|
|
ae09990c43 | ||
|
|
cf54b65c32 | ||
|
|
7974421fa1 | ||
|
|
847a098d4e | ||
|
|
eb4de0ae0f | ||
|
|
bca9f3b753 | ||
|
|
cad8a9a5d3 | ||
|
|
f5f36d21e8 | ||
|
|
c51435c114 | ||
|
|
2a7f1780b4 | ||
|
|
98a44e40fb | ||
|
|
65cf6fa9a1 | ||
|
|
b2e32d1720 | ||
|
|
f0bfedbe8e | ||
|
|
fd4e059c13 | ||
|
|
a53575e154 | ||
|
|
4a73484603 | ||
|
|
03b380f90b | ||
|
|
a2bd3b2dfe | ||
|
|
56fe140ebf | ||
|
|
4fafcce740 | ||
|
|
02352c4ae6 | ||
|
|
4b74aab335 | ||
|
|
2d67ac189d | ||
|
|
8ece62e23d | ||
|
|
56c2bdd77d | ||
|
|
1f555f1930 | ||
|
|
8496432c14 | ||
|
|
1672ffa670 | ||
|
|
6aab199f12 | ||
|
|
46d0c379a4 | ||
|
|
99240f145a | ||
|
|
3c9079d73c | ||
|
|
0eb98b9a6c | ||
|
|
76bfd98b77 | ||
|
|
3348640c88 | ||
|
|
d81c64fd2b | ||
|
|
8b4c919617 | ||
|
|
76c58953df | ||
|
|
4ddc5caa49 | ||
|
|
694663bd95 | ||
|
|
62aba5844e | ||
|
|
d0d60cef05 | ||
|
|
3d293fdcb0 | ||
|
|
96e9528046 | ||
|
|
4ea24b3203 | ||
|
|
a756eea25a | ||
|
|
210020e489 | ||
|
|
e586ead024 | ||
|
|
14c80bf1dc | ||
|
|
bdd56e794a | ||
|
|
a544548934 | ||
|
|
e06c1d61fb | ||
|
|
600c5209c6 | ||
|
|
bee90366ee | ||
|
|
e9bc4e9417 | ||
|
|
f01ff15761 | ||
|
|
356ada159d | ||
|
|
cc831e16d8 | ||
|
|
b8dc46ad01 | ||
|
|
d8ab19087d | ||
|
|
ec8a79eedd | ||
|
|
f1e2a8e9d8 | ||
|
|
4042a5fe5d | ||
|
|
a4752751ed | ||
|
|
e23ecf46d1 | ||
|
|
70a8c597a6 | ||
|
|
fa639bdb53 | ||
|
|
233bdd5b1d | ||
|
|
a0ab6d35c7 | ||
|
|
bd29680ce7 | ||
|
|
7139e92554 | ||
|
|
897df53466 | ||
|
|
58281711f6 | ||
|
|
b524383aa3 | ||
|
|
75a16e3588 | ||
|
|
1453032ad6 | ||
|
|
824ab4afad | ||
|
|
73dd41c67f | ||
|
|
59ee77355d | ||
|
|
5c758773ad | ||
|
|
46de49df06 | ||
|
|
d1c54a9a74 | ||
|
|
e7527c45cd | ||
|
|
7d5207aa67 | ||
|
|
654302e691 | ||
|
|
ee673b57fd | ||
|
|
2be374b841 | ||
|
|
906e1eda89 | ||
|
|
ece02cc4fa | ||
|
|
876ad60ddf | ||
|
|
862da354ac | ||
|
|
8fd477b979 | ||
|
|
2d7005655c | ||
|
|
7322f8348a | ||
|
|
e3e3a12e73 | ||
|
|
77cdd057a4 | ||
|
|
e8206fbdd9 | ||
|
|
589f15a77b | ||
|
|
7bb443678a | ||
|
|
6390415101 | ||
|
|
4abf192e11 | ||
|
|
1fed37f9da | ||
|
|
a9d86a7447 | ||
|
|
2abe4c3cef | ||
|
|
0542c25003 | ||
|
|
1b8ee4e290 | ||
|
|
51128cba55 | ||
|
|
3612432581 | ||
|
|
deca000a1b | ||
|
|
39cccb5653 | ||
|
|
f6838dc985 | ||
|
|
8cd4d92395 | ||
|
|
3bf9906f45 | ||
|
|
9f7daf96ef | ||
|
|
67de4df155 | ||
|
|
bc51a4bd1c | ||
|
|
bb54616018 | ||
|
|
6bcff5e014 | ||
|
|
8970a03a9a | ||
|
|
3ad717ca35 | ||
|
|
b14f72c67a | ||
|
|
45d036804f | ||
|
|
8f606db233 | ||
|
|
3766ba5402 | ||
|
|
e851813cef | ||
|
|
4d49ad9141 | ||
|
|
16618b3af2 | ||
|
|
0e5c0f664f | ||
|
|
7be9281431 | ||
|
|
ee0327fac1 | ||
|
|
9930de3e7f | ||
|
|
e8503e89c6 | ||
|
|
1d9ed419eb | ||
|
|
0207652e3e | ||
|
|
0f1e99c5cb | ||
|
|
f134bc7efb | ||
|
|
dcd7c7180e | ||
|
|
fbbfcd075b | ||
|
|
f42d2e4140 | ||
|
|
88882cebbc | ||
|
|
17a979675c | ||
|
|
4642850c79 | ||
|
|
e8d6eebb04 | ||
|
|
864c5160c0 | ||
|
|
99b5a00c12 | ||
|
|
85ee1f07d7 | ||
|
|
e58b4394e0 | ||
|
|
1e91a57bf1 | ||
|
|
39cee52a7e | ||
|
|
72068f939d | ||
|
|
096d0d3cad | ||
|
|
2472ab0121 | ||
|
|
00421717b8 | ||
|
|
ae96d93f94 | ||
|
|
8522c40c8f | ||
|
|
23f86e95f1 | ||
|
|
eed2045189 | ||
|
|
217785bf0f | ||
|
|
6aef50dc5d | ||
|
|
16b6e3caa7 | ||
|
|
3de4c99a8a | ||
|
|
980aa19a75 | ||
|
|
fb4b57e056 | ||
|
|
03638365ea | ||
|
|
157cb1c83d | ||
|
|
e51f11c2b1 | ||
|
|
1ad0961dd8 | ||
|
|
46ff7dd4e2 | ||
|
|
8b067df914 | ||
|
|
ef43b13272 | ||
|
|
e8e9974224 | ||
|
|
feebbb9f04 | ||
|
|
bc4f06dd1d | ||
|
|
971e4fc909 | ||
|
|
51cc765949 | ||
|
|
19c6a4fffa | ||
|
|
105ac32d2f | ||
|
|
57550675d2 | ||
|
|
e674abc5c0 | ||
|
|
f965c96f51 | ||
|
|
c76b8ed9e0 | ||
|
|
4fbd0d8a7b | ||
|
|
2186c0fff6 | ||
|
|
1adca9a9c1 | ||
|
|
9408353f2b | ||
|
|
84f4d453d2 | ||
|
|
d10209f2a1 | ||
|
|
3ae149c72f | ||
|
|
47385acc3b | ||
|
|
814eeaa900 | ||
|
|
5f2ea13aad | ||
|
|
41ca217931 | ||
|
|
b57d36e8dd | ||
|
|
9a4be70734 | ||
|
|
a8443595a6 | ||
|
|
fd0a70ac58 | ||
|
|
8a8685c968 | ||
|
|
9e6cb8da8e | ||
|
|
054ec54d51 | ||
|
|
272ce773cb | ||
|
|
050b925f7b | ||
|
|
0087940898 | ||
|
|
e323c014f9 | ||
|
|
cc465c7554 | ||
|
|
14cb37564f | ||
|
|
094db56c3b | ||
|
|
aabb709b8b | ||
|
|
0833dd2db9 | ||
|
|
cd3f912be4 | ||
|
|
665c516db6 | ||
|
|
b670da9fa0 | ||
|
|
80bee9bffe | ||
|
|
d85a70e8ad | ||
|
|
8f21533e76 | ||
|
|
89996482a1 | ||
|
|
03c10dce91 | ||
|
|
bd5331be05 | ||
|
|
46e1645289 | ||
|
|
4ce3965747 | ||
|
|
9d4af19db3 | ||
|
|
48e034f4be | ||
|
|
f8959baa2f | ||
|
|
8ed5997eae | ||
|
|
daf9f50ac8 | ||
|
|
6b11013c1a |
No files matched your search
+41
-2
@@ -1,7 +1,44 @@
|
||||
Release Notes - SABnzbd 5.1.0 Release Candidate 2
|
||||
Release Notes - SABnzbd 5.1.1
|
||||
=========================================================
|
||||
|
||||
This is the second release candidate of version 5.1.
|
||||
## Critical authentication vulnerability resolved in 5.1.1 (GHSA-xrfq-jhgh-wqch)
|
||||
|
||||
You are only affected if an untrusted party can reach the web interface.
|
||||
By default, SABnzbd is only accessible from your own device and `External internet access`
|
||||
is set to `No access`. If either of those is still at its default, or if you use a proxy
|
||||
service for authentication, you are not affected.
|
||||
|
||||
If the SABnzbd login page is reachable from outside your network, an attacker could
|
||||
obtain a valid session in version 5.1.0 and earlier, even when SABnzbd is protected with
|
||||
a username and password. This means that all information in SABnzbd would be exposed.
|
||||
|
||||
If you rely on the SABnzbd username and password to keep out other users on your
|
||||
network or the internet, it is recommended that you change the following
|
||||
sensitive information after applying the update:
|
||||
|
||||
* SABnzbd username and password.
|
||||
* SABnzbd API-key.
|
||||
* Usenet server passwords.
|
||||
* API-keys from indexers used within RSS-feeds.
|
||||
* Authentication information for notification services.
|
||||
|
||||
If you cannot update right away, the only mitigations are to ensure the web interface is not
|
||||
reachable by untrusted parties, or to lower `External internet access` to `Full API` or below.
|
||||
|
||||
More information: https://sabnzbd.org/auth-bypass
|
||||
|
||||
## Other bug fixes in 5.1.1
|
||||
|
||||
* Styling cache issues could occur after updating.
|
||||
* RSS items were removed too eagerly from RSS-history after download.
|
||||
* The RSS-feed `Clear Downloaded` button did not do anything.
|
||||
|
||||
## Changelog 5.1.0
|
||||
|
||||
This release brings a fundamental improvement to "Retry": instead of
|
||||
re-downloading any files with missing data, only the articles that were actually
|
||||
missing are fetched again. RSS got an overhaul under the hood, the interface is
|
||||
refreshed, and we added quite a long list of long-requested features and bugfixes.
|
||||
|
||||
## New features in 5.1.0
|
||||
|
||||
@@ -39,10 +76,12 @@ This is the second release candidate of version 5.1.
|
||||
* Diskspace checks would be too strict when unpacking to different disk.
|
||||
* Prevent deadlock when a second signal arrives during shutdown procedure.
|
||||
* Verification using SFV-checks could fail, even though files were correct.
|
||||
* Don't log Warning during clean shutdowns.
|
||||
* Windows: Uninstall would not remove Settings or Windows Service.
|
||||
* Windows: Warn for OS-limit if more than 1024 connections are configured.
|
||||
* macOS: AppleDouble files could result in failures in `Moving` stage.
|
||||
* macOS: Restarting the application resulted in Terminal window.
|
||||
* macOS: Included par2cmdline-turbo will now use all available CPU-features.
|
||||
|
||||
## Upgrade notices
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
@import url('Night.css') screen and (prefers-color-scheme: dark);
|
||||
@import url('Night.css?lastmajorupdate=510') screen and (prefers-color-scheme: dark);
|
||||
@@ -1 +1 @@
|
||||
@import url('Night.css') screen and (prefers-color-scheme: dark);
|
||||
@import url('Night.css?lastmajorupdate=510') screen and (prefers-color-scheme: dark);
|
||||
@@ -1,237 +1,240 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2022-2026 by The SABnzbd-Team (sabnzbd.org) -->
|
||||
<component type="desktop-application">
|
||||
<id>org.sabnzbd.sabnzbd</id>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
<name>SABnzbd</name>
|
||||
<summary>Free and easy binary newsreader</summary>
|
||||
<summary xml:lang="fr">Lecteur de news binaire libre et facile à utiliser</summary>
|
||||
<summary xml:lang="tr">Özgür ve kullanımı kolay Usenet ikili okuyucu</summary>
|
||||
<branding>
|
||||
<color type="primary" scheme_preference="light">#e7e7e7</color>
|
||||
<color type="primary" scheme_preference="dark">#444444</color>
|
||||
</branding>
|
||||
<description>
|
||||
<p>
|
||||
SABnzbd is a free and Open Source web-based binary newsreader,
|
||||
with support for the popular nzb file format. It greatly simplifies
|
||||
the process of downloading from Usenet, thanks to a friendly
|
||||
web-based user interface and advanced built-in post-processing
|
||||
options including the ability to automatically verify, repair,
|
||||
extract and clean up downloaded posts. It runs anywhere, comes in
|
||||
over a dozen languages, and integrates with a host of tools, apps
|
||||
and services that help automate the download process.
|
||||
</p>
|
||||
<p xml:lang="fr">
|
||||
SABnzbd est un lecteur binaire de newsgroups libre et gratuit prenant
|
||||
en charge le format nzb très répandu. Il simplifie grandement le processus
|
||||
de téléchargement depuis Usenet grâce à une interface web conviviale
|
||||
et à des options avancées de post-traitement intégrées qui comprennent
|
||||
la capacité à vérifier, réparer, extraire et nettoyer automatiquement
|
||||
les messages téléchargés. Il fonctionne partout, est fourni avec une
|
||||
douzaine de traductions et s'intègre avec de nombreux outils, applications
|
||||
et services qui aident à automatiser le processus de téléchargement.
|
||||
</p>
|
||||
<p xml:lang="tr">
|
||||
SABnzbd, popüler nzb biçimini destekleyen özgür ve ücretsiz bir ikili
|
||||
haber grupları okuyucusudur. Kullanıcı dostu Web tabanlı arayüzü ve
|
||||
indirilen mesajları otomatik olarak doğrulama, tamir etme, çıkarma ve
|
||||
temizleme kabiliyetine sahip gelişmiş yerleşik son işlem seçenekleri
|
||||
sayesinde Usenet ağından indirmeyi büyük ölçüde kolaylaştırır. Her yerde
|
||||
çalışabilir, bir düzineden fazla dil desteği sunar ve indirme sürecini
|
||||
otomatik hâle getirmeye yardımcı olan birçok araç, uygulama ve hizmet ile
|
||||
birlikte çalışabilir.
|
||||
</p>
|
||||
</description>
|
||||
<keywords>
|
||||
<keyword>usenet</keyword>
|
||||
<keyword>nzb</keyword>
|
||||
<keyword>download</keyword>
|
||||
<keyword>newsreader</keyword>
|
||||
<keyword>binary</keyword>
|
||||
<keyword xml:lang="fr">usenet</keyword>
|
||||
<keyword xml:lang="fr">nzb</keyword>
|
||||
<keyword xml:lang="fr">téléchargement</keyword>
|
||||
<keyword xml:lang="fr">binaires</keyword>
|
||||
<keyword xml:lang="tr">usenet</keyword>
|
||||
<keyword xml:lang="tr">nzb</keyword>
|
||||
<keyword xml:lang="tr">indirme</keyword>
|
||||
</keywords>
|
||||
<categories>
|
||||
<category>Network</category>
|
||||
<category>FileTransfer</category>
|
||||
</categories>
|
||||
<url type="homepage">https://sabnzbd.org</url>
|
||||
<url type="bugtracker">https://github.com/sabnzbd/sabnzbd/issues</url>
|
||||
<url type="vcs-browser">https://github.com/sabnzbd/sabnzbd</url>
|
||||
<url type="contribute">https://github.com/sabnzbd/sabnzbd</url>
|
||||
<url type="translate">https://sabnzbd.org/wiki/translate</url>
|
||||
<url type="donation">https://sabnzbd.org/donate</url>
|
||||
<url type="help">https://sabnzbd.org/wiki/</url>
|
||||
<url type="faq">https://sabnzbd.org/wiki/faq</url>
|
||||
<url type="contact">https://sabnzbd.org/live-chat.html</url>
|
||||
<releases>
|
||||
<release version="5.1.0" date="2026-08-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.1.0</url>
|
||||
</release>
|
||||
<release version="5.0.4" date="2026-06-11" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.4</url>
|
||||
</release>
|
||||
<release version="5.0.3" date="2026-05-15" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.3</url>
|
||||
</release>
|
||||
<release version="5.0.2" date="2026-05-14" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.2</url>
|
||||
</release>
|
||||
<release version="5.0.1" date="2026-05-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.1</url>
|
||||
</release>
|
||||
<release version="5.0.0" date="2026-05-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.0</url>
|
||||
</release>
|
||||
<release version="4.5.5" date="2025-10-24" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.5</url>
|
||||
</release>
|
||||
<release version="4.5.4" date="2025-10-22" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.4</url>
|
||||
</release>
|
||||
<release version="4.5.3" date="2025-08-25" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.3</url>
|
||||
</release>
|
||||
<release version="4.5.2" date="2025-07-09" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.2</url>
|
||||
</release>
|
||||
<release version="4.5.1" date="2025-04-11" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.1</url>
|
||||
</release>
|
||||
<release version="4.5.0" date="2025-04-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.0</url>
|
||||
</release>
|
||||
<release version="4.4.1" date="2024-12-23" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.4.1</url>
|
||||
</release>
|
||||
<release version="4.4.0" date="2024-12-09" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.4.0</url>
|
||||
</release>
|
||||
<release version="4.3.3" date="2024-08-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.3.3</url>
|
||||
</release>
|
||||
<release version="4.3.2" date="2024-05-30" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.3.2</url>
|
||||
</release>
|
||||
<release version="4.3.1" date="2024-05-03" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.3.1</url>
|
||||
</release>
|
||||
</releases>
|
||||
<launchable type="desktop-id">sabnzbd.desktop</launchable>
|
||||
<provides>
|
||||
<mediatype>application/x-nzb</mediatype>
|
||||
<mediatype>application/x-compressed-nzb</mediatype>
|
||||
</provides>
|
||||
<supports>
|
||||
<control>pointing</control>
|
||||
<control>keyboard</control>
|
||||
<control>touch</control>
|
||||
</supports>
|
||||
<recommends>
|
||||
<display_length compare="ge">640</display_length>
|
||||
<internet>always</internet>
|
||||
</recommends>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<developer id="org.sabnzbd">
|
||||
<name>The SABnzbd-Team</name>
|
||||
</developer>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/interface.png</image>
|
||||
<caption>Intuitive interface</caption>
|
||||
<caption xml:lang="fr">Interface intuitive</caption>
|
||||
<caption xml:lang="tr">Sezgisel arayüz</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/night-mode.png</image>
|
||||
<caption>Also comes in Night-mode</caption>
|
||||
<caption xml:lang="fr">Fourni également avec le mode nuit</caption>
|
||||
<caption xml:lang="tr">Gece kipi ile de sunulur</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/add-nzb.png</image>
|
||||
<caption>Add NZB's or use drag-and-drop!</caption>
|
||||
<caption xml:lang="fr">Ajoutez des fichiers NZB ou utilisez le glisser - déposer !</caption>
|
||||
<caption xml:lang="tr">NZB dosyaları ekleyin veya kaydır - bırak kullanın!</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/phone-interface.png</image>
|
||||
<caption>Scales to any screen size</caption>
|
||||
<caption xml:lang="fr">S'adapte à toutes les tailles d'écran</caption>
|
||||
<caption xml:lang="tr">Her ekran boyutuna uyum sağlar</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/history-details.png</image>
|
||||
<caption>Easy overview of all history details</caption>
|
||||
<caption xml:lang="fr">Vue d'ensemble aisée de tous les détails de l'historique</caption>
|
||||
<caption xml:lang="tr">Tarihçenin tüm ayrıntıları için kolay genel bakış</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/phone-extra.png</image>
|
||||
<caption>Every option, on every screen size</caption>
|
||||
<caption xml:lang="fr">Toutes les options, quelle que soit la taille d'écran</caption>
|
||||
<caption xml:lang="tr">Ekran boyutu ne olursa olsun, tüm seçenekler elinizin altında</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/file-lists.png</image>
|
||||
<caption>Manage a job's individual files</caption>
|
||||
<caption xml:lang="fr">Gérez les fichiers individuels d'une tâche</caption>
|
||||
<caption xml:lang="tr">Herhangi bir görevin dosyalarını tek tek yönetin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/set-speedlimit.png</image>
|
||||
<caption>Easy speed limiting</caption>
|
||||
<caption xml:lang="fr">Limitation facile du débit</caption>
|
||||
<caption xml:lang="tr">Kolay hız sınırlaması</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/set-options.png</image>
|
||||
<caption>Quickly change settings</caption>
|
||||
<caption xml:lang="fr">Changement rapide des réglages</caption>
|
||||
<caption xml:lang="tr">Ayarları hızlıca değiştirin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/dashboard.png</image>
|
||||
<caption>Easy system check</caption>
|
||||
<caption xml:lang="fr">Vérification facile du système</caption>
|
||||
<caption xml:lang="tr">Sistemi kolayca kontrol edin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/connections-overview.png</image>
|
||||
<caption>See active connections</caption>
|
||||
<caption xml:lang="fr">Voyez les connexions actives</caption>
|
||||
<caption xml:lang="tr">Etkin bağlantıları görüntüleyin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/skin-settings.png</image>
|
||||
<caption>Customize the interface</caption>
|
||||
<caption xml:lang="fr">Personnalisez l'interface</caption>
|
||||
<caption xml:lang="tr">Arayüzü kişiselleştirin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/tabbed.png</image>
|
||||
<caption>Tabbed-mode</caption>
|
||||
<caption xml:lang="fr">Mode avec onglets</caption>
|
||||
<caption xml:lang="tr">Sekmeli kip</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/set-custom-pause.png</image>
|
||||
<caption>Specify any pause duration</caption>
|
||||
<caption xml:lang="fr">Spécifiez une durée de pause quelconque</caption>
|
||||
<caption xml:lang="tr">Herhangi bir duraklama süresi belirtin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/config.png</image>
|
||||
<caption>Easy configuration</caption>
|
||||
<caption xml:lang="fr">Configuration facile</caption>
|
||||
<caption xml:lang="tr">Kolay yapılandırma</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<content_rating type="oars-1.1"/>
|
||||
<id>org.sabnzbd.sabnzbd</id>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
<name>SABnzbd</name>
|
||||
<summary>Free and easy binary newsreader</summary>
|
||||
<summary xml:lang="fr">Lecteur de news binaire libre et facile à utiliser</summary>
|
||||
<summary xml:lang="tr">Özgür ve kullanımı kolay Usenet ikili okuyucu</summary>
|
||||
<branding>
|
||||
<color type="primary" scheme_preference="light">#e7e7e7</color>
|
||||
<color type="primary" scheme_preference="dark">#444444</color>
|
||||
</branding>
|
||||
<description>
|
||||
<p>
|
||||
SABnzbd is a free and Open Source web-based binary newsreader,
|
||||
with support for the popular nzb file format. It greatly simplifies
|
||||
the process of downloading from Usenet, thanks to a friendly
|
||||
web-based user interface and advanced built-in post-processing
|
||||
options including the ability to automatically verify, repair,
|
||||
extract and clean up downloaded posts. It runs anywhere, comes in
|
||||
over a dozen languages, and integrates with a host of tools, apps
|
||||
and services that help automate the download process.
|
||||
</p>
|
||||
<p xml:lang="fr">
|
||||
SABnzbd est un lecteur binaire de newsgroups libre et gratuit prenant
|
||||
en charge le format nzb très répandu. Il simplifie grandement le processus
|
||||
de téléchargement depuis Usenet grâce à une interface web conviviale
|
||||
et à des options avancées de post-traitement intégrées qui comprennent
|
||||
la capacité à vérifier, réparer, extraire et nettoyer automatiquement
|
||||
les messages téléchargés. Il fonctionne partout, est fourni avec une
|
||||
douzaine de traductions et s'intègre avec de nombreux outils, applications
|
||||
et services qui aident à automatiser le processus de téléchargement.
|
||||
</p>
|
||||
<p xml:lang="tr">
|
||||
SABnzbd, popüler nzb biçimini destekleyen özgür ve ücretsiz bir ikili
|
||||
haber grupları okuyucusudur. Kullanıcı dostu Web tabanlı arayüzü ve
|
||||
indirilen mesajları otomatik olarak doğrulama, tamir etme, çıkarma ve
|
||||
temizleme kabiliyetine sahip gelişmiş yerleşik son işlem seçenekleri
|
||||
sayesinde Usenet ağından indirmeyi büyük ölçüde kolaylaştırır. Her yerde
|
||||
çalışabilir, bir düzineden fazla dil desteği sunar ve indirme sürecini
|
||||
otomatik hâle getirmeye yardımcı olan birçok araç, uygulama ve hizmet ile
|
||||
birlikte çalışabilir.
|
||||
</p>
|
||||
</description>
|
||||
<keywords>
|
||||
<keyword>usenet</keyword>
|
||||
<keyword>nzb</keyword>
|
||||
<keyword>download</keyword>
|
||||
<keyword>newsreader</keyword>
|
||||
<keyword>binary</keyword>
|
||||
<keyword xml:lang="fr">usenet</keyword>
|
||||
<keyword xml:lang="fr">nzb</keyword>
|
||||
<keyword xml:lang="fr">téléchargement</keyword>
|
||||
<keyword xml:lang="fr">binaires</keyword>
|
||||
<keyword xml:lang="tr">usenet</keyword>
|
||||
<keyword xml:lang="tr">nzb</keyword>
|
||||
<keyword xml:lang="tr">indirme</keyword>
|
||||
</keywords>
|
||||
<categories>
|
||||
<category>Network</category>
|
||||
<category>FileTransfer</category>
|
||||
</categories>
|
||||
<url type="homepage">https://sabnzbd.org</url>
|
||||
<url type="bugtracker">https://github.com/sabnzbd/sabnzbd/issues</url>
|
||||
<url type="vcs-browser">https://github.com/sabnzbd/sabnzbd</url>
|
||||
<url type="contribute">https://github.com/sabnzbd/sabnzbd</url>
|
||||
<url type="translate">https://sabnzbd.org/wiki/translate</url>
|
||||
<url type="donation">https://sabnzbd.org/donate</url>
|
||||
<url type="help">https://sabnzbd.org/wiki/</url>
|
||||
<url type="faq">https://sabnzbd.org/wiki/faq</url>
|
||||
<url type="contact">https://sabnzbd.org/live-chat.html</url>
|
||||
<releases>
|
||||
<release version="5.1.1" date="2026-08-18" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.1.1</url>
|
||||
</release>
|
||||
<release version="5.1.0" date="2026-08-10" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.1.0</url>
|
||||
</release>
|
||||
<release version="5.0.4" date="2026-06-11" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.4</url>
|
||||
</release>
|
||||
<release version="5.0.3" date="2026-05-15" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.3</url>
|
||||
</release>
|
||||
<release version="5.0.2" date="2026-05-14" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.2</url>
|
||||
</release>
|
||||
<release version="5.0.1" date="2026-05-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.1</url>
|
||||
</release>
|
||||
<release version="5.0.0" date="2026-05-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/5.0.0</url>
|
||||
</release>
|
||||
<release version="4.5.5" date="2025-10-24" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.5</url>
|
||||
</release>
|
||||
<release version="4.5.4" date="2025-10-22" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.4</url>
|
||||
</release>
|
||||
<release version="4.5.3" date="2025-08-25" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.3</url>
|
||||
</release>
|
||||
<release version="4.5.2" date="2025-07-09" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.2</url>
|
||||
</release>
|
||||
<release version="4.5.1" date="2025-04-11" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.1</url>
|
||||
</release>
|
||||
<release version="4.5.0" date="2025-04-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.5.0</url>
|
||||
</release>
|
||||
<release version="4.4.1" date="2024-12-23" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.4.1</url>
|
||||
</release>
|
||||
<release version="4.4.0" date="2024-12-09" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.4.0</url>
|
||||
</release>
|
||||
<release version="4.3.3" date="2024-08-01" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.3.3</url>
|
||||
</release>
|
||||
<release version="4.3.2" date="2024-05-30" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.3.2</url>
|
||||
</release>
|
||||
<release version="4.3.1" date="2024-05-03" type="stable">
|
||||
<url type="details">https://github.com/sabnzbd/sabnzbd/releases/tag/4.3.1</url>
|
||||
</release>
|
||||
</releases>
|
||||
<launchable type="desktop-id">sabnzbd.desktop</launchable>
|
||||
<provides>
|
||||
<mediatype>application/x-nzb</mediatype>
|
||||
<mediatype>application/x-compressed-nzb</mediatype>
|
||||
</provides>
|
||||
<supports>
|
||||
<control>pointing</control>
|
||||
<control>keyboard</control>
|
||||
<control>touch</control>
|
||||
</supports>
|
||||
<recommends>
|
||||
<display_length compare="ge">640</display_length>
|
||||
<internet>always</internet>
|
||||
</recommends>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<developer id="org.sabnzbd">
|
||||
<name>The SABnzbd-Team</name>
|
||||
</developer>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/interface.png</image>
|
||||
<caption>Intuitive interface</caption>
|
||||
<caption xml:lang="fr">Interface intuitive</caption>
|
||||
<caption xml:lang="tr">Sezgisel arayüz</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/night-mode.png</image>
|
||||
<caption>Also comes in Night-mode</caption>
|
||||
<caption xml:lang="fr">Fourni également avec le mode nuit</caption>
|
||||
<caption xml:lang="tr">Gece kipi ile de sunulur</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/add-nzb.png</image>
|
||||
<caption>Add NZB's or use drag-and-drop!</caption>
|
||||
<caption xml:lang="fr">Ajoutez des fichiers NZB ou utilisez le glisser - déposer !</caption>
|
||||
<caption xml:lang="tr">NZB dosyaları ekleyin veya kaydır - bırak kullanın!</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/phone-interface.png</image>
|
||||
<caption>Scales to any screen size</caption>
|
||||
<caption xml:lang="fr">S'adapte à toutes les tailles d'écran</caption>
|
||||
<caption xml:lang="tr">Her ekran boyutuna uyum sağlar</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/history-details.png</image>
|
||||
<caption>Easy overview of all history details</caption>
|
||||
<caption xml:lang="fr">Vue d'ensemble aisée de tous les détails de l'historique</caption>
|
||||
<caption xml:lang="tr">Tarihçenin tüm ayrıntıları için kolay genel bakış</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/phone-extra.png</image>
|
||||
<caption>Every option, on every screen size</caption>
|
||||
<caption xml:lang="fr">Toutes les options, quelle que soit la taille d'écran</caption>
|
||||
<caption xml:lang="tr">Ekran boyutu ne olursa olsun, tüm seçenekler elinizin altında</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/file-lists.png</image>
|
||||
<caption>Manage a job's individual files</caption>
|
||||
<caption xml:lang="fr">Gérez les fichiers individuels d'une tâche</caption>
|
||||
<caption xml:lang="tr">Herhangi bir görevin dosyalarını tek tek yönetin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/set-speedlimit.png</image>
|
||||
<caption>Easy speed limiting</caption>
|
||||
<caption xml:lang="fr">Limitation facile du débit</caption>
|
||||
<caption xml:lang="tr">Kolay hız sınırlaması</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/set-options.png</image>
|
||||
<caption>Quickly change settings</caption>
|
||||
<caption xml:lang="fr">Changement rapide des réglages</caption>
|
||||
<caption xml:lang="tr">Ayarları hızlıca değiştirin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/dashboard.png</image>
|
||||
<caption>Easy system check</caption>
|
||||
<caption xml:lang="fr">Vérification facile du système</caption>
|
||||
<caption xml:lang="tr">Sistemi kolayca kontrol edin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/connections-overview.png</image>
|
||||
<caption>See active connections</caption>
|
||||
<caption xml:lang="fr">Voyez les connexions actives</caption>
|
||||
<caption xml:lang="tr">Etkin bağlantıları görüntüleyin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/skin-settings.png</image>
|
||||
<caption>Customize the interface</caption>
|
||||
<caption xml:lang="fr">Personnalisez l'interface</caption>
|
||||
<caption xml:lang="tr">Arayüzü kişiselleştirin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/tabbed.png</image>
|
||||
<caption>Tabbed-mode</caption>
|
||||
<caption xml:lang="fr">Mode avec onglets</caption>
|
||||
<caption xml:lang="tr">Sekmeli kip</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/set-custom-pause.png</image>
|
||||
<caption>Specify any pause duration</caption>
|
||||
<caption xml:lang="fr">Spécifiez une durée de pause quelconque</caption>
|
||||
<caption xml:lang="tr">Herhangi bir duraklama süresi belirtin</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/config.png</image>
|
||||
<caption>Easy configuration</caption>
|
||||
<caption xml:lang="fr">Configuration facile</caption>
|
||||
<caption xml:lang="tr">Kolay yapılandırma</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<content_rating type="oars-1.1"/>
|
||||
</component>
|
||||
+2
-2
@@ -533,8 +533,8 @@ def delayed_startup_actions():
|
||||
# aren't on 24/7 and typically don't benefit from the daily scheduled call at midnight
|
||||
sabnzbd.database.scheduled_history_purge()
|
||||
|
||||
# Purge links older than 3 days
|
||||
sabnzbd.rss.expired_purge()
|
||||
# Drop leftover records of feeds that are no longer configured
|
||||
sabnzbd.rss.purge_removed_feeds()
|
||||
|
||||
# Start SSDP and Bonjour if SABnzbd isn't listening on localhost only
|
||||
if sabnzbd.cfg.enable_broadcast() and not misc.is_localhost(cfg.web_host()):
|
||||
|
||||
Regular → Executable
File mode changed.
+21
-16
@@ -30,6 +30,7 @@ import socket
|
||||
import ssl
|
||||
import functools
|
||||
import copy
|
||||
import secrets
|
||||
from random import randint
|
||||
from xml.sax.saxutils import escape
|
||||
from Cheetah.Template import Template
|
||||
@@ -262,8 +263,10 @@ def check_hostname():
|
||||
return False
|
||||
|
||||
|
||||
# Create a more unique ID for each instance
|
||||
COOKIE_SECRET = str(randint(1000, 100000) * os.getpid())
|
||||
# Per-process secret used to sign login cookies. Regenerated on every start,
|
||||
# so sessions do not survive a restart (as before), but with enough entropy
|
||||
# that a captured cookie cannot be brute-forced back to the secret.
|
||||
COOKIE_SECRET = secrets.token_hex(32)
|
||||
|
||||
|
||||
def remote_ip_from_xff(xff_ips: list[str]) -> str:
|
||||
@@ -295,23 +298,25 @@ def set_login_cookie(remove=False, remember_me=False):
|
||||
else:
|
||||
remote_ip = cherrypy.request.remote.ip
|
||||
|
||||
cookie_str = utob(str(salt) + remote_ip + COOKIE_SECRET)
|
||||
cherrypy.response.cookie["login_cookie"] = hashlib.sha1(cookie_str).hexdigest()
|
||||
cherrypy.response.cookie["login_cookie"]["path"] = "/"
|
||||
cherrypy.response.cookie["login_cookie"]["httponly"] = 1
|
||||
cherrypy.response.cookie["login_salt"] = salt
|
||||
cherrypy.response.cookie["login_salt"]["path"] = "/"
|
||||
cherrypy.response.cookie["login_salt"]["httponly"] = 1
|
||||
|
||||
# If we want to be remembered
|
||||
if remember_me:
|
||||
cherrypy.response.cookie["login_cookie"]["max-age"] = 3600 * 24 * 14
|
||||
cherrypy.response.cookie["login_salt"]["max-age"] = 3600 * 24 * 14
|
||||
|
||||
# To remove
|
||||
if remove:
|
||||
# Never emit a valid cookie/salt pair on logout
|
||||
cherrypy.response.cookie["login_cookie"] = ""
|
||||
cherrypy.response.cookie["login_salt"] = ""
|
||||
cherrypy.response.cookie["login_cookie"]["expires"] = 0
|
||||
cherrypy.response.cookie["login_salt"]["expires"] = 0
|
||||
else:
|
||||
cookie_str = utob(str(salt) + remote_ip + COOKIE_SECRET)
|
||||
cherrypy.response.cookie["login_cookie"] = hashlib.sha1(cookie_str).hexdigest()
|
||||
cherrypy.response.cookie["login_salt"] = salt
|
||||
# If we want to be remembered
|
||||
if remember_me:
|
||||
cherrypy.response.cookie["login_cookie"]["max-age"] = 3600 * 24 * 14
|
||||
cherrypy.response.cookie["login_salt"]["max-age"] = 3600 * 24 * 14
|
||||
|
||||
cherrypy.response.cookie["login_cookie"]["path"] = "/"
|
||||
cherrypy.response.cookie["login_cookie"]["httponly"] = 1
|
||||
cherrypy.response.cookie["login_salt"]["path"] = "/"
|
||||
cherrypy.response.cookie["login_salt"]["httponly"] = 1
|
||||
|
||||
|
||||
def check_login_cookie():
|
||||
|
||||
+35
-9
@@ -621,10 +621,10 @@ class RSSRepository:
|
||||
"""
|
||||
Expire G/B links that are not in new_jobs (mark them 'X')
|
||||
|
||||
Expired links older than 3 days are removed
|
||||
Expired links older than 7 days are removed
|
||||
"""
|
||||
now = datetime.datetime.now(datetime.timezone.utc)
|
||||
limit = int((now - datetime.timedelta(days=3)).timestamp())
|
||||
limit = int((now - datetime.timedelta(days=7)).timestamp())
|
||||
|
||||
if new_urls:
|
||||
# Create temporary table for all new URLs
|
||||
@@ -635,6 +635,22 @@ class RSSRepository:
|
||||
placeholders = ",".join(["(?)"] * len(batch))
|
||||
self.db.execute(f"INSERT INTO temp_urls(url) VALUES {placeholders}", batch)
|
||||
|
||||
# Refresh seen_at for everything still listed in the feed. Entries in a terminal
|
||||
# state are skipped during evaluation, so this is the only place they are touched
|
||||
# and without it they would be purged while still present in the feed.
|
||||
self.db.execute(
|
||||
"""
|
||||
UPDATE rss
|
||||
SET seen_at = ?
|
||||
WHERE feed = ?
|
||||
AND url IN (SELECT url FROM temp_urls)
|
||||
""",
|
||||
(
|
||||
int(datetime.datetime.now(datetime.timezone.utc).timestamp()),
|
||||
feed,
|
||||
),
|
||||
)
|
||||
|
||||
# Update rss to mark G/B not in temp_urls as X
|
||||
self.db.execute(
|
||||
"""
|
||||
@@ -686,6 +702,7 @@ class RSSRepository:
|
||||
def get_feed_jobs(
|
||||
self,
|
||||
feed: Optional[str] = None,
|
||||
archive: Optional[bool] = None,
|
||||
search: Optional[str] = None,
|
||||
states: Optional[list[RSSState]] = None,
|
||||
) -> Generator[ResolvedEntry, Any, None]:
|
||||
@@ -693,6 +710,11 @@ class RSSRepository:
|
||||
command_args = []
|
||||
where_clauses = []
|
||||
|
||||
if archive:
|
||||
where_clauses.append("archived_at IS NOT NULL")
|
||||
else:
|
||||
where_clauses.append("archived_at IS NULL")
|
||||
|
||||
if search is not None:
|
||||
where_clauses.append("title LIKE ?")
|
||||
command_args.append(convert_search(search))
|
||||
@@ -847,10 +869,13 @@ class RSSRepository:
|
||||
)
|
||||
return bool(self.db.cursor.fetchone()["found"])
|
||||
|
||||
def expired_purge(self):
|
||||
"""Removed expired links from all feeds"""
|
||||
def purge_removed_feeds(self):
|
||||
"""Remove all records of feeds that are no longer configured"""
|
||||
configured = set(config.get_rss())
|
||||
for feed in self.get_feeds():
|
||||
self.remove_obsolete(feed)
|
||||
if feed not in configured:
|
||||
logging.debug("Purging records of removed feed %s", feed)
|
||||
self.clear_feed(feed)
|
||||
|
||||
def import_rss_records(self):
|
||||
"""Migrate old RSS database"""
|
||||
@@ -998,7 +1023,8 @@ class RSSReader:
|
||||
if new_downloads and cfg.email_rss() and not force:
|
||||
emailer.rss_mail(feed, new_downloads)
|
||||
|
||||
repo.remove_obsolete(feed, new_links, purge_downloaded=True)
|
||||
if readout:
|
||||
repo.remove_obsolete(feed, new_links, purge_downloaded=True)
|
||||
|
||||
return ""
|
||||
|
||||
@@ -1266,10 +1292,10 @@ def special_rss_site(url: str) -> bool:
|
||||
return bool(cfg.rss_filenames() or match_str(url, cfg.rss_odd_titles()))
|
||||
|
||||
|
||||
def expired_purge():
|
||||
"""Purge links older than 3 days"""
|
||||
def purge_removed_feeds():
|
||||
"""Purge records of feeds that are no longer configured"""
|
||||
with rss_repository() as repo:
|
||||
repo.expired_purge()
|
||||
repo.purge_removed_feeds()
|
||||
|
||||
|
||||
@contextmanager
|
||||
|
||||
+2
-2
@@ -6,5 +6,5 @@
|
||||
# You MUST use double quotes (so " and not ')
|
||||
# Do not forget to update the appdata file for every major release!
|
||||
|
||||
__version__ = "5.1.0RC2"
|
||||
__baseline__ = "unknown"
|
||||
__version__ = "5.1.1"
|
||||
__baseline__ = "57abc3215cf9e7b769aa9331066bd265e2fe1909"
|
||||
@@ -228,3 +228,29 @@ class TestInterfaceFunctions:
|
||||
assert interface.remote_ip_from_xff(xff_ips) is expected_result
|
||||
|
||||
_func()
|
||||
|
||||
@pytest.mark.config({"verify_xff_header": False})
|
||||
def test_logout_does_not_leak_valid_cookie(self):
|
||||
"""A logout must never emit a cookie/salt pair that passes check_login_cookie.
|
||||
The Set-Cookie header is readable regardless of its expiry, so leaking valid
|
||||
values there is an authentication bypass (harvest via logout, then replay)."""
|
||||
cherrypy.request.remote.ip = "10.11.12.13"
|
||||
cherrypy.request.headers.update({"X-Forwarded-For": None})
|
||||
|
||||
# Sanity check: a real login produces a cookie that validates
|
||||
cherrypy.response.cookie.clear()
|
||||
interface.set_login_cookie()
|
||||
cherrypy.request.cookie["login_cookie"] = cherrypy.response.cookie["login_cookie"].value
|
||||
cherrypy.request.cookie["login_salt"] = cherrypy.response.cookie["login_salt"].value
|
||||
assert interface.check_login_cookie() is True
|
||||
|
||||
# Logout must blank out the values, not emit a working hash/salt
|
||||
cherrypy.response.cookie.clear()
|
||||
interface.set_login_cookie(remove=True)
|
||||
assert cherrypy.response.cookie["login_cookie"].value == ""
|
||||
assert cherrypy.response.cookie["login_salt"].value == ""
|
||||
|
||||
# Replaying whatever the logout response carried must fail authentication
|
||||
cherrypy.request.cookie["login_cookie"] = cherrypy.response.cookie["login_cookie"].value
|
||||
cherrypy.request.cookie["login_salt"] = cherrypy.response.cookie["login_salt"].value
|
||||
assert interface.check_login_cookie() is False
|
||||
+129
-3
@@ -734,9 +734,15 @@ class TestRSS:
|
||||
assert job_after_clear.archived_at is not None
|
||||
assert job_after_clear.is_downloaded
|
||||
|
||||
# get_jobs should return all jobs for a feed
|
||||
# get_jobs should return all non-archived jobs for a feed
|
||||
jobs_from_get_jobs = list(repo.get_feed_jobs(feed=feed))
|
||||
assert {j.link for j in jobs_from_get_jobs} == set(links_by_feed[feed])
|
||||
assert {j.link for j in jobs_from_get_jobs} == {
|
||||
job_link for job_link in links_by_feed[feed] if job_link is not link
|
||||
}
|
||||
|
||||
# get_jobs archive should return only archived jobs for a feed
|
||||
jobs_from_get_jobs = list(repo.get_feed_jobs(feed=feed, archive=True))
|
||||
assert {j.link for j in jobs_from_get_jobs} == {link}
|
||||
|
||||
# is_duplicate should detect similar jobs in other feeds
|
||||
duplicate_candidate = ResolvedEntry(
|
||||
@@ -775,7 +781,7 @@ class TestRSS:
|
||||
|
||||
now = datetime.datetime.now(datetime.timezone.utc)
|
||||
age = now - datetime.timedelta(weeks=52)
|
||||
old_seen_at = now - datetime.timedelta(days=4)
|
||||
old_seen_at = now - datetime.timedelta(days=8)
|
||||
new_seen_at = now - datetime.timedelta(days=1)
|
||||
|
||||
# Old good item that should be kept because it is part of the new_urls set
|
||||
@@ -1039,3 +1045,123 @@ class TestRSS:
|
||||
|
||||
# Shared link must only appear once
|
||||
assert links == {shared_link, a_only_link, b_only_link}
|
||||
|
||||
def test_purge_removed_feeds_only_drops_unconfigured_feeds(self, tmp_rss):
|
||||
"""Records should only be dropped for feeds that are no longer configured."""
|
||||
repo, _reader = tmp_rss
|
||||
configured_feed = "ConfiguredFeed"
|
||||
removed_feed = "RemovedFeed"
|
||||
|
||||
self.setup_rss(configured_feed, "http://example.test/rss.xml")
|
||||
|
||||
age = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(weeks=52)
|
||||
old_seen_at = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=30)
|
||||
for feed in (configured_feed, removed_feed):
|
||||
repo.upsert(
|
||||
ResolvedEntry(
|
||||
feed=feed,
|
||||
link=f"http://example.test/{feed}/job",
|
||||
title=f"{feed} job",
|
||||
infourl=None,
|
||||
size=10,
|
||||
age=age,
|
||||
seen_at=old_seen_at,
|
||||
season=1,
|
||||
episode=1,
|
||||
category=None,
|
||||
state=RSSState.GOOD,
|
||||
)
|
||||
)
|
||||
|
||||
repo.purge_removed_feeds()
|
||||
|
||||
assert set(repo.get_feeds()) == {configured_feed}
|
||||
|
||||
def test_process_feed_without_readout_keeps_stored_jobs(self, httpserver: HTTPServer, tmp_rss):
|
||||
"""Replaying stored jobs (readout=False) must not expire or purge anything."""
|
||||
repo, reader = tmp_rss
|
||||
feed_name = "NoReadoutFeed"
|
||||
feed_xml = """<?xml version="1.0" encoding="utf-8"?>
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<title>NoReadout</title>
|
||||
<item>
|
||||
<title>New.Show.S01E01.720p</title>
|
||||
<link>http://example.test/no-readout/current</link>
|
||||
<guid>http://example.test/info/no-readout-current</guid>
|
||||
<category>tv</category>
|
||||
<pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
"""
|
||||
httpserver.expect_request("/rss_no_readout.xml").respond_with_data(feed_xml, content_type="application/rss+xml")
|
||||
self.setup_rss(feed_name, httpserver.url_for("/rss_no_readout.xml"))
|
||||
|
||||
now = datetime.datetime.now(datetime.timezone.utc)
|
||||
old_url = "http://example.test/no-readout/expired"
|
||||
repo.upsert(
|
||||
ResolvedEntry(
|
||||
feed=feed_name,
|
||||
link=old_url,
|
||||
title="Old.Show.S01E01.720p",
|
||||
infourl=None,
|
||||
size=10,
|
||||
age=now - datetime.timedelta(weeks=52),
|
||||
seen_at=now - datetime.timedelta(days=8),
|
||||
season=1,
|
||||
episode=1,
|
||||
category=None,
|
||||
state=RSSState.EXPIRED,
|
||||
)
|
||||
)
|
||||
|
||||
assert reader.process_feed(feed_name, readout=False) == ""
|
||||
assert repo.find_job_by_url(feed_name, old_url) is not None
|
||||
|
||||
# A real readout does not find the link anymore, so it gets purged
|
||||
assert reader.process_feed(feed_name, readout=True) == ""
|
||||
assert repo.find_job_by_url(feed_name, old_url) is None
|
||||
|
||||
def test_downloaded_item_still_in_feed_is_not_redownloaded(self, httpserver: HTTPServer, tmp_rss, mocker):
|
||||
"""An item that stays in the feed must survive the retention period and not be grabbed twice."""
|
||||
repo, reader = tmp_rss
|
||||
feed_name = "LongLivedFeed"
|
||||
link = "http://example.test/long-lived"
|
||||
feed_xml = f"""<?xml version="1.0" encoding="utf-8"?>
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<title>LongLived</title>
|
||||
<item>
|
||||
<title>Show.S01E01.720p</title>
|
||||
<link>{link}</link>
|
||||
<guid>http://example.test/info/long-lived</guid>
|
||||
<category>tv</category>
|
||||
<pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
"""
|
||||
httpserver.expect_request("/rss_long_lived.xml").respond_with_data(feed_xml, content_type="application/rss+xml")
|
||||
self.setup_rss(feed_name, httpserver.url_for("/rss_long_lived.xml"))
|
||||
|
||||
add_url = mocker.patch("sabnzbd.urlgrabber.add_url")
|
||||
assert reader.process_feed(feed_name, download=True, force=True) == ""
|
||||
assert add_url.call_count == 1
|
||||
assert repo.find_job_by_url(feed_name, link).state is RSSState.DOWNLOADED
|
||||
|
||||
# Pretend the item was downloaded longer ago than the retention period, while
|
||||
# it is still being served by the feed
|
||||
stale = int((datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=30)).timestamp())
|
||||
repo.db.execute("UPDATE rss SET seen_at = ? WHERE feed = ?", (stale, feed_name))
|
||||
|
||||
# Still being listed should refresh seen_at instead of purging the job
|
||||
assert reader.process_feed(feed_name, download=True) == ""
|
||||
job = repo.find_job_by_url(feed_name, link)
|
||||
assert job is not None
|
||||
assert job.state is RSSState.DOWNLOADED
|
||||
assert job.seen_at.timestamp() > stale
|
||||
|
||||
# And it must not be picked up as a new job on the next scans
|
||||
assert reader.process_feed(feed_name, download=True) == ""
|
||||
assert add_url.call_count == 1
|
||||
Reference in new issue
Block a user