11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/better_auth/api_key/routes/create_api_key.rb', line 11
def endpoint(config)
BetterAuth::Endpoint.new(path: "/api-key/create", method: "POST") do |ctx|
body = BetterAuth::Plugins.api_key_normalize_body(ctx.body)
resolved_config = BetterAuth::Plugins.api_key_resolve_config(ctx.context, config, body[:config_id])
session = BetterAuth::Routes.current_session(ctx, allow_nil: true)
reference_id = BetterAuth::Plugins.api_key_create_reference_id!(ctx, body, session, resolved_config)
BetterAuth::Plugins.api_key_validate_create_update!(body, resolved_config, create: true, client: !ctx..empty?)
BetterAuth::Plugins.api_key_delete_expired(ctx.context, resolved_config)
key_prefix = body.key?(:prefix) ? body[:prefix] : resolved_config[:default_prefix]
key = BetterAuth::Plugins.api_key_generate_key(resolved_config, key_prefix)
now = Time.now
hashed = BetterAuth::Plugins.api_key_hash(key, resolved_config)
data = {
configId: resolved_config[:config_id] || "default",
name: body[:name],
start: resolved_config[:starting_characters_config][:should_store] ? key[0, resolved_config[:starting_characters_config][:characters_length].to_i] : nil,
prefix: key_prefix,
key: hashed,
referenceId: reference_id,
enabled: true,
rateLimitEnabled: body.key?(:rate_limit_enabled) ? body[:rate_limit_enabled] : resolved_config[:rate_limit][:enabled],
rateLimitTimeWindow: body[:rate_limit_time_window] || resolved_config[:rate_limit][:time_window],
rateLimitMax: body[:rate_limit_max] || resolved_config[:rate_limit][:max_requests],
requestCount: 0,
remaining: body.key?(:remaining) ? body[:remaining] : nil,
refillAmount: body[:refill_amount],
refillInterval: body[:refill_interval],
lastRefillAt: nil,
expiresAt: BetterAuth::Plugins.api_key_expires_at(body, resolved_config),
createdAt: now,
updatedAt: now,
permissions: BetterAuth::Plugins.api_key_encode_json(body[:permissions] || BetterAuth::Plugins.api_key_default_permissions(resolved_config, reference_id, ctx)),
metadata: body.key?(:metadata) ? BetterAuth::Plugins.api_key_encode_json(body[:metadata]) : nil
}
record = BetterAuth::Plugins.api_key_store(ctx, data, resolved_config)
BetterAuth::Plugins.api_key_public(record, reveal_key: key, include_key_field: true)
end
end
|