defmodule FirebaseAdmin.Client do use Tesla alias FirebaseAdmin.Token def get_users(uid) do get_users_with(:localId, uid) end def get_user_with_phone(phone) do get_users_with(:phoneNumber, phone) end def get_user_with_email(email) do get_users_with(:email, email) end def get_users_with(key, value) do post(client(), "v1/accounts:lookup", %{key => value}) end def custom_token(uid, service_account) do payload = %{ "iss" => service_account.client_email, "sub" => service_account.client_email, "aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", "uid" => uid } signer = Joken.Signer.create("RS256", %{"pem" => service_account.private_key}) Token.generate_and_sign!(payload, signer) end def sign_in_with_custom_token(token) do post(client(), "v1/accounts:signInWithCustomToken", %{token: token, returnSecureToken: true}) end def client() do {:ok, token} = Goth.fetch(FirebaseAdmin.Goth) middleware = [ {Tesla.Middleware.BaseUrl, "https://identitytoolkit.googleapis.com/"}, Tesla.Middleware.JSON, {Tesla.Middleware.Headers, [{"authorization", "Bearer " <> token.token}]} ] adapter = {Tesla.Adapter.Hackney, [recv_timeout: 10_000]} Tesla.client(middleware, adapter) end end