···11# Changelog
2233+## [0.2.0] - 2026-05-02
44+55+- The configuration flag `--server-auth-token` has been changed to `--server-admin-password`.
66+77+- Most endpoints have been migrated to use XRPC.
88+ - [GET] `/:did/:cid` now has an alias endpoint available at `/xrpc/dev.blooym.porxie.getBlob` with the query parameters `?did=did&cid=cid`. The original endpoint remains fully supported for the foreseeable future, and it is the caller's decision of which endpoint is preferred for now.
99+ - [DELETE] `/cache/:did` has been moved to [POST] `/xrpc/dev.blooym.porxie.cache.purgeActor` with a JSON body containing `{ "did": "did" }`
1010+ - [DELETE] `/cache/:cid` has been moved to [POST] `/xrpc/dev.blooym.porxie.cache.purgeBlob` with a JSON body containing `{ "cid": "cid" }`.
1111+ - Authentication for all administrative endpoints now use authentication type 'Basic' instead of 'Bearer'. Per the temporary ATProtocol specification, the username field is expected to be set to `admin`.
1212+1313+- The policy service has been migrated to use XRPC.
1414+ - Calls will now be made to `/xrpc/dev.blooym.porxie.getBlobPolicy` with the query parameters `?did=did&cid=cid`.
1515+ - As part of this change, Porxie will now expect a JSON response containing the status of the blob instead of using the previous method of handling based on status code. You can find the permitted responses in the [lexicon definition](lexicons/dev/blooym/porxie/getBlobPolicy.json).
1616+ - The configuration option to append custom headers remains as-is and can be used to use whatever authentication scheme you see fit. Please note that Porxie does not support service authentication at this time, so your best choice would be using [admin tokens](https://atproto.com/specs/xrpc#admin-token-temporary-specification).
1717+1818+319## [0.1.2] - 2026-04-30
42055-### Security Fixes
2121+### Security Fixes:
622723- **Fix broken logic for enabling HTTPS only in release mode.**
824- **Fix broken authentication check logic that allows invalid tokens to clear the internal cache.**
9251026## [0.1.1] - 2026-04-30
11271212-### Features
1313-1428- Improve compliance with blob cid specification by only accepting v1 hashes with accepted codecs
15291616-### Performance
1717-1818-- Use jemallocator instead of the system allocator on all plat forms.
1919-2020-### Security Fixes
3030+- Use jemallocator instead of the system allocator on all platforms.
21312232- Make authentication checks constant time.
23332424-### Other
2525-2634- Refactored codebase for future maintainability
2727-28352936## [0.1.0] - 2026-03-26
3037
+2-2
README.md
···104104 [default: ip:127.0.0.1:6314]
105105106106--server-admin-password <SA_SERVER_ADMIN_PASSWORD>
107107- Admin password for authenticating privileged requests.
107107+ Admin password for authenticating priviledged requests.
108108109109 When unset, all authenticated endpoints will reject requests with HTTP 401.
110110111111 Authenticated requests always expect the username `admin` as per specification.
112112113113- [env: PORXIE_SERVER_ADMIN_TOKEN=]
113113+ [env: PORXIE_SERVER_ADMIN_PASSWORD=]
114114```
115115116116### Blob
···3030 return Err(StatusCode::UNAUTHORIZED);
3131 };
32323333- // Enforce admin as username as per specification.
3333+ // 'admin' must be the username as per specification.
3434 if basic_auth.username() != "admin" {
3535 return Err(StatusCode::UNAUTHORIZED);
3636 }
37373838- // Check password with a constant time check.
3938 if !state
4039 .admin_password
4140 .as_ref()