package Ġcom . a urity lab . spring . gcp . tasks . core . signature Ċ Ċ import Ġcom . a urity lab . spring . gcp . tasks . properties . Cloud Tasks Properties Ċ import Ġcom . google . common . hash . Hash ing Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . lang . IllegalArgumentException Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . util . Base 6 4 Ċ Ċ data Ġclass ĠTask Signature Data ( ĊĠĠĠ Ġval Ġpayload : ĠString , ĊĠĠĠ Ġval Ġworker Route : ĠString , ĊĠĠĠ Ġval ĠtaskId : ĠString , ĊĠĠĠ Ġval Ġuser Agent : ĠString , ĊĠĠĠ Ġval Ġtimestamp : ĠString , ĊĠĠĠ Ġval Ġversion : ĠString Ċ ) Ċ Ċ data Ġclass ĠTask Signature ( val Ġdata : ĠTask Signature Data , Ġval Ġsignature : ĠString ) Ċ Ċ @ Service Ċ class ĠTask Signature Handler ( ĊĠĠĠ Ġprivate Ġval Ġproperties : ĠCloud Tasks Properties Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġsign ( data : ĠTask Signature Data ): ĠTask Signature Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġcreate Signature ( properties . signature Secret , Ġdata ) ĊĠĠĠĠĠĠĠ Ġval Ġencoded Signature Ġ= Ġencode Signature ( signature ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTask Signature ( data , Ġencoded Signature ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġverify ( signature : ĠTask Signature ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Data Ġ= Ġsignature . data ĊĠĠĠĠĠĠĠ Ġval Ġcreated Signature Ġ= Ġcreate Signature ( properties . signature Secret , Ġtask Data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgiven Signature Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecode Signature ( signature . signature ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreated Signature . content Equals ( given Signature ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Signature ( secret : ĠString , Ġdata : ĠTask Signature Data ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠHash ing . hmac Sha 2 5 6 ( secret . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. new Hash er () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( data . payload , ĠStandard Charsets . UTF _ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( data . worker Route , ĠStandard Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( data . taskId , ĠStandard Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( data . userAgent , ĠStandard Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( data . timestamp , ĠStandard Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( data . version , ĠStandard Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. hash () ĊĠĠĠĠĠĠĠ Ġreturn Ġhash . as Bytes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencode Signature ( signature : ĠByteArray ): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠBase 6 4 . get Encoder (). without Padding (). encode ToString ( signature ) ĊĊĠĠĠ Ġprivate Ġfun Ġdecode Signature ( signature : ĠString ): ĠByteArray Ġ= ĊĠĠĠĠĠĠĠ ĠBase 6 4 . get Decoder (). decode ( signature ) Ċ } Ċ