Eli
Library for Letmein Integration.
Installation
Add this line to your application's Gemfile:
gem "eli"
And then execute:
bundle install
Or install it yourself as:
gem install eli
Configuration
Set the base URL of the Letmein server you are integrating with. It defaults to
http://localhost:4000 and can also be provided through the LETMEIN_BASE_URL
environment variable.
Eli::Config.base_url = "http://localhost:4000"
Usage
Public API
# Sign in and obtain a session token
response = Eli.sign_in("app token", "user.email@domain.com", "secret.password")
response.status # => 200
response.body # => { "data" => { "token" => "JWT session token" } }
# Check whether a session token is still valid
Eli.signed_in("JWT session token") # => true / false
# Current user, refresh and sign out
Eli.current_user("JWT session token")
Eli.refresh("JWT session token")
Eli.sign_out("JWT session token")
# Account management
Eli.unlock("Unlock token")
Eli.confirm("Confirmation token")
Eli.request_password_recovery("app token", "user@example.com")
Eli.recover_password("token", "Secret.123", "Secret.123")
Eli.update_password("JWT session token", {
current_password: "Secret.123",
new_password: "NewSecret.1234",
new_password_confirmation: "NewSecret.1234"
})
Eli.resend_account_confirmation_email("App token", "user@example.com")
Admin API
# Admin sessions
Eli::Admin.sign_in("user.email@domain.com", "seCr#t.passw0rd")
Eli::Admin.signed_in("JWT session token")
Eli::Admin.current_user("JWT session token")
Eli::Admin.refresh("JWT session token")
Eli::Admin.sign_out("JWT session token")
# Sign a user in on their behalf
Eli::Admin.signs_in(
"JWT session token",
{ email: "user.email@domain.com", name: "User Name" },
"app_id"
)
Organizations
organization = Eli::Admin::Organization.new(
name: "New Organization",
description: "New organization description"
)
Eli::Admin::Organization.create("JWT session token", organization)
Eli::Admin::Organization.list("JWT session token")
Eli::Admin::Organization.get("JWT session token", "organization-id")
Eli::Admin::Organization.update("JWT session token", "organization-id", organization)
Eli::Admin::Organization.delete("JWT session token", "organization-id")
Eli::Admin::Organization.list_admin_users("JWT session token", "organization-id")
Eli::Admin::Organization.add_admin_user("JWT session token", "organization-id", "user@domain.com")
Eli::Admin::Organization.remove_admin_user("JWT session token", "organization-id", "admin-user-id")
Apps
app = Eli::Admin::App.new(
name: "New App Name",
description: "New App Description",
organization_id: "organization-id",
unlock_sign_in_url: "http://localhost:4000"
)
Eli::Admin::App.create("JWT session token", app)
Eli::Admin::App.list("JWT session token", "organization-id")
Eli::Admin::App.get("JWT session token", "organization-id", "app-id")
Eli::Admin::App.update("JWT session token", "app-id", app)
Eli::Admin::App.delete("JWT session token", "organization-id", "app-id")
# App users
Eli::Admin::App.list_app_users("JWT session token", "organization-id", "app-id")
Eli::Admin::App.add_app_user("JWT session token", "organization-id", "app-id", "user@domain.com", "Secret.123!")
Eli::Admin::App.remove_app_user("JWT session token", "organization-id", "app-id", "app-user-id")
# Tokens
Eli::Admin::App.create_token("JWT session token", "organization-id", "app-id")
Eli::Admin::App.list_tokens("JWT session token", "organization-id", "app-id")
Eli::Admin::App.get_token("JWT session token", "organization-id", "app-id", "token-id")
Eli::Admin::App.revoke_token("JWT session token", "organization-id", "app-id", "token-id")
Responses
Every request returns an Eli::RestApi::Response value object exposing:
status— the HTTP status code as an integer.body— the response body, parsed from JSON into a Hash/Array when possible.
Development
After checking out the repo, run bin/setup to install dependencies. Then run
bundle exec rake spec to run the tests.
License
The gem is available as open source under the terms of the MIT License.