Packages
livebook
0.14.0
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook/teams/org.ex
defmodule Livebook.Teams.Org do
use Ecto.Schema
import Ecto.Changeset
@prefix "lb_tk_"
@type t :: %__MODULE__{
id: pos_integer() | nil,
emoji: String.t() | nil,
name: String.t() | nil,
teams_key: String.t() | nil,
user_code: String.t() | nil
}
@secret_key_size 32
@primary_key {:id, :id, autogenerate: false}
embedded_schema do
field :emoji, :string
field :name, :string
field :teams_key, :string
field :user_code, :string
end
@fields ~w(id emoji name teams_key user_code)a
@required_fields @fields -- ~w(id user_code)a
@doc """
Generates a new teams key.
"""
@spec teams_key() :: String.t()
def teams_key() do
key = :crypto.strong_rand_bytes(@secret_key_size)
@prefix <> Base.url_encode64(key, padding: false)
end
@doc """
Generates a hash key.
"""
@spec key_hash(t()) :: String.t()
def key_hash(%__MODULE__{teams_key: teams_key}),
do: Base.url_encode64(:crypto.hash(:sha256, teams_key), padding: false)
@doc false
def changeset(org, attrs) do
org
|> cast(attrs, @fields)
|> validate_required(@required_fields)
|> validate_format(:name, ~r/^[a-z0-9][a-z0-9\-]*$/,
message: "should only contain lowercase alphanumeric characters and dashes"
)
end
@doc """
Returns the teams key prefix
"""
@spec teams_key_prefix() :: String.t()
def teams_key_prefix(), do: @prefix
end