in pkg/mock/imdsv2/tokengenerator.go [44:75]
func GenerateToken(res http.ResponseWriter, req *http.Request) {
log.Printf("GenerateToken Received request: %v", req)
// only valid with PUT
if req.Method != http.MethodPut {
return
}
// check that header contains valid ttl
requestedTTL := req.Header.Get(tokenTTLHeader)
validTTL, err := extractValidTTL(requestedTTL)
if err != nil {
log.Printf("Something went wrong with ttl validation: %v with requested TTL: %v", err.Error(), requestedTTL)
server.ReturnBadRequestResponse(res)
return
}
key := make([]byte, 32)
_, err = rand.Read(key)
if err != nil {
server.FormatAndReturnTextResponse(res, "Something went wrong with token creation")
return
}
tokenValue := base64.StdEncoding.EncodeToString(key)
token := v2Token{
Value: tokenValue,
TTL: validTTL,
CreatedAt: time.Now(),
}
generatedTokens[token.Value] = token
res.Header().Set(tokenTTLHeader, strconv.Itoa(token.TTL))
server.FormatAndReturnTextResponse(res, token.Value)
}