Skip to content

Commit eec71f2

Browse files
Add Basic License Key generation (#1298)
1 parent 25e2f4c commit eec71f2

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

apps/core/lib/core/services/accounts.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ defmodule Core.Services.Accounts do
33
import Core.Policies.Account
44
alias Core.PubSub
55
alias Core.Services.{Users, Payments}
6+
alias Core.Auth.Jwt
67
alias Core.Schema.{
78
User,
89
Account,
@@ -416,6 +417,14 @@ defmodule Core.Services.Accounts do
416417
def impersonate_service_account(%User{} = service_account, %User{} = user),
417418
do: allow(service_account, user, :impersonate)
418419

420+
421+
def license_key() do
422+
exp = Timex.now() |> Timex.shift(days: 365) |> Timex.to_unix()
423+
with {:ok, claims} <- Jwt.generate_claims(%{"enterprise" => true, "exp" => exp}),
424+
{:ok, token, _} <- Jwt.encode_and_sign(claims, Jwt.signer()),
425+
do: {:ok, token}
426+
end
427+
419428
@doc """
420429
Fetch all users that can impersonate this service account. Return just the user if not a service account
421430
"""

apps/core/test/services/accounts_test.exs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ defmodule Core.Services.AccountsTest do
33
use Mimic
44
alias Core.PubSub
55
alias Core.Services.Accounts
6+
alias Core.Auth.Jwt
67

78
describe "#create_service_account/2" do
89
setup [:setup_root_user]
@@ -757,6 +758,20 @@ defmodule Core.Services.AccountsTest do
757758
end
758759
end
759760

761+
describe "#license_key/0" do
762+
test "It can generate a valid year-long jwt with an enterprise claim" do
763+
{:ok, token} = Accounts.license_key()
764+
765+
signer = Jwt.signer()
766+
{:ok, claims} = Jwt.verify(token, signer)
767+
768+
assert claims["enterprise"]
769+
770+
assert Timex.from_unix(claims["exp"])
771+
|> Timex.after?(Timex.shift(Timex.now(), days: 364))
772+
end
773+
end
774+
760775
describe "#recompute_usage/1" do
761776
test "it correctly recomputes an accounts usage" do
762777
ac1 = insert(:account)

0 commit comments

Comments
 (0)