| 69 | // SignedTokenPB and returns a Status. |
| 70 | template <class TokenGenerator> |
| 71 | Status SignUntilRotatePast(TokenSigner* signer, TokenGenerator generate_token, |
| 72 | const string& token_type, int64_t seq_num, |
| 73 | SignedTokenPB* last_signed_by_tsk) { |
| 74 | SignedTokenPB last_signed; |
| 75 | RETURN_NOT_OK_PREPEND(generate_token(&last_signed), |
| 76 | Substitute("Failed to generate first $0 token", token_type)); |
| 77 | DCHECK_EQ(seq_num, last_signed.signing_key_seq_num()) |
| 78 | << Substitute("Unexpected starting seq_num for $0 token", token_type); |
| 79 | |
| 80 | auto cur_seq_num = seq_num; |
| 81 | while (cur_seq_num == seq_num) { |
| 82 | SleepFor(MonoDelta::FromMilliseconds(50)); |
| 83 | KLOG_EVERY_N_SECS(INFO, 1) << |
| 84 | Substitute("Generating $0 token for activity interval $1", token_type, seq_num); |
| 85 | RETURN_NOT_OK_PREPEND(signer->TryRotateKey(), "Failed to attempt to rotate key"); |
| 86 | SignedTokenPB signed_token; |
| 87 | RETURN_NOT_OK_PREPEND(generate_token(&signed_token), |
| 88 | Substitute("Failed to generate $0 token", token_type)); |
| 89 | // We want to return the last token signed by the `seq_num` TSK, so only |
| 90 | // update it when appropriate. |
| 91 | cur_seq_num = signed_token.signing_key_seq_num(); |
| 92 | if (cur_seq_num == seq_num) { |
| 93 | last_signed = std::move(signed_token); |
| 94 | } |
| 95 | } |
| 96 | *last_signed_by_tsk = std::move(last_signed); |
| 97 | return Status::OK(); |
| 98 | } |
| 99 | |
| 100 | SignedTokenPB MakeUnsignedToken(int64_t expiration) { |
| 101 | SignedTokenPB ret; |
no test coverage detected