Skip to content

Commit

Permalink
Add XSD validation
Browse files Browse the repository at this point in the history
  • Loading branch information
luciajanikova committed Dec 5, 2023
1 parent 2f3847d commit 7f701e2
Show file tree
Hide file tree
Showing 6 changed files with 1,219 additions and 5 deletions.
9 changes: 9 additions & 0 deletions app/components/message_template_component.html.erb
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
<% if @message.errors[:base].any? %>
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative w-full" role="alert">
<% @message.errors.full_messages_for(:base).each do |error| %>
<strong class="font-bold"><%= error %></strong>
<% end %>
</div>
<% end %>


<%
message_draft_body_form_id = "#{dom_id(@message, :body)}_form"
%>
Expand Down
2 changes: 1 addition & 1 deletion app/javascript/controllers/autogram_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export default class extends Controller {
// TODO handle login if expired session

if (response.status === 204) {
alert("Vyplňte text správy");
alert("Vyplňte správu");
}
else {
return response.json();
Expand Down
3 changes: 3 additions & 0 deletions app/jobs/govbox/submit_message_draft_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ class TemporarySubmissionError < SubmissionError
retry_on TemporarySubmissionError, wait: 2.minutes, attempts: 5

def perform(message_draft, schedule_sync: true, upvs_client: UpvsEnvironment.upvs_client)
raise "Invalid message!" unless message_draft.valid?(:validate_data)

all_message_metadata = message_draft.metadata.merge(message_draft.template&.metadata)

message_draft_data = {
Expand All @@ -33,6 +35,7 @@ def perform(message_draft, schedule_sync: true, upvs_client: UpvsEnvironment.upv
handle_submit_fail(message_draft, response_status, response_body.dig("message"))
end
end

private

def build_objects(message_draft)
Expand Down
22 changes: 22 additions & 0 deletions app/models/upvs/message_template.rb
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,18 @@ def validate_message(message)
required_template_items.each do |template_item|
message.errors.add(:metadata, :blank, attribute: template_item) unless message.metadata["data"][template_item].present?
end

return if message.errors[:metadata].any?

xsd_schema = upvs_form&.xsd_schema

raise "Missing XSD schema: #{name}" unless xsd_schema

schema = Nokogiri::XML::Schema(xsd_schema)
document = Nokogiri::XML(message.form.content)
errors = schema.validate(document)

message.errors.add(:base, :invalid_form) if errors.any?
end

def create_form_object(message)
Expand All @@ -124,4 +136,14 @@ def create_form_object(message)
is_signed: false
)
end

private

def upvs_form
Upvs::Form.find_by(
identifier: metadata['posp_id'],
version: metadata['posp_version'],
message_type: metadata['message_type']
)
end
end
1 change: 1 addition & 0 deletions config/locales/sk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ sk:
errors:
messages:
record_invalid: "Validácia neúspešná: %{errors}"
invalid_form: "Formulár nie je validný voči XSD"
models:
tag:
attributes:
Expand Down
Loading

0 comments on commit 7f701e2

Please sign in to comment.