glebs

Package Version Hex Docs

gleam add glebs

Glebs is an OAuth PKCE helper for Gleam in Browser. You can easily use this with lustre, see lustre integration for more information.

Usage

Create an OAuth2ClientConfig

import glebs

let config =
  glebs.OAuth2ClientConfig(
    client_id: "12345",
    authorize_url: "https://oauthserverexample.com/authorize",
    token_url: "https://oauthserverexample.com/token",
    redirect_uri: "https://example.com/redirect",
    scope: "",
  )

You would usually set the config values during build time, or allow user to specify the configuration and store it in local storage.

Get an authorization url and redirect the user

Using the config get an authorization url based on the config and redirect the user to the url:

import glebs/request
import gleam/javascript/promise
import plinth/browser/window

request.create_authorization_request_url(config)
|> promise.map_try(fn(authorize_url) {
  let curr_window = window.self()

  let _ =
    storage.local()
    |> result.map(storage.set_item(_, "glebs_verifier", authorize_url.1))

  let curr_window = window.self()
  window.set_location(curr_window, uri.to_string(authorize_url.0))

  Ok(Nil)
})

The request.create_authorization_request_url function returns a tuple of #(Uri, String) where the first element is the authorization url and the second element is the code verifier. You should store the code verifier in session storage to be able to exchange the authorization code for an access token.

Exchange the authorization code for an access token

import glebs/request
import gleam/javascript/promise

request.get_access_token(config, verifier, code)
|> promise.map(fn(res) {
  case res {
    Ok(token) -> {
      // Do something with the token
    }
    Error(err) -> {
      // Handle error
    }
  }
})

The request.get_access_token function takes the config, the code verifier and the authorization code as input and returns an Promise(Result(glebs.TokenResponse), String) if the request was successful.

Further documentation can be found at https://hexdocs.pm/glebs.

Development

gleam run   # Run the project
gleam test  # Run the tests

Todo

Search Document