summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2019-01-04 13:31:37 -0800
committerBryan Newbold <bnewbold@robocracy.org>2019-01-04 13:31:37 -0800
commitc1cdda4cf4c714f92b5fd7676e44ab5a92e637a9 (patch)
tree4aff5501710d35636fe35587b0ed6816d4b7dbd7
parent3aee89745355b0ced5223c601a03f77e46d997dc (diff)
downloadfatcat-c1cdda4cf4c714f92b5fd7676e44ab5a92e637a9.tar.gz
fatcat-c1cdda4cf4c714f92b5fd7676e44ab5a92e637a9.zip
update main README
-rw-r--r--README.md46
-rw-r--r--notes/fatcat_idents.md25
2 files changed, 39 insertions, 32 deletions
diff --git a/README.md b/README.md
index 1433e62b..4c75dffc 100644
--- a/README.md
+++ b/README.md
@@ -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))
+