package Ġdev . ith ur ts . plugin . client Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġdev . ith ur ts . plugin . ide . service . Credentials Service Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Response Ċ Ċ class ĠIt H ur ts Token Expired Interceptor ( private Ġval Ġrefresh Tokens : Ġ() Ġ-> ĠUnit ) Ġ: ĠInter ceptor Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmapper Ġ= ĠObjectMapper () ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchain . proceed ( chain . request ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( response . code Ġ== Ġ 4 0 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġmapper . readValue ( response . body !!. string (), ĠIt H ur ts Error :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" token _ expired " Ġ== Ġerror . reason ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrefresh And Retry ( response , Ġchain ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh And Retry ( response : ĠResponse , Ġchain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Tokens () ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Service Ġ= Ġservice < Credentials Service >() ĊĠĠĠĠĠĠĠ Ġif Ġ(! credentials Service . has Credentials ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request (). newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Header (" Authorization ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Authorization ", Ġ" Bearer Ġ${ credentials Service . get AccessToken () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( request ); ĊĠĠĠ Ġ} Ċ }