README.md in branca-ruby-1.0.1 vs README.md in branca-ruby-1.0.2
- old
+ new
@@ -1,11 +1,11 @@
# Branca Tokens for Ruby
Authenticated and encrypted API tokens using modern crypto.
[![Gem Version](https://badge.fury.io/rb/branca-ruby.svg)](https://badge.fury.io/rb/branca-ruby)
-[![Build Status](https://travis-ci.com/thadeu/branca-ruby.svg?branch=main)](https://travis-ci.com/thadeu/branca-ruby)
+[![ci](https://github.com/thadeu/branca-ruby/actions/workflows/ruby.yml/badge.svg?branch=main)](https://github.com/thadeu/branca-ruby/actions/workflows/ruby.yml)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE)
## What?
[Branca](https://github.com/thadeu/branca-ruby) is a secure easy to use token format which makes it hard to shoot yourself in the foot. It uses IETF XChaCha20-Poly1305 AEAD symmetric encryption to create encrypted and tamperproof tokens. Payload itself is an arbitrary sequence of bytes. You can use for example a JSON object, plain text string or even binary data serialized by [MessagePack](http://msgpack.org/) or [Protocol Buffers](https://developers.google.com/protocol-buffers/).
@@ -15,18 +15,20 @@
## Install
Add this line to your application's Gemfile, Note that you also must have [libsodium](https://download.libsodium.org/doc/) installed.
```ruby
-gem 'branca-ruby', '~> 1.0.0'
+gem 'branca-ruby', '~> 1.0.2'
```
## Configure
You must be configure `secret_key` and `ttl` using this.
```ruby
+require 'branca'
+
Branca.configure do |config|
config.secret_key = 'supersecretkeyyoushouldnotcommit'.b
config.ttl = 86_400 # in seconds
end
```
@@ -49,13 +51,23 @@
Branca.encode(JSON.generate({ permissions: [] }))
# ATkzLjriA1ijbBcuZOJ1zMR0z5oVXDGDVjUWwrqJWszynAM4GLGiTwZnC6nUvtVIuavAVCMbwcsYqlYKejOI4
```
-You can also pass `timestamp` to encode
+You can also pass `secret_key` in runtime
```ruby
+specific_secret_key = SecureRandom.bytes(32)
+payload = "sensitive data"
+token = Branca.encode(payload, secret_key: specific_secret_key)
+```
+
+Will generate a token using `secret_key` in runtime instead global `secret_key`.
+
+So, you can also pass `timestamp` to encode.
+
+```ruby
Branca.encode('with string', Time.now.utc)
# 1y48BiV0jaalTYiARPdbm52IKgGEhfwq8DlP9ulKBx8LMLFrjNKe88vIGIUxsWzybIwBhmVvIam5
```
@@ -70,10 +82,26 @@
decode.message
# "with string"
```
+You can also pass `secret_key` or `ttl` in runtime. For example:
+
+```ruby
+specific_secret_key = SecureRandom.bytes(32)
+tmp_token = "1y48BiV0jaalTYiARPdbm52IKgGEhfwq8DlP9ulKBx8LMLFrjNKe88vIGIUxsWzybIwBhmVvIam5"
+token = Branca.decode(tmp_token, secret_key: specific_secret_key, ttl: 30)
+```
+
+Will decode token OR throw exception `DecodeError`
+
## Exceptions
-Token is expired, will receive exception `Branca::ExpiredTokenError`
+Token is expired, you will receive exception `Branca::ExpiredTokenError`
-Invalid Version, will receive exception `Branca::VersionError`
\ No newline at end of file
+Invalid Version, you will receive exception `Branca::VersionError`
+
+When handle error, you will receive exception `Branca::DecodeError`
+
+## Contributing
+
+We have a long list of valued contributors. Check them all at: https://github.com/thadeu/branca-ruby.