refactor(api): create api_token with validity and network filtering

This commit is contained in:
simon lehericey 2024-01-17 11:11:38 +01:00
parent 943368c68f
commit 852eedbc50
3 changed files with 184 additions and 9 deletions

View file

@ -3,11 +3,11 @@ class APITokensController < ApplicationController
before_action :set_api_token, only: [:destroy]
def nom
@name = params[:name]
@name = name
end
def autorisations
@name = params[:name]
@name = name
@libelle_id_procedures = current_administrateur
.procedures
.order(:libelle)
@ -21,7 +21,8 @@ class APITokensController < ApplicationController
def create
@api_token, @packed_token = APIToken.generate(current_administrateur)
render :index
@api_token.update!(name:, write_access:,
allowed_procedure_ids:, authorized_networks:, expires_at:)
end
def destroy
@ -32,19 +33,56 @@ class APITokensController < ApplicationController
private
def authorized_networks
if params[:networkFiltering] == "customNetworks"
networks
else
[]
end
end
def networks
params[:networks]
.split
.map { begin IPAddr.new(_1) rescue nil end }
.compact
end
def set_api_token
@api_token = current_administrateur.api_tokens.find(params[:id])
end
def become_full_access?
api_token_params[:become_full_access].present?
def name
params[:name]
end
def disallow_procedure_id
api_token_params[:disallow_procedure_id]
def write_access
params[:access] == "read_write"
end
def api_token_params
params.require(:api_token).permit(:name, :write_access, :become_full_access, :disallow_procedure_id, allowed_procedure_ids: [])
def allowed_procedure_ids
if params[:target] == "custom"
current_administrateur
.procedure_ids
.intersection(params[:targets].map(&:to_i))
else
nil
end
end
def expires_at
case params[:lifetime]
in 'oneWeek'
1.week.from_now.to_date
in 'custom'
[
Date.parse(params[:customLifetime]),
1.year.from_now
].min
in 'infinite' if authorized_networks.present?
nil
else
1.week.from_now.to_date
end
end
end