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.("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.("App token", "user@example.com")

Admin API

# Admin sessions
Eli::Admin.("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.