demarches-normaliennes/app/graphql/mutations/base_mutation.rb
2023-03-15 19:09:49 +01:00

55 lines
1.7 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module Mutations
class BaseMutation < GraphQL::Schema::RelayClassicMutation
private
delegate :current_administrateur, to: :context
def ready?(**args)
if context.write_access?
authorized_before_load?(**args)
else
return false, { errors: ['Le jeton utilisé est configuré seulement en lecture'] }
end
end
def authorized_before_load?(**args)
true
end
def partition_instructeurs_by(instructeurs)
instructeurs
.partition { _1.id.present? }
.then do |by_id, by_email|
[
by_id.map { Instructeur.id_from_typed_id(_1.id) },
by_email.map { EmailSanitizableConcern::EmailSanitizer.sanitize(_1.email) }
]
end
end
def validate_blob(blob_id)
begin
blob = ActiveStorage::Blob.find_signed(blob_id)
raise ActiveSupport::MessageVerifier::InvalidSignature if blob.nil?
# open downloads the file and checks its hash
blob.open { |f| }
true
rescue ActiveStorage::FileNotFoundError
return false, { errors: ['Le fichier na pas été correctement téléversé sur le serveur de stockage'] }
rescue ActiveSupport::MessageVerifier::InvalidSignature
return false, { errors: ['Lidentifiant du fichier téléversé est invalide'] }
rescue ActiveStorage::IntegrityError
return false, { errors: ['Le hash du fichier téléversé est invalide'] }
end
end
def dossier_authorized_for?(dossier, instructeur)
if instructeur.is_a?(Instructeur) && instructeur.dossiers.exists?(id: dossier.id)
true
else
return false, { errors: ['Linstructeur na pas les droits daccès à ce dossier'] }
end
end
end
end