demarches-normaliennes/app/graphql/mutations/base_mutation.rb

56 lines
1.7 KiB
Ruby
Raw Normal View History

2018-11-20 22:59:13 +01:00
module Mutations
class BaseMutation < GraphQL::Schema::RelayClassicMutation
2020-12-10 16:23:24 +01:00
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)
2020-12-10 16:23:24 +01:00
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| }
2020-12-10 16:23:24 +01:00
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
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: ['Linstructeur na pas les droits daccès à ce dossier'] }
end
end
2018-11-20 22:59:13 +01:00
end
end