Packages

🛂 Gleam Microsoft Authorization Library by @gleam-br

Current section

Files

Jump to
gbr_msal src gbr msal account.gleam
Raw

src/gbr/msal/account.gleam

////
//// Módulo sobre a conta do usuário
////
//// [lib/msal-browser/docs/accounts.md](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/accounts.md)
////
//// [lib/msal-common/docs/multi-tenant-accounts.md](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/multi-tenant-accounts.md)
////
import gleam/bool
import gleam/javascript/array
import gleam/list
import gleam/option.{type Option, None, Some}
import gleam/result
import gbr/msal/domain.{type AccountInfo, type Msal, type Request, type Try}
import gbr/msal/ffi_mjs.{exec_sync, new_key}
/// Existe alguma conta de usuário autenticada no cache.
///
pub fn is_authenticated(in: Msal) -> Result(Bool, String) {
use account <- result.map(account_first(in))
option.is_some(account)
}
/// Recupera a primeira conta do usuário encontrada, sendo na ordem:
///
/// 1. [Recupera a conta ativa](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/accounts.md#active-account-apis)
/// 2. [Recupera a conta do cache](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/accounts.md#usage)
/// 3. [Recupera a 1a. conta das contas no cache](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/accounts.md#usage)
///
pub fn account_first(in: Msal) -> Result(Option(AccountInfo), String) {
use active <- result.try(account_active(in))
use <- bool.guard(option.is_some(active), Ok(active))
use account <- result.try(account(in, None))
use <- bool.guard(option.is_some(account), Ok(account))
use accounts <- result.map(accounts(in, None))
case accounts {
Some(accounts) -> option.from_result(list.first(accounts))
None -> None
}
}
/// Recupera a conta ativa disponĂ­vel do cliente
///
/// [lib/msal-browser/docs/login-user.md#account-apis](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/login-user.md#account-apis)
///
pub fn account_active(in: Msal) -> Try(Option(AccountInfo)) {
use instance <- domain.instance(in)
use response <- result.map(exec_sync(instance, "getActiveAccount", new_key()))
response
}
/// Seta a conta ativa disponĂ­vel do cliente
///
/// [lib/msal-browser/docs/login-user.md#account-apis](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/login-user.md#account-apis)
///
pub fn account_active_set(in: Msal, account: AccountInfo) -> Try(AccountInfo) {
use instance <- domain.instance(in)
use _void <- result.map(exec_sync(instance, "setActiveAccount", account))
account
}
/// Recupera as contas disponĂ­veis do cliente
///
/// [lib/msal-browser/docs/accounts.md](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/accounts.md)
///
pub fn account(in: Msal, req: Option(Request)) -> Try(Option(AccountInfo)) {
use instance <- domain.instance(in)
use response <- result.map(exec_sync(
instance,
"getAccount",
option.unwrap(req, new_key()),
))
response
}
/// Recupera as contas disponĂ­veis do cliente
///
/// [lib/msal-browser/docs/accounts.md](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/accounts.md)
///
pub fn accounts(
in: Msal,
req: Option(Request),
) -> Try(Option(List(AccountInfo))) {
use instance <- domain.instance(in)
use response <- result.map(exec_sync(
instance,
"getAllAccounts",
option.unwrap(req, new_key()),
))
use response <- option.map(response)
array.to_list(response)
}
/// Recupera a conta disponĂ­veis por 'username'.
///
/// [lib/msal-browser/docs/accounts.md](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/accounts.md)
///
pub fn account_by_name(in: Msal, username: String) -> Try(Option(AccountInfo)) {
use instance <- domain.instance(in)
use response <- result.map(exec_sync(
instance,
"getAccountByUsername",
username,
))
response
}