package Ġde . z al ando . z ally . rule . z al ando Ċ Ċ import Ġcom . types afe . config . Config Ċ import Ġde . z al ando . z ally . rule . api . Check Ċ import Ġde . z al ando . z ally . rule . api . Rule Ċ import Ġde . z al ando . z ally . rule . api . Severity Ċ import Ġde . z al ando . z ally . rule . api . Violation Ċ import Ġde . z al ando . z ally . util . Pattern Util Ċ import Ġde . z al ando . z ally . util . getAll Json Objects Ċ import Ġio . swagger . models . Swagger Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ Ċ @ Rule ( ĊĠĠĠĠĠĠĠ Ġrule Set Ġ= ĠZ al ando Rule Set :: class , ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ" 1 1 8 ", ĊĠĠĠĠĠĠĠ Ġseverity Ġ= ĠSeverity . MUST , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" snake _ case Ġproperty Ġnames " Ċ ) Ċ class ĠSn ake Case In Prop Name Rule (@ Autowired Ġrules Config : ĠConfig ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdescription Ġ= Ġ" Property Ġnames Ġmust Ġbe Ġsnake _ case : Ġ" ĊĊĠĠĠ Ġprivate Ġval Ġwhitelist Ġ= Ġrules Config . getString List ( Snake Case In Prop Name Rule :: class . simple Name Ġ+ Ġ". whitelist "). toSet () ĊĊĠĠĠ Ġ@ Check ( severity Ġ= ĠSeverity . MUST ) ĊĠĠĠ Ġfun Ġvalidate ( swagger : ĠSwagger ): ĠVi olation ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġswagger . getAll Json Objects (). flatMap Ġ{ Ġ( def , Ġpath ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbad Props Ġ= Ġdef . keys . filter Not Ġ{ ĠPattern Util . is Snake Case ( it ) Ġ|| Ġwhitelist . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bad Props . isNotEmpty ()) ĠlistOf ( bad Props Ġto Ġpath ) Ġelse Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( props , Ġpaths ) Ġ= Ġresult . unzip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= Ġprops . flatten (). toSet (). join ToString (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVi olation ( description Ġ+ Ġproperties , Ġpaths ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} Ċ } Ċ