summaryrefslogtreecommitdiff
path: root/lib/chessh/schema/key.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chessh/schema/key.ex')
-rw-r--r--lib/chessh/schema/key.ex11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/chessh/schema/key.ex b/lib/chessh/schema/key.ex
index df790e2..856aa8e 100644
--- a/lib/chessh/schema/key.ex
+++ b/lib/chessh/schema/key.ex
@@ -11,13 +11,20 @@ defmodule Chessh.Key do
timestamps()
end
+ defimpl Jason.Encoder, for: Chessh.Key do
+ def encode(value, opts) do
+ Jason.Encode.map(Map.take(value, [:id, :key, :name]), opts)
+ end
+ end
+
def changeset(key, attrs) do
key
- |> cast(update_encode_key(attrs, :key), [:key])
+ |> cast(update_encode_key(attrs, :key), [:key, :player_id])
|> cast(attrs, [:name])
|> validate_required([:key, :name])
- |> validate_format(:key, ~r/[\-\w\d]+ [^ ]+$/, message: "invalid public ssh key")
+ |> validate_format(:key, ~r/^[\-\w\d]+ [^ ]+$/, message: "invalid public ssh key")
|> validate_format(:key, ~r/^(?!ssh-dss).+/, message: "DSA keys are not supported")
+ |> unique_constraint([:player_id, :key], message: "Player already has that key")
end
def encode_key(key) do