2018-11-20 22:59:13 +01:00
|
|
|
|
module Mutations
|
2019-09-17 18:11:34 +02:00
|
|
|
|
class BaseMutation < GraphQL::Schema::RelayClassicMutation
|
2020-12-10 16:23:24 +01:00
|
|
|
|
private
|
|
|
|
|
|
2023-01-10 17:20:22 +01:00
|
|
|
|
delegate :current_administrateur, to: :context
|
|
|
|
|
|
2023-02-13 14:25:17 +01:00
|
|
|
|
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
|
|
|
|
|
|
2023-01-10 17:20:22 +01:00
|
|
|
|
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
|
|
|
|
|
|
2020-11-12 20:07:42 +01:00
|
|
|
|
def validate_blob(blob_id)
|
2020-12-10 16:23:24 +01:00
|
|
|
|
begin
|
|
|
|
|
blob = ActiveStorage::Blob.find_signed(blob_id)
|
2021-04-14 21:56:36 +02:00
|
|
|
|
raise ActiveSupport::MessageVerifier::InvalidSignature if blob.nil?
|
|
|
|
|
|
2020-12-10 21:55:45 +01:00
|
|
|
|
# open downloads the file and checks its hash
|
|
|
|
|
blob.open { |f| }
|
2020-12-10 16:23:24 +01:00
|
|
|
|
true
|
|
|
|
|
rescue ActiveStorage::FileNotFoundError
|
|
|
|
|
return false, { errors: ['Le fichier n’a pas été correctement téléversé sur le serveur de stockage'] }
|
|
|
|
|
rescue ActiveSupport::MessageVerifier::InvalidSignature
|
2020-12-10 21:55:45 +01:00
|
|
|
|
return false, { errors: ['L’identifiant du fichier téléversé est invalide'] }
|
|
|
|
|
rescue ActiveStorage::IntegrityError
|
2020-12-10 16:23:24 +01:00
|
|
|
|
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: ['L’instructeur n’a pas les droits d’accès à ce dossier'] }
|
2020-11-12 20:07:42 +01:00
|
|
|
|
end
|
|
|
|
|
end
|
2018-11-20 22:59:13 +01:00
|
|
|
|
end
|
|
|
|
|
end
|