diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2019-01-04 13:31:37 -0800 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2019-01-04 13:31:37 -0800 | 
| commit | c1cdda4cf4c714f92b5fd7676e44ab5a92e637a9 (patch) | |
| tree | 4aff5501710d35636fe35587b0ed6816d4b7dbd7 | |
| parent | 3aee89745355b0ced5223c601a03f77e46d997dc (diff) | |
| download | fatcat-c1cdda4cf4c714f92b5fd7676e44ab5a92e637a9.tar.gz fatcat-c1cdda4cf4c714f92b5fd7676e44ab5a92e637a9.zip | |
update main README
| -rw-r--r-- | README.md | 46 | ||||
| -rw-r--r-- | notes/fatcat_idents.md | 25 | 
2 files changed, 39 insertions, 32 deletions
| @@ -13,25 +13,30 @@ published written works (mostly journal articles), with a focus on tracking  the location and status of full-text copies to ensure "perpetual access".  The [RFC](./fatcat-rfc.md) is the original design document, and the best place -to start for background. There is a work-in-progress "guide" at +to start for technical background. There is a work-in-progress "guide" at  <https://guide.fatcat.wiki>; the canonical public location of this repository  is <https://github.com/internetarchive/fatcat>. +The public production web interface is <https://fatcat.wiki>. + +See the `LICENSE` file for detailed permissions and licensing of both python +and rust code. In short, the auto-generated client libraries are permissively +released, while the API server and web interface are strong copyleft (AGPLv3). + +## Building and Tests +  There are three main components:  - backend API server and database (in Rust)  - API client libraries and bots (in Python)  - front-end web interface (in Python; built on API and library) -See the LICENSE file for details permissions and licensing of both python and -rust code. In short, the auto-generated client libraries are permissively -released, while the API server and web interface are strong copyleft (AGPLv3). - -## Building and Tests -  Automated integration tests run on Gitlab CI (see `.gitlab-ci.yml`) on the  Internet Archive's internal (not public) infrastructure. +See `./python/README.md` and `./rust/README.md` for details on building, +running, and testing these components. +  ## Status  - SQL and HTTP API schemas @@ -44,8 +49,8 @@ Internet Archive's internal (not public) infrastructure.  - HTTP API Server      - [x] base32 encoding of UUID identifiers      - [x] inverse many-to-many helpers (files-by-release, release-by-creator) -    - [ ] Authentication (eg, accounts, OAuth2, JWT) -    - [ ] Authorization (aka, roles) +    - [x] Authentication (eg, accounts, OAuth2, JWT) +    - [x] Authorization (aka, roles)  - Web Interface      - [x] Migrate Python codebase      - [ ] Creation and editing of all entities @@ -57,26 +62,3 @@ Internet Archive's internal (not public) infrastructure.      - [ ] Sentry (error reporting)      - [ ] Metrics -## Identifiers - -Fatcat entity identifiers are 128-bit UUIDs encoded in base32 format. Revision -ids are also UUIDs, and encoded in normal UUID fashion, to disambiguate from -edity identifiers. - -Python helpers for conversion: - -    import base64 -    import uuid - -    def fcid2uuid(s): -        s = s.split('_')[-1].upper().encode('utf-8') -        assert len(s) == 26 -        raw = base64.b32decode(s + b"======") -        return str(uuid.UUID(bytes=raw)).lower() - -    def uuid2fcid(s): -        raw = uuid.UUID(s).bytes -        return base64.b32encode(raw)[:26].lower().decode('utf-8') - -    test_uuid = '00000000-0000-0000-3333-000000000001' -    assert test_uuid == fcid2uuid(uuid2fcid(test_uuid)) diff --git a/notes/fatcat_idents.md b/notes/fatcat_idents.md new file mode 100644 index 00000000..84322604 --- /dev/null +++ b/notes/fatcat_idents.md @@ -0,0 +1,25 @@ + +## Identifiers + +Fatcat entity identifiers are 128-bit UUIDs encoded in base32 format. Revision +ids are also UUIDs, and encoded in normal UUID fashion, to disambiguate from +edity identifiers. + +Python helpers for conversion: + +    import base64 +    import uuid + +    def fcid2uuid(s): +        s = s.split('_')[-1].upper().encode('utf-8') +        assert len(s) == 26 +        raw = base64.b32decode(s + b"======") +        return str(uuid.UUID(bytes=raw)).lower() + +    def uuid2fcid(s): +        raw = uuid.UUID(s).bytes +        return base64.b32encode(raw)[:26].lower().decode('utf-8') + +    test_uuid = '00000000-0000-0000-3333-000000000001' +    assert test_uuid == fcid2uuid(uuid2fcid(test_uuid)) + | 
