faaso/src/daemon/secrets.cr

47 lines
1.2 KiB
Crystal
Raw Normal View History

2024-07-01 14:48:52 +00:00
require "kemal"
2024-07-02 22:03:29 +00:00
require "../secrets.cr"
2024-07-01 14:48:52 +00:00
module Secrets
2024-07-02 22:03:29 +00:00
extend self
2024-07-01 14:48:52 +00:00
# TODO: sanitize all inputs
# Gets a secret in form {"name": "funko_name-secret_name", "value": "secret_value"}
post "/secrets/" do |env|
2024-07-03 23:54:19 +00:00
funko = env.params.body["funko"].as(String)
name = env.params.body["name"].as(String)
value = env.params.body["value"].as(String)
if funko.empty? || name.empty? || value.empty?
halt env, status_code: 400, response: "Bad request"
end
SECRETS["#{funko}-#{name}"] = value
2024-07-01 14:48:52 +00:00
Secrets.update_secrets
halt env, status_code: 201, response: "Created"
end
2024-07-02 18:32:31 +00:00
get "/secrets/" do |env|
2024-07-03 23:54:19 +00:00
result = [] of Hash(String, String)
SECRETS.each { |k, _|
result << {
"funko" => k.split("-")[0],
"name" => k.split("-", 2)[1],
}
}
if env.params.query.fetch("format", "json") == "html"
render "src/views/secrets.ecr"
else
result.to_json
end
2024-07-02 18:32:31 +00:00
end
2024-07-01 14:48:52 +00:00
# Deletes a secret from the disk and memory
2024-07-04 13:38:15 +00:00
delete "/secrets/:funko/:name/" do |env|
funko = env.params.url["funko"]
2024-07-01 14:48:52 +00:00
name = env.params.url["name"]
2024-07-04 13:38:15 +00:00
SECRETS.delete("#{funko}-#{name}")
2024-07-01 14:48:52 +00:00
update_secrets
halt env, status_code: 204, response: "Deleted"
end
end
2024-07-02 18:32:31 +00:00
2024-07-02 18:32:57 +00:00
Secrets.load_secrets