Для проверки подписи в некоторых вызовах API мне нужно вычислить подпись из тела запроса и сравнить ее с подписью в заголовке. Поскольку я не смог найти какие-либо предопределенные директивы, которые могли бы выполнять эту работу, я придумал собственную, подобную этой:
def verifySignature(channelSecret: String): Directive0 =
headerValueByName("X-Line-Signature").flatMap { signature =>
entity(as[String]).flatMap { bodyString =>
if (computeSignature(channelSecret, bodyString) == signature) pass
else reject
}
}
Это работает, как и ожидалось.
Так что мне просто интересно, может ли это быть лучше. Есть ли какая-нибудь директива, которая может улучшить эту работу? И правильно ли использовать pass?