* use RESOURCE_NAME for requests
* use RESOURCE_NAME for transformers
* add permissions field to api key
* add migration for new permissions field
* update tests
* remove debug log
* set column type to "json"
* remove default attribute to fix tests
* fix default value for permissions
* fix after merge
* fix after merge
* allow to "register" custom permissions
* add "role" to default resource names
* fix after merge
* fix phpstan
* fix migrations
Main difference is permissions, cleaner UI for normal users, and account keys use permissions assigned to servers and subusers while application keys use R/W ACLs stored in the key table.
Previously, a single key was used to access the API, this has not changed in terms of what the user sees. However, API keys now use an identifier and token internally. The identifier is the first 16 characters of the key, and the token is the remaining 32. The token is stored encrypted at rest in the database and the identifier is used by the API middleware to grab that record and make a timing attack safe comparison.
The use of random_bytes in combination with bin2hex was producing a lot of duplicate keys when tested in batches of 10k (anywhere from 2 to 6). The use of str_random yielded no duplicates even at scales of 100k keys that were 8 characters.