Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backend cann't parse new response from tracker for newly generated key #78

Closed
josecelano opened this issue Nov 4, 2022 · 8 comments · Fixed by #90
Closed

Backend cann't parse new response from tracker for newly generated key #78

josecelano opened this issue Nov 4, 2022 · 8 comments · Fixed by #90

Comments

@josecelano
Copy link
Member

The tracker has an endpoint to generate new keys.

The response for that endpoint was like:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until": 1674804892
}

But now is like this:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until": 
    { 
      "secs": 1674804892, 
      "nanos": 423855037
    }
}

The change was introduced in this commit cab093c026cf253ba6f7208211953a25b3d1c91b by @da2ce7.

The struct:

pub struct AuthKey {
    pub key: String,
    pub valid_until: Option<u64>,
 }

changed to:

pub struct AuthKey {
    pub key: String,
    pub valid_until: Option<DurationSinceUnixEpoch>,
}

Since we automatically build the json objects exposed in the API, that change was exposed to API consumers.

The backend cannot parse the new response, and keys are not stored in the table torrust_tracker_keys. So the function TrackerService::retrieve_new_tracker_key is called every time we use the TrackerService.

@josecelano josecelano added the Bug Incorrect Behavior label Nov 4, 2022
@josecelano
Copy link
Member Author

I've temporarily fixed the PR I'm working on.

@josecelano
Copy link
Member Author

I suppose we should revert the API change instead of changing the backend. It does not make sense to return the nanoseconds.

@da2ce7
Copy link
Contributor

da2ce7 commented Nov 4, 2022

@josecelano Woops! Makes it obvious that we need more endpoint tests... Or better: We should use json schemas with validation!

I think that the new format is better, however we should remove the nano field.

Something like:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until": 
    { 
      "secs": 1674804892
    }
}

@josecelano
Copy link
Member Author

@josecelano Woops! Makes it obvious that we need more endpoint tests... Or better: We should use json schemas with validation!

I think that the new format is better, however we should remove the nano field.

Something like:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until": 
    { 
      "secs": 1674804892
    }
}

@da2ce7 yes, I think we could start adding a couple of high-level tests to catch as many regression bugs as possible.

Regarding the solution, maybe we can use struts instead of just converting whatever the struct is into a json:

// POST /api/key/:seconds_valid
// Generate new key
let t5 = tracker.clone();
let create_key = filters::method::post()
    .and(filters::path::path("key"))
    .and(filters::path::param())
    .and(filters::path::end())
    .map(move |seconds_valid: u64| {
        let tracker = t5.clone();
        (seconds_valid, tracker)
    })
    .and_then(|(seconds_valid, tracker): (u64, Arc<TorrentTracker>)| async move {
        match tracker.generate_auth_key(Duration::from_secs(seconds_valid)).await {
            Ok(auth_key) => Ok(warp::reply::json(&auth_key)),
            Err(..) => Err(warp::reject::custom(ActionStatus::Err {
                reason: "failed to generate key".into(),
            })),
        }
    });

We can change the converter warp::reply::json(&auth_key) and make it explicit.

That forces you to update the struct representing the json.

pub struct AuthKey {
    pub key: String,
    pub valid_until: Option<DurationSinceUnixEpoch>,
}

pub struct AuthKetDto {
    pub key: String,
    pub valid_until: i64
}

impl AuthKetDto {
    pub fn fromAuthKey(auth_key: &AuthKey) -> Self {
        let valid_until = match ...
        Self {
            key: auth_key.key;
            valid_until
        }   
    }
}

And then you can change this code:

warp::reply::json(&auth_key)

by

AuthKetDto::from(&auth_key).to_json() // or with a converter or whatever ...

Frameworks use that magic so you can change models and endpoint change automatically. I think for fast prototyping is OK, but I prefer to change it manually for stable APIs in production.

I think we can research for API contracts with strict types (for example https://github.com/flock-community/zod-endpoints).

With the solution above, I think we could be sure the endpoint is returning a given type. Some years ago, I went to a talk where they explained how they used the same types in the backend and front with Typescript to enforce the contract. I this the contract were those types, and they were located in an independent package used by the back and front.

In fact, it forces the backend to use a concrete version of the "contract", and it's a way for versioning the API, which is something we also have to think about how to solve.

I suppose that solution makes it harder to have endpoints that can respond to different versions of the API, because you cannot install different versions of the contract. The package should contain all the versions in a way that the API version and the package version are not the same. This solution is probably better for internal APIs.

NOTE about terminology:

  • Internal API: when you are the consumer of your API. For example, an API for your SPA.
  • External API: when you do not know your consumers.

I suppose we are in the second case, as we discussed some weeks ago.

And finally, regarding the json schema you proposed, I prefer this one:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until_timestamp": 1674804892
}

I generally like putting a suffix with the units (seconds, meters, UTC, ...).

In your case, it might be confusing if we refer to the duration in seconds (although that would be valid_for instead of valid_until).

But I think using the _timestamp prefix is clearer and implies we are using seconds. And having only one field, I do not see the need to add an extra level.

On the other hand, I have the feeling that datetime in UTC is the most standard way to represent time and is more readable. Json is supposed to be readable by humans. With a datetime maybe you do not even need to add a prefix:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until": "2015-05-22T14:56:28.000Z"
}

because it's obvious that it's a date.

@da2ce7
Copy link
Contributor

da2ce7 commented Nov 6, 2022

Yes, this format is the best. Date-Times should be transferred in UTC format, not the internal Unix format.

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until": "2015-05-22T14:56:28.000Z"
}

josecelano added a commit that referenced this issue Nov 30, 2022
5a7d875 feat: [#56] console command to import tracker stats for all torrents (Jose Celano)
19d054e refactor: [#56] rename test mods to follow prod mods (Jose Celano)
e8d984d refactor: [#56] rename destiny DB to target DB (Jose Celano)
b400962 fix: format (Jose Celano)
8b761c8 feat: [#56] keep category id in DB migration script (Jose Celano)
b29d4d7 fix: [#56] db migration for imported users (Jose Celano)
38fee53 test: [#56] new test for password verification (Jose Celano)
b9a8bf9 fix: [#56] remove comment (Jose Celano)
e1790f6 refactor: [#56] extract mods in upgrader (Jose Celano)
e23d948 refactor: remove duplication in tests (Jose Celano)
ee01e7b test: [#56] for torrent files table in upgrader (new case) (Jose Celano)
afffaef tests: [#56] for torrents files table in upgrader (Jose Celano)
82b84a3 refactor: [#56] extract test configuration (Jose Celano)
750969d refactor: [#56] rename methods (Jose Celano)
0063289 tests: [#56] for torrents info and announce urls tables in upgrader (Jose Celano)
cd95987 refactor: [#56] rename mod and variables (Jose Celano)
f0f581f tests: [#56] for torrents table in upgrader (Jose Celano)
eef980c tests: [#56] for tracker keys table in upgrader (Jose Celano)
8d74e66 tests: [#56] for users profile and auth tables in upgrader (Jose Celano)
0a58b6c fix: [#56] bio and avatar is user profile should be NULL for imported users (Jose Celano)
5d0def2 refactor: [#56] tests for upgrader (Jose Celano)
f993107 tests: [#56] for users table in upgrader (Jose Celano)
6188b10 refactor: extract mod sqlite_v1_0_0 in tests (Jose Celano)
44927e5 test: [#56] WIP. scaffolding to test upgrader command (Jose Celano)
7f0a7ea fix: open source db in read-only mode in upgarder (Jose Celano)
217fae2 feat: [#56] take source DB in upgrader command from args (Jose Celano)
aabc3ef feat: the upgrader command takes args (Jose Celano)
693994f feat: add new dependency text_colorizer (Jose Celano)
f620e05 fix: [#56] announce list has precedence over announce (Jose Celano)
309e141 fix: take torrent private flag from torrent file (Jose Celano)
72dc139 refactor: reformat sql queries (Jose Celano)
6bb4c53 refactor: extract struct TorrentRecordV2 (Jose Celano)
b9bf405 feat: [#56] improve command output (Jose Celano)
7152654 refactor: [#56] rename structs for DB records (Jose Celano)
99edf52 feat: imported users have importation date instead of registrataion date (Jose Celano)
21174d4 feat: [#56] trasnfer torrents (4/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
8bdf32f feat: [#56] trasnfer torrents (3/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
3fea6ea feat: [#56] trasnfer torrents (2/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
03e4bef feat: [#56] remove unused scripts and write basic upgrage guide (Jose Celano)
0b3aefa feat: [#56] transfer torrents (1/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
8d26faa fix: [#78] parsing keys from tracker (Jose Celano)
35f1e37 fix: [#56} default user registration date with time (Jose Celano)
dd949fa feat: [#56] transfer tracker keys from v1.0.0 to v2.0.0 (Jose Celano)
d9b4e87 feat: [#56] transfer user password from v1.0.0 to v2.0.0 (Jose Celano)
01921ed fix: [#56] triggering recompilation on migration changes (Jose Celano)
cf09283 docs: [#56] update README for integration tests (Jose Celano)
d1059f5 feat: [#56] trasnfer user data from v1.0.0 to v2.0.0 (Jose Celano)
d590972 refactor: [#56] move upgrader from main upgrade mod to specific version upgrader mod (Jose Celano)
996c7d1 refactor: [#56] rename command al dirs (Jose Celano)
b92fb08 feat: [#56] transfer categories from db v1.0.0 to v2.0.0 (Jose Celano)
7513df0 refactor: add scaffolding for database migration command (Jose Celano)
5d6dec0 refactor: allow adding more binaries (Jose Celano)
c3414da feat: add target dir to .gitignore (Jose Celano)

Pull request description:

  Depends on: #87

  I've created the basic scaffolding of the command. My plan is:

  - Migrate all the table records.
  - Insert torrents in DB from `uploads` dir.

  Potential problems are:

  - AUTOINCREMENTS
  - Foreign keys

  **UPDATE 2022-11-30**

  ### Tasks

  - [x] Transfer `torrent_categories`
  - [x] Transfer `torrent_user`
  - [x] Allow login for the transferred users using the Pbkdf2 for hashing the password
  - [x] Use date and time in `today_iso8601` function instead of only the date
  - [x] Transfer `torrent_tracker_keys`
  - [x] Remove unused content from dir `upgrades`. We do not need the MySQL stuff for this migration. There was no MySQL support for version `v1.0.0`
  - [x] Transfer `torrent_torrents`. See below the subtasks for this task
  - [x] Transfer `torrent_torrent_files`. It was not used in `v1.0.0`
  - [x] Make `registration_date` optional and leave it empty for imported users
  - [x] Add a new DB field `imported_date` to the `torrust_users` table with the importation date for user records imported with this command
  - [x] Refactor
  - [x] Add automated tests
  - [x] Intensive testing
  - [x] Write documentation explaining how to upgrade
  - [x] Rename `destiny` DB to `target` DB.

  ### Subtasks from issue #84

  This rework is needed because @ldpr found a bug in the current version that affects the upgrader. We have to fix that bug and update the "upgrader".
  - [x] Fix issue #84
  - [x] Rework: remove the `torrust_torrent_tracker_stats::tracker_url` column. **DISCARDED**.
  - [x] Populate table `torrust_torrent_tracker_stats` with one record per torrent.

  ### Transfer torrents subtasks

  - [x] Fill table `torrust_torrents`
  - [x] Fill table `torrust_torrent_files`
  - [x] Fill table `torrust_torrent_announce_urls`
  - [x] Fill table `torrust_torrent_info`

  ### Testing subtasks

  Assertions for integration test:

  - [x] `torrust_users` table
  - [x] `torrust_user_authentication` table
  - [x] `torrust_user_profiles` table
  - [x] `torrust_tracker_keys` table
  - [x] `torrust_torrents` table
  - [x] `torrust_torrent_files` table
  - [x] `torrust_torrent_info` table
  - [x] `torrust_torrent_announce_urls` table

  Some cases to test:

  - [x] Torrent with `pieces`.

  Using a single tracker URL or multiple URLs:

  - [x] Torrent with `announce` (single tracker url).
  - [x] Torrent with `announce_list` (multiple tracker URLs).

  Containing one file or multiple files:

  - [x] Torrent with one file.
  - [x] Torrent with multiple files.

  Add tests for the application behaviour changed:

  - [x] User can use have the password hashed with "argon2id" or a "pbkdf2-sha256". Add a test for the "verify_password" function.

  Things I'm not going to test:

  - [ ] Torrent with MD5 checksum?. I do not know how to include this MD5 checksum in the torrent file.
  - [ ] Torrent with `root_hash` ([BEP-0030](https://www.bittorrent.org/beps/bep_0030.html)).
  - [ ] The user registration date can be null for users that have been imported. We do not test it for MySQL since the upgrader is only for SQLite.

ACKs for top commit:
  josecelano:
    ACK 5a7d875
  da2ce7:
    ACK 5a7d875

Tree-SHA512: 0f79cb36bc8fac5f0166fa55d6addbbb1a4096c2f2e0e1d898b5b694bf16877cdc572a9336a69d0afd7da8c075edc21d49f6a5d640b187163269e59fe8f37138
@josecelano
Copy link
Member Author

The API change was reverted here.

We can remove the struct:

pub struct NewTrackerKey {
    pub key: String,
    pub valid_until: Duration,
}

in src/models/tracker_key.rs.

@da2ce7 should we add the new field in the tracker API response?

If we want to do it, we can do it in this issue, but we need to create a new issue on the tracker repo. I suggest doing it in parallel, like the other API change. We can keep the current name until the new major version release. Something like:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "valid_until": 1674804892                         -> Mark as deprecated
  "key_valid_until": "2015-05-22T14:56:28.000Z"         
}

I propose to use the name key_valid_until for the new field. So in the future, we will have:

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "key_valid_until": "2015-05-22T14:56:28.000Z"         
}

or

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "expires_on": "2015-05-22T14:56:28.000Z"         
}

@da2ce7 @WarmBeer, if you think this is not a priority, we can remove the NewTrackerKey struct to close this issue.

@josecelano josecelano removed the Bug Incorrect Behavior label Nov 30, 2022
josecelano added a commit that referenced this issue Nov 30, 2022
It was added because the tracker API was changed, but that change was
reverted here:

torrust/torrust-tracker#109

and it is not used anymore.
@josecelano josecelano linked a pull request Nov 30, 2022 that will close this issue
@da2ce7
Copy link
Contributor

da2ce7 commented Nov 30, 2022

Best to be explicit:

POST /api/key/:expiry_time

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "expiry_time": "2015-05-22T14:56:28.000Z"         
}

@josecelano
Copy link
Member Author

Best to be explicit:

POST /api/key/:expiry_time

{
  "key": "IaWDneuFNZi8IB4MPA3qW1CD0M30EZSM",
  "expiry_time": "2015-05-22T14:56:28.000Z"         
}

OK. I've created the issue on the tracker.

We can close this issue via the PR, removing the unused struct. And open it again to remember we have to change the backend when we finish the issue.

josecelano added a commit that referenced this issue Nov 30, 2022
728fe8a fix: [#78] remove unused struct NewTrackerKey (Jose Celano)

Pull request description:

  It was added because the tracker API was changed, but that change was reverted here:

  torrust/torrust-tracker#109

  and it is not used anymore.

ACKs for top commit:
  da2ce7:
    ACK 728fe8a

Tree-SHA512: 3bad8b9d0f38c0567e52d163c37fdc4dfde776d03666486416a833e290a29a7853e841853f7e5000ddeca9712ecebebecc200f86e97c647095dc6e36ceb13246
da2ce7 added a commit to da2ce7/torrust-index that referenced this issue Oct 15, 2023
27afd4e release: version 3.0.0-alpha.1 (Cameron Garnham)
e93e5cd docs: add release process (Cameron Garnham)
3a9954e various: work on readme (Cameron Garnham)
9dc540b chore(deps): bump indexmap from 1.9.3 to 2.0.2 (dependabot[bot])
1f5351d dev: upgrade containers (Cameron Garnham)
b0f2913 chore: format cargo file (Cameron Garnham)
f610b92 dev: replace sailfish with tera (Cameron Garnham)
047359d ci: temp: clean before build (Cameron Garnham)
67555d9 ci: avoid rust `cargo check` bug (Cameron Garnham)
b7448e8 chore: update deps (Cameron Garnham)
b6cfcc3 various: change name to `torrust-index` (Cameron Garnham)
f59b16e ci: update testing workflow (Cameron Garnham)
4dc795f chore: update cargo lockfile (Cameron Garnham)
5495658 ci: small fixes (Cameron Garnham)
ca05034 ci: add labels sync workflow (Cameron Garnham)
4100d8d ci: add dependabot file (Cameron Garnham)
41be37a github: add codeowners file (Cameron Garnham)
e6dcbb1 chore: update dependencies (Jose Celano)
8304bf6 chore: [torrust#247] rename yml extension to yaml (postmeback)
275231a doc: [torrust#276] add comment for upload torrent secondary tasks (Jose Celano)
f19e801 refactor: [torrust#276] extract fn Torrent::import_torrent_statistics_from_tracker (Jose Celano)
fbb42ad feat!: [torrust#276] do not persist uploaded torrent if it cannot persit tags (Jose Celano)
6a75c54 refactor: [torrust#276] extract fn Torrent::canonical_info_hash_group_checks (Jose Celano)
bbadd59 refactor: [torrust#276] extract fn Torrent::customize_announcement_info_for (Jose Celano)
4cc97c7 feat!: [torrust#276] upload torrent returns 400 instead of empty response (Jose Celano)
329485f refactor: [torrust#276] extract fn parse_torrent::decode_and_validate_torrent_file (Jose Celano)
a46d300 refactor: [torrust#276] extract function Torrent::validate_and_build_metadata (Jose Celano)
ca6e97c refactor: [torrust#276] move metadata format validation to Metadata struct (Jose Celano)
a302c22 test: [torrust#276] add more tests for torrent upload (Jose Celano)
7d50a17 refactor: reorganize test mods for torrent contract (Jose Celano)
2cb0ade chore: remove unused dependencies (Jose Celano)
378d19b chore: cargo update (Jose Celano)
8821346 doc: add some comments for BEP 30 implementation (Jose Celano)
dfdac19 refator: [torrust#296] move logic to service layer (Jose Celano)
1660fd5 refactor: [torrust#296] rename vars (Jose Celano)
b6fe36b refactor: [torrust#296] extract duplicate code (Jose Celano)
f0ad6a4 refactor: rename structs and reorganize mods (Jose Celano)
e9476fc feat: [torrust#296] persist torrent comment (Jose Celano)
eb26c8d fix: tag name for random tag in tests (Jose Celano)
3cf9c44 test: add two more test torrents (Jose Celano)
50cef81 chore: update config for debuggin in Visual Studio Code (Jose Celano)
7fedf15 feat!: [torrust#289] do not allow duplicate tags (Jose Celano)
01a7d2e feat!: [torrust#289] do not allow empty tag names (Jose Celano)
c2b7488 feat!: [torrust#288] do not allow empty category names (Jose Celano)
022692e fix: [torrust#273] add tags to torrent details in test responses (Jose Celano)
2a73f10 test: [torrust#278] allow using non canonical info-hash to download a torrent (Jose Celano)
05b67c7 test: [torrust#278] use non canonical info-hash to get torrent details (Jose Celano)
83d31f2 feat: [torrust#278] redirect to URL with canonical infohash (Jose Celano)
5e2ae68 ci: enable rust cache for integration test (Jose Celano)
d7cc040 refactor: [torrust#282] tests (Jose Celano)
6ff3600 fix: [torrust#282] downloaded torrent info-hash matches uploaded one (Jose Celano)
b34c7d8 test: [torrust#282] compare uploaded and downloaded torrent info-hashes (Jose Celano)
05a4977 fix: [torrust#279] rename tracker container env var TORRUST_TRACKER_DATABASE_DRIVER (Jose Celano)
110e159 test: [torrust#261]: do not allow uploading two torrents with the same canonical infohash (Jose Celano)
3b7a762 feat: [torrust#261] store original infohashes (Jose Celano)
d9cdd65 feat: new binary to par torrent files (Jose Celano)
7c4b530 test: [torrust#264] Added torrent name to list and detail endpoints (MMelchor)
f2369b4 feat: [torrust#264] Added torrent name to list and detail endpoints (MMelchor)
891a744 fix: clean sqlite bash commands (Jose Celano)
bf95d85 fix: docker compose with the new tracker container image (Jose Celano)
bf3f66f torrust#262: Add tower-http compression middleware (Alex Wellnitz)
9bb8578 feat: [torrust#256] add original infohash to upload torrent response (Jose Celano)
7c047e2 refactor: [torrust#256] extract struct AddTorrentResponse (Jose Celano)
d7c9d93 feat: [torrust#256] store the original infohash in the database (Jose Celano)
0cb63dc feat: [#2560] new function to calculate the original torrent infohash (Jose Celano)
941694e docs: [torrust#256] add ADR for custom info dcit fields (Jose Celano)
77a7f8a test: [torrust#256] uploaded torrent inhohash changes when contains custom fields (Jose Celano)
05141fd fix: type for parsed torrent metadata using intermodal console app (Jose Celano)
354cb7d ci: overhaul testing workflow (Cameron Garnham)
ce50f26 feat: [torrust#257] improve bad request error message for uploading (Jose Celano)
a8aad7a fix: clippy errors (Jose Celano)
35a5430 feat: increase max request body size to 10MB (Jose Celano)
0b29678 refactor(ci): reorganize E2E testing scripts (Jose Celano)
22b8f8a fix: [torrust#223] HTTP error status code trying to insert duplicate category in MySQL (Jose Celano)
c6346a5 test: [torrust#223] run E2E with MySQL too (Jose Celano)
8fe0955 fix: clippy warning (Jose Celano)
bc04231 doc: [torrust#242] improve infohash generation documentaion (Jose Celano)
6fc4050 test: [torrust#242] add tests for infohash calculation (Jose Celano)
c3e61ea fix: [torrust#242] wrong infohash when info dict contains source field (Jose Celano)
2e6fe12 ci: overhaul coverage workflow (Cameron Garnham)
9de7aa7 dev: tighten lint for build and clippy (Cameron Garnham)
f7f76ff fix: clippy warning (Jose Celano)
414c6c1 feat: add a custom header with infohash to the download endpoints (Jose Celano)
0f163cf refactor: invert the dependency between Torrent named constructors (Jose Celano)
4b6f25c test: add test for random torrent file generator service (Jose Celano)
40c4df0 refactor: extract hasher service (Jose Celano)
b2870b9 refactor: extract torrent file service (Jose Celano)
dfa260e fix: clippy warnings alter updating clippy to clippy 0.1.73 (Jose Celano)
b269ecb feat!: change random torrent generator endpoint (Jose Celano)
30bf79e feat: new endpoint to generate random torrents (Jose Celano)
dd1dc0c chore: add dependencies: hex, uuid (Jose Celano)
f739657 torrust#72: Change MIN_TORRENT_TITLE_LENGTH type from u32 to usize for Rust compatibility (Alex Wellnitz)
1828883 torrust#72: Constant added so you can easily adjust the value (Alex Wellnitz)
7db0275 Remove referencing the reference (Alex Wellnitz)
a15af48 torrust#72: Specific error code added (Alex Wellnitz)
946ea97 torrust#72: Add minimum length in Torrent Title (Alex Wellnitz)
6bf1b19 ci: fix cargo publish command (Jose Celano)
6347cdb chore(release): 2.0.0-alpha.3 (Jose Celano)
e627ef9 refactor: use a third party package for email valildation (Jose Celano)
734e6cb feat: add cargo dependency: email_address (Jose Celano)
b069421 chore: normalize workflow names (Jose Celano)
db1612c ci: add upload coverage report to codecov (Jose Celano)
a534e38 fix: [torrust#230] make sure user exist in upload torrent endpoint (Jose Celano)
fe25778 chore: udpate rust toolchain 1.72.0-nightly (Jose Celano)
ba8b2c2 feat!: change default API port to 3001 (Jose Celano)
802df10 fix: [torrust#227] load error images in image proxy before serving them (Jose Celano)
acf5728 docs: proxied images can only be PNG (Jose Celano)
7803d5a feat!: [torrust#217] lowercase infohashes (Jose Celano)
21a1f16 feat!: [torrust#97] make torrent category optional (Jose Celano)
21ee689 feat!: [torrust#215] return 404 when torrent is not found (Jose Celano)
f85e153 feat!: [torrust#144] don't allow to update settings (Jose Celano)
986d2f8 fix: [torrust#194] add missing tables to truncate when reseting the DB (Jose Celano)
7a06fe8 test: [torrust#194] remove database tests (Jose Celano)
b4ea3d5 fix: [torrust#216] allow updating torrent category after upload (Jose Celano)
f998d9d feat: add env var to set permissive CORS policy (Jose Celano)
910a419 chore: format toml files (Jose Celano)
6b94f77 release: v2.0.0-alpha.2 (Jose Celano)
717cdaa refactor(api): [torrust#208] use API impementation enum for API versioning (Jose Celano)
44c799e refator(api): [torrust#208] remove ActixWeb implementation (Jose Celano)
6fc6872 refactor(api): [torrust#197] make Axum implementation the default one (Jose Celano)
f0017ae refactor(api): move auth logic to web api (Jose Celano)
ff8816f refactor(api): rename structs (Jose Celano)
d8b2104 refactor(api): move Create struct (Jose Celano)
9591239 refector(api): move API_VERSION const out of ActixWeb implementation (Jose Celano)
a6881e3 refactor: move funtion get_optional_logged_in_user (Jose Celano)
b73d864 fix(api): Axum API, error should return a 500 status code (Jose Celano)
b4744e7 test(api): fix test for empty categories (Jose Celano)
34db879 fix(api): Axum API, fix delete tag response (Jose Celano)
0af2cb7 refactor(api): [torrust#180] Axum API, proxy context (Jose Celano)
24394ea refactor(api): [torrust#182] Axum API, torrent context, delete torrent info (Jose Celano)
ca257ff refactor(api): [torrust#182] Axum API, torrent context, update torrent info (Jose Celano)
4bed98a refactor(api): [torrust#182] Axum API, torrent context, get torrent info (Jose Celano)
b998a16 refactor(api): [torrust#182] Axum API, torrent context, search for torrents (Jose Celano)
ed533b7 refactor(api): [torrust#182] Axum API, torrent context, download torrent file (Jose Celano)
538ebcc refactor(api): [torrust#182] Axum API, torrent context, upload torrent file (Jose Celano)
d7f1e34 feat(api): add multipart feature for Axum package (Jose Celano)
dc469c4 refactor(api): [torrust#181] Axum API, settings contex (Jose Celano)
b53ce8d refactor(api): [torrust#198] Axum API, tag context (Jose Celano)
878bb7b refactor(api): [torrust#198] Axum API, root endpoints (Jose Celano)
b4a7ea6 refactor(api): [torrust#179] Axum API, category context, delete category (Jose Celano)
f63bf05 refactor(api): [torrust#179] Axum API, category context, add category (Jose Celano)
bb6d9bf refactor(api): [torrust#179] Axum API, category context, get all categories (Jose Celano)
6f9c1a2 refactor: API category context tetests (Jose Celano)
d3b5b15 refactor(api): [torrust#183] Axum API, user context, ban user (Jose Celano)
9564dec refactor(api): [torrust#183] Axum API, user context, renew JWT (Jose Celano)
b15616c refactor(api): [torrust#183] Axum API, user context, verify JWT (Jose Celano)
3f639b3 refactor(api): [torrust#183] Axum API, user context, login (Jose Celano)
a341e38 refactor(api): [torrust#183] Axum API, user context, email verification (Jose Celano)
91522f4 feat: add cargo dependency tower-http (Jose Celano)
79682a5 refactor(api): [torrust#183] Axum API, user context, registration (Jose Celano)
6023b96 fix: [torrust#190] SQL error in SQLite (Jose Celano)
b4c43da fix: [torrust#189] make 'Development checks' workflow fail if E2E tests fail (Jose Celano)
f693a02 refactor: [torrust#187] extract tag::Service (Jose Celano)
b97698a test(api): [torrust#187] add tests for new 'tag' context (Jose Celano)
4730afd chore: clippy errors (Warm Beer)
a6cf184 chore: cargo fmt (Warm Beer)
4286ba9 feat: added filtering torrents on tags (Warm Beer)
a1bd92f fix: sql queries (Warm Beer)
7ce3d5e feat: torrent tags (Warm Beer)
1924365 refactor(api): [torrust#178] axum API, 'about' context migrated (Jose Celano)
68e2132 refactor: disable logging for testing (Jose Celano)
0264e5c feat: [torrust#177] new config option for log level (Jose Celano)
3edd507 docs: [torrust#97] update README (Jose Celano)
d08f70e refactor(api): [torrust#174] Axum API scaffolding (Jose Celano)
7bcf20e feat: disable sqlx logging for all statements (Jose Celano)
7347fee feat(api): [torrust#174] new cargo dependencies: axum, hyper (Jose Celano)
d7f51fa docs: [torrust#169] app upgrader documentation (Jose Celano)
5485589 refactor: remove unneeded code (Jose Celano)
93d1b64 docs: [torrust#168] statistics importer console command (Jose Celano)
9baedfb docs: [torrust#166] installation and configuration (Jose Celano)
9ca7341 docs(api): [torrust#163] API documentation on docs.rs (Jose Celano)
5396301 refactor: [torrust#157] extract authentication service (Jose Celano)
8101048 refactor: [torrust#157] extract service to ban users (Jose Celano)
2eb0f7c refactor: [torrust#157] extract service for user registration (Jose Celano)
1abcc4d refactor: [torrust#157] extract service: torrent (Jose Celano)
0387b97 refactor: [torrust#157] extract service: settings (Jose Celano)
c9fb249 refactor: [torrust#157] extract service: proxy (Jose Celano)
d58f3cc refactor: [torrust#157] extract service: category (Jose Celano)
baa4c7e refactor: [torrust#157] extract service: about (Jose Celano)
02c4a7e feat!: add API version prefix in API URLs (Jose Celano)
7c07920 ci: install imdl binary (Jose Celano)
75ec0a6 feat: release 2.0.0-alpha.1 (Jose Celano)
260452f ci: [torrust#152] add workflow to publish on crates.io (Jose Celano)
57642ea feat!: [torrust#143] move config option torrent_info_update_interval (Jose Celano)
d1a3077 chore: normalize infohash -> info_hash (Jose Celano)
25016e0 feat: [torrust#146] return infohash after successfully uploading a torrent (Jose Celano)
07943f1 docs: add adr for lowercase infohashes (Jose Celano)
83ec1d6 dev: fix clippy warnings with env var CARGO_INCREMENTAL=0 (Jose Celano)
5bd233a feat: add env var CARGO_INCREMENTAL before running clippy (Jose Celano)
c71949f feat: enable pedantic clippy on CI (Jose Celano)
f0d3da5 dev: fix remaning clippy warnings 2 (Cameron Garnham)
da91f97 dev: fix remaning clippy warnings (Cameron Garnham)
493adbb dev: fix clippy warnings for: src/tracker.rs (Cameron Garnham)
6d5e2ed dev: fix clippy warnings for: src/routes/user.rs (Cameron Garnham)
33c3218 dev: fix clippy warnings for: src/routes/torrent.rs (Cameron Garnham)
c20608f dev: fix clippy warnings for: src/routes/settings.rs (Cameron Garnham)
7277e4e dev: fix clippy warnings for: src/routes/mod.rs (Cameron Garnham)
fd75fd4 dev: fix clippy warnings for: src/routes/category.rs (Cameron Garnham)
21493b0 dev: fix clippy warnings for: src/routes/about.rs (Cameron Garnham)
f1b3663 dev: fix clippy warnings for: src/models/user.rs (Cameron Garnham)
a0947d0 dev: fix clippy warnings for: src/models/torrent.rs (Cameron Garnham)
269cd28 dev: fix clippy warnings for: src/models/torrent_file.rs (Cameron Garnham)
eb3dd11 dev: fix clippy warnings for: src/models/response.rs (Cameron Garnham)
b737f10 dev: fix clippy warnings for: src/mailer.rs (Cameron Garnham)
3e7a917 dev: fix clippy warnings for: src/lib.rs (Cameron Garnham)
7f79fa9 dev: fix clippy warnings for: src/errors.rs (Cameron Garnham)
578b213 dev: fix clippy warnings for: src/databases/sqlite.rs (Cameron Garnham)
593ac6f dev: fix clippy warnings for: src/databases/mysql.rs (Cameron Garnham)
ebc360e dev: fix clippy warnings for: src/databases/database.rs (Cameron Garnham)
7b28120 dev: fix clippy warnings for: src/console/commands/import_tracker_statistics.rs (Cameron Garnham)
836d53f dev: fix clippy warnings for: src/config.rs (Cameron Garnham)
a741a22 dev: fix clippy warnings for: src/auth.rs (Cameron Garnham)
4a70ee0 dev: apply clippy auto-fixes (Cameron Garnham)
404caee refactor: use tracker::Service in StatisticsImporter (Jose Celano)
63aefcf refactor: decouple tracker::StatisticsImporter from tracker::Service (Jose Celano)
0198361 refactor: rename structs and functions, and add docs (Jose Celano)
00926e1 refactor: split tracker mod into submods (Jose Celano)
fddf020 fix: failing test (Jose Celano)
6cc1380 refactor: extract tracker api client from tracker service (Jose Celano)
655f631 feat: [torrust#130] add env var to change the default config path (Jose Celano)
4764825 feat: [torrust#114] add new config section api (Jose Celano)
41b6000 feat!: [torrust#114] remove the torrents response min page size and add max page size (Jose Celano)
fc15671 feat: remove debug output (Jose Celano)
de56be0 refactor: move docs and compose config for database tests (Jose Celano)
7298238 feat!: [torrust#115] change endpoints /torrent/{id} to /torrent({infohash} (Jose Celano)
e9762ff test: [torrust#115] add more E2E tests for endpoints using torrent ID (Jose Celano)
16bd04c feat!: [torrust#115] change endpoint GET /torrent/download/{id} to GET /torrent/download/{infohash} (Jose Celano)
e0c01d6 feat: [torrust#115] add cargo dependencies: thiserror and binascii (Jose Celano)
32af56d test: [torrust#115] add E2E tests for torrent download with personal announce url (Jose Celano)
e8bf537 refactor: [torrust#115] extractfunction expected_torrent (Jose Celano)
4782f67 fix: run E2E tests that require a running tracker (Jose Celano)
234e07a refactor: [torrust#115] make TrackerService::retrieve_new_tracker_key private (Jose Celano)
df650db refactor: rename mod time to clock (Jose Celano)
d2f8db9 fix: [torrust#132] deprecate chrono function warning (Jose Celano)
b97da41 refactor: [torrust#130] configuration for E2E tests (Jose Celano)
87edb36 test: [torrust#130] do not update settings for shared test evns (Jose Celano)
88bd598 fix: tests. Missing new image cache section in config (Jose Celano)
916d869 refactor: remove patch versions from added packages (Warm Beer)
d5c5487 refactor: cargo fmt (Warm Beer)
005817f feat: [torrust#91] added image proxy with cache (Warm Beer)
14d0acb refactor: run e2e tests with independent isolated servers too. (Jose Celano)
1df870b refactor: extract logic for setting up test envs (Jose Celano)
36f17f1 tests: panic when E2E server env is not running (Jose Celano)
bce946f refactor: removed unneeded intermediary var (Jose Celano)
6d5e002 test: isolated environments for integration testing (Jose Celano)
2211871 refactor: extract app from main (Jose Celano)
89e544e feat: server port assigned by OS with port 0 (Jose Celano)
489061e refactor: extract logic from e2e tests to reuse it for integrations tests (Jose Celano)
1aee356 fix: [torrust#125] dependabot alert GHSA-wcg3-cvx6-7396 (Jose Celano)
b77de22 chore(deps): [torrust#122] cargo udpate (Jose Celano)
488601d chore(deps): [torrust#122] bump actix-cors, actix-multipart, actix-web (Jose Celano)
9174a0c chore(deps): [torrust#122] bump async-trait from 0.1.52 to 0.1.68 (Jose Celano)
e4c19c1 chore(deps): [torrust#122] bump futures from 0.3.15 to 0.3.24 (Jose Celano)
cd1a9ec chore(deps): [torrust#122] bump sqlx from 0.6.1 to 0.6.3 (Jose Celano)
ec9fee7 chore(deps): [torrust#122] bump toml from 0.5.8 to 0.7.3 (Jose Celano)
b45f6fb chore(deps): [torrust#122] bump derive_more from 0.99.14 to v0.99.17 (Jose Celano)
e4bfc09 chore(deps): [torrust#122] bump serde_json from 1.0.64 to v1.0.96 (Jose Celano)
45846aa chore(deps): [torrust#122] bump serde_bytes from 0.11.5 to v0.11.9 (Jose Celano)
a420a82 chore(deps): [torrust#122] bump urlencoding from 2.1.0 to 2.1.2 (Jose Celano)
84cde9b chore(deps): [torrust#122] bump chrono from 0.4.19 to 0.4.24 (Jose Celano)
6a1a965 chore(deps): [torrust#122] bump jsonwebtoken from 8.1.1 to 8.3.0 (Jose Celano)
9de3225 chore(deps): [torrust#122] bump sha-1 from 0.10.0 to 0.10.1 (Jose Celano)
30bccd3 chore(deps): [torrust#122] bump reqwest from 0.11.4 to 0.11.16 (Jose Celano)
cfad809 chore(deps): [torrust#122] bump tokio from 1.13.1 to 1.28.0 (Jose Celano)
5be1b83 chore(deps): [torrust#122] bump lettre from 0.10.0-rc.3 to 0.10.4 (Jose Celano)
49e582b chore(deps): [torrust#122] bump sailfish from 0.4.0 to 0.6.1 (Jose Celano)
4a5b7bb chore(deps): [torrust#122] bump regex from 1.6.0 to 1.8.1 (Jose Celano)
e8f8803 chore(deps): [torrust#122] bump argon2 from 0.4.1 to 0.5.0 and pbkdf2 0.11.0 to 0.12.1 (Jose Celano)
e3ed344 tests: [torrust#120] E2E tests for torrent routes (Jose Celano)
ea36618 feat: [torrust#120] add cargo dependency which (Jose Celano)
bac7e64 feat: [torrust#120] add cargo dependency uuid (Jose Celano)
a5bdaad feat: [torrust#120] add cargo dependency tempfile (Jose Celano)
c7c6ffd feat: [torrust#120] add dependency feature (Jose Celano)
9b2266d tests: [torrust#109] E2E tests for settings routes (Jose Celano)
2b6c04f test: [torrust#109] add more E2E tests for categories (Jose Celano)
2b58923 tests: [torrust#111] E2E test for user routes (Jose Celano)
f257692 feat: [torrust#111] add cargo dependency rand (Jose Celano)
73a26ae tests: [torrust#109] E2E test for category routes (Jose Celano)
652f50b refactor: [torrust#109] extract structs and functions (Jose Celano)
5678e4d tests: [torrust#107] E2E tests for API entrypoint and about routes (Jose Celano)
08f0aac chore: add code owners for github workflows (Jose Celano)
eedb0ce tests: e2e tests scaffolding (Jose Celano)
6ecde1d feat: add docker support (Jose Celano)
e6c5e30 feat: update vscode config to follow Tracker conventions (Jose Celano)
005eae5 feat: optionally load config with env var (Jose Celano)
ec52713 docs: minimise and cleanup readme file (Cameron Garnham)
247a043 feat: update licence files (Cameron Garnham)
f68d625 feat: [torrust#85] add cspell configuration (Jose Celano)
0c4eb02 feat: [torrust#94] add prefix v1 to tracker API (Jose Celano)
728fe8a fix: [torrust#78] remove unused struct NewTrackerKey (Jose Celano)
83bafb4 fix: console command help messages (Jose Celano)
5a7d875 feat: [torrust#56] console command to import tracker stats for all torrents (Jose Celano)
19d054e refactor: [torrust#56] rename test mods to follow prod mods (Jose Celano)
e8d984d refactor: [torrust#56] rename destiny DB to target DB (Jose Celano)
b400962 fix: format (Jose Celano)
8b761c8 feat: [torrust#56] keep category id in DB migration script (Jose Celano)
b29d4d7 fix: [torrust#56] db migration for imported users (Jose Celano)
38fee53 test: [torrust#56] new test for password verification (Jose Celano)
b9a8bf9 fix: [torrust#56] remove comment (Jose Celano)
e1790f6 refactor: [torrust#56] extract mods in upgrader (Jose Celano)
e23d948 refactor: remove duplication in tests (Jose Celano)
ee01e7b test: [torrust#56] for torrent files table in upgrader (new case) (Jose Celano)
afffaef tests: [torrust#56] for torrents files table in upgrader (Jose Celano)
82b84a3 refactor: [torrust#56] extract test configuration (Jose Celano)
750969d refactor: [torrust#56] rename methods (Jose Celano)
0063289 tests: [torrust#56] for torrents info and announce urls tables in upgrader (Jose Celano)
cd95987 refactor: [torrust#56] rename mod and variables (Jose Celano)
f0f581f tests: [torrust#56] for torrents table in upgrader (Jose Celano)
eef980c tests: [torrust#56] for tracker keys table in upgrader (Jose Celano)
8d74e66 tests: [torrust#56] for users profile and auth tables in upgrader (Jose Celano)
0a58b6c fix: [torrust#56] bio and avatar is user profile should be NULL for imported users (Jose Celano)
5d0def2 refactor: [torrust#56] tests for upgrader (Jose Celano)
f993107 tests: [torrust#56] for users table in upgrader (Jose Celano)
6188b10 refactor: extract mod sqlite_v1_0_0 in tests (Jose Celano)
44927e5 test: [torrust#56] WIP. scaffolding to test upgrader command (Jose Celano)
7f0a7ea fix: open source db in read-only mode in upgarder (Jose Celano)
217fae2 feat: [torrust#56] take source DB in upgrader command from args (Jose Celano)
aabc3ef feat: the upgrader command takes args (Jose Celano)
693994f feat: add new dependency text_colorizer (Jose Celano)
f620e05 fix: [torrust#56] announce list has precedence over announce (Jose Celano)
309e141 fix: take torrent private flag from torrent file (Jose Celano)
72dc139 refactor: reformat sql queries (Jose Celano)
6bb4c53 refactor: extract struct TorrentRecordV2 (Jose Celano)
b9bf405 feat: [torrust#56] improve command output (Jose Celano)
7152654 refactor: [torrust#56] rename structs for DB records (Jose Celano)
99edf52 feat: imported users have importation date instead of registrataion date (Jose Celano)
21174d4 feat: [torrust#56] trasnfer torrents (4/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
8bdf32f feat: [torrust#56] trasnfer torrents (3/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
3fea6ea feat: [torrust#56] trasnfer torrents (2/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
03e4bef feat: [torrust#56] remove unused scripts and write basic upgrage guide (Jose Celano)
0b3aefa feat: [torrust#56] transfer torrents (1/4 tables) from v1.0.0 to v2.0.0 (Jose Celano)
8d26faa fix: [torrust#78] parsing keys from tracker (Jose Celano)
35f1e37 fix: [torrust#56} default user registration date with time (Jose Celano)
dd949fa feat: [torrust#56] transfer tracker keys from v1.0.0 to v2.0.0 (Jose Celano)
d9b4e87 feat: [torrust#56] transfer user password from v1.0.0 to v2.0.0 (Jose Celano)
01921ed fix: [torrust#56] triggering recompilation on migration changes (Jose Celano)
cf09283 docs: [torrust#56] update README for integration tests (Jose Celano)
d1059f5 feat: [torrust#56] trasnfer user data from v1.0.0 to v2.0.0 (Jose Celano)
d590972 refactor: [torrust#56] move upgrader from main upgrade mod to specific version upgrader mod (Jose Celano)
996c7d1 refactor: [torrust#56] rename command al dirs (Jose Celano)
b92fb08 feat: [torrust#56] transfer categories from db v1.0.0 to v2.0.0 (Jose Celano)
7513df0 refactor: add scaffolding for database migration command (Jose Celano)
5d6dec0 refactor: allow adding more binaries (Jose Celano)
c3414da feat: add target dir to .gitignore (Jose Celano)
3c47ffc fix: [torrust#84] SQL query to get list of torrents without stats (Jose Celano)
c291557 fix: [torrust#84] restore behavior. Update torrent stats after upload (Jose Celano)
50dc9d3 ci: make full test (Cameron Garnham)
84324a8 test: skip for mysql test, as db isn't setup and it hangs. (Cameron Garnham)
52d23ee clippy: fix clippy errors, and most warnings (Cameron Garnham)
f3cc562 clippy: auto fix (Cameron Garnham)
63f8b6f vscode: add auto-formating, and clippy for lint (Cameron Garnham)
a39a0d9 ci: verify formating for pull requests (Cameron Garnham)
c982c4e fmt: add world format to git-blame-ignore file (Cameron Garnham)
9ddc079 fmt: format the world (Cameron Garnham)
06bb34b fmt: include rust format, same as torrust-index (Cameron Garnham)
4e72995 fix: [torrust#79] prioritize `announce-list` over `announce` (Warm Beer)
4bb814c feat: auto detect `db_driver` from `connect_url` (Warm Beer)

Pull request description:

ACKs for top commit:
  da2ce7:
    ACK 27afd4e

Tree-SHA512: c23856d41e784f81177cfe9751eabd7bdcbdf662a412f75e3dc64c11c7e7f70dab737c9b4f2333c8a6e2a684c212c0ded5424b8581925c19af3e979a3a79cd6b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

2 participants