fabric
fabric copied to clipboard
Registrar REST API call to retrieve more than 1 TCert returns duplicate TCerts
When requesting more than one TCert using the REST API call:
http://<host>:5000/registrar/<userid>/tcert?count=5 (using 5 as an example)
... the JSON Response to this request returns:
{
"OK": [
"-----BEGIN+CERTIFICATE-----%0AMIICgDCCAiagAwIBAgIQUn%2FNPmZYQJOQOm9AQhvolDAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABA9E%0Af0cHGQ6Vi7ojKmtamXpK6BqvRd9%2FMxCKeyF8oeZUu7N3rI7g7Z8FbD%2FF6Fq%2Fcg3a%0AO%2BNEISykJwc%2B%2BFzsVMmjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBECd%0AcRoOIOsFN%2BYAa0zy%2Fk293lAjX3VHFhD1BHkvrbQHAZ0cwj4ch2M%2BR3FKz47m9qiG%0AE5iX20PAyqoitfFwpk%2BTMEoGBioDBAUGCARA%2FZmyn3ilQBopTxmam1cpu5Y6yFuJ%0AzT69gJgIm382wbsprcJIqfpsunZJXDhAAKZo263zmNTqonoONWDCzkJjlDAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0gAMEUC%0AIQDfSeirVRiFGaQISPpRkJOAt8fmi0UPndyDVds1Vjqt0AIgNj5s7xsOKGuKd0sv%0AxzznIOP7qK2S6ULZFSsURRi2ceA%3D%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgDCCAiagAwIBAgIQUn%2FNPmZYQJOQOm9AQhvolDAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABA9E%0Af0cHGQ6Vi7ojKmtamXpK6BqvRd9%2FMxCKeyF8oeZUu7N3rI7g7Z8FbD%2FF6Fq%2Fcg3a%0AO%2BNEISykJwc%2B%2BFzsVMmjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBECd%0AcRoOIOsFN%2BYAa0zy%2Fk293lAjX3VHFhD1BHkvrbQHAZ0cwj4ch2M%2BR3FKz47m9qiG%0AE5iX20PAyqoitfFwpk%2BTMEoGBioDBAUGCARA%2FZmyn3ilQBopTxmam1cpu5Y6yFuJ%0AzT69gJgIm382wbsprcJIqfpsunZJXDhAAKZo263zmNTqonoONWDCzkJjlDAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0gAMEUC%0AIQDfSeirVRiFGaQISPpRkJOAt8fmi0UPndyDVds1Vjqt0AIgNj5s7xsOKGuKd0sv%0AxzznIOP7qK2S6ULZFSsURRi2ceA%3D%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgDCCAiagAwIBAgIQUn%2FNPmZYQJOQOm9AQhvolDAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABA9E%0Af0cHGQ6Vi7ojKmtamXpK6BqvRd9%2FMxCKeyF8oeZUu7N3rI7g7Z8FbD%2FF6Fq%2Fcg3a%0AO%2BNEISykJwc%2B%2BFzsVMmjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBECd%0AcRoOIOsFN%2BYAa0zy%2Fk293lAjX3VHFhD1BHkvrbQHAZ0cwj4ch2M%2BR3FKz47m9qiG%0AE5iX20PAyqoitfFwpk%2BTMEoGBioDBAUGCARA%2FZmyn3ilQBopTxmam1cpu5Y6yFuJ%0AzT69gJgIm382wbsprcJIqfpsunZJXDhAAKZo263zmNTqonoONWDCzkJjlDAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0gAMEUC%0AIQDfSeirVRiFGaQISPpRkJOAt8fmi0UPndyDVds1Vjqt0AIgNj5s7xsOKGuKd0sv%0AxzznIOP7qK2S6ULZFSsURRi2ceA%3D%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgDCCAiagAwIBAgIQUn%2FNPmZYQJOQOm9AQhvolDAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABA9E%0Af0cHGQ6Vi7ojKmtamXpK6BqvRd9%2FMxCKeyF8oeZUu7N3rI7g7Z8FbD%2FF6Fq%2Fcg3a%0AO%2BNEISykJwc%2B%2BFzsVMmjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBECd%0AcRoOIOsFN%2BYAa0zy%2Fk293lAjX3VHFhD1BHkvrbQHAZ0cwj4ch2M%2BR3FKz47m9qiG%0AE5iX20PAyqoitfFwpk%2BTMEoGBioDBAUGCARA%2FZmyn3ilQBopTxmam1cpu5Y6yFuJ%0AzT69gJgIm382wbsprcJIqfpsunZJXDhAAKZo263zmNTqonoONWDCzkJjlDAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0gAMEUC%0AIQDfSeirVRiFGaQISPpRkJOAt8fmi0UPndyDVds1Vjqt0AIgNj5s7xsOKGuKd0sv%0AxzznIOP7qK2S6ULZFSsURRi2ceA%3D%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgDCCAiagAwIBAgIQUn%2FNPmZYQJOQOm9AQhvolDAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABA9E%0Af0cHGQ6Vi7ojKmtamXpK6BqvRd9%2FMxCKeyF8oeZUu7N3rI7g7Z8FbD%2FF6Fq%2Fcg3a%0AO%2BNEISykJwc%2B%2BFzsVMmjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBECd%0AcRoOIOsFN%2BYAa0zy%2Fk293lAjX3VHFhD1BHkvrbQHAZ0cwj4ch2M%2BR3FKz47m9qiG%0AE5iX20PAyqoitfFwpk%2BTMEoGBioDBAUGCARA%2FZmyn3ilQBopTxmam1cpu5Y6yFuJ%0AzT69gJgIm382wbsprcJIqfpsunZJXDhAAKZo263zmNTqonoONWDCzkJjlDAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0gAMEUC%0AIQDfSeirVRiFGaQISPpRkJOAt8fmi0UPndyDVds1Vjqt0AIgNj5s7xsOKGuKd0sv%0AxzznIOP7qK2S6ULZFSsURRi2ceA%3D%0A-----END+CERTIFICATE-----%0A"
]
}
All of the returned TCerts are duplicates of each other.
I looked at the REST API code in rest_api.go, in particular, the GetTransactionCert function. Line 514 of rest_api.go, handler, err := sec.GetTCertificateHandlerNext(), looks like the function that retrieves the next TCert within the TCert pool. However, this line is not included in the for loop (starting on line 535 of rest_api.go) that is used to retrieve the number of TCerts specified by the count parameter specified in the REST call. It appears that this for loop is extracting the same TCert over and over again.
Just as an experiment, I placed lines 513-530 after line 535 and recompiled the peer executable binary. When I issued the same REST API call to retrieve 5 TCerts, I received the following JSON response:
{
"OK": [
"-----BEGIN+CERTIFICATE-----%0AMIICgTCCAiagAwIBAgIQPDmT63l7T%2B2RaTjL%2BL7zajAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABK7O%0A2h1iOWa4pf9%2Fa4OQ3xoBo92U7PC5iZPZ6n%2Bziggr3iDlAzBDEfLP0L6cRQ63bQBD%0AJQDb%2FVbZocVPwxgH1gmjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBEBG%0AyFzAr7NgPB0ZfNYaY1vfEZkerpCG9kqlHo23%2FyaMsTucet7PYuokhMWW7M0A6FXV%0ANo7LeAq77DqVBpmC3TkKMEoGBioDBAUGCARAwQAxUaKeCcGkCXhMl4WIZtniL51z%0A%2FSXl5dnIge91JUXjC0ST59bRLF1TF%2BozM1fvUPWCimwOj8NytRocvdIMNDAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0kAMEYC%0AIQDGD5OFQ5Tr%2Feagkpltb%2BYict9h1%2FHIWhpTVSsmgEK5pgIhAKqYr1OoTPRMaeMd%0Ay50Zfllvtg3SfeZdE4JQXI6BUohX%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgTCCAiegAwIBAgIRAP4BD5xNDEOfkYK%2FyhPVRwcwCgYIKoZIzj0EAwMwKTEL%0AMAkGA1UEBhMCVVMxDDAKBgNVBAoTA0lCTTEMMAoGA1UEAxMDdGNhMB4XDTE2MDUx%0AMjE4NDAyN1oXDTE2MDgxMDE4NDAyN1owKzELMAkGA1UEBhMCVVMxDDAKBgNVBAoT%0AA0lCTTEOMAwGA1UEAxMFbHVrYXMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARK%0AXXeN8b3rZNycZGJkSGVbCEtDOfGsgCXdPQZAzlEJspZ6FTp7chP5kDTuHcvUupVm%0ArVogzZbG%2FiFyvcKqTfmRo4IBLDCCASgwDgYDVR0PAQH%2FBAQDAgeAMAwGA1UdEwEB%0A%2FwQCMAAwDQYDVR0OBAYEBAECAwQwDwYDVR0jBAgwBoAEAQIDBDANBgYqAwQFBgoE%0AA0lCTTAbBgYqAwQFBgsEEVNvZnR3YXJlIEVuZ2luZWVyME0GBioDBAUGBwEB%2FwRA%0AjNlltLyT8Z%2F%2BoS3lhqeO%2FhATAjSMmVG62%2Bjyd8jngamNb7UBhFwzjT%2F8lNoDW0mL%0AqRPA7VoKlGcTTTRYuoCyCzBKBgYqAwQFBggEQAKXhYH8s12qCbbDbWCv124ToO%2Ba%0AHWxLQRc9EIzsXFeHbIE8kFMe0w2uDfSD7%2B6jFMSP6lbeXd7v1z0SI6Amcu8wIQYG%0AKgMEBQYJBBdjb21wYW55LT4xI3Bvc2l0aW9uLT4yIzAKBggqhkjOPQQDAwNIADBF%0AAiAgNyCLG7UzNYmKGpz7GcnPalLSN0KPdWpprzj%2Fv4h5ggIhAP8s9OLz1nuDIWhm%0ArjjuEwbt7as5AiRgDs9Tev3D7Tsk%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgDCCAiagAwIBAgIQVYVu2OkASXqIj%2BZ2FfGIPTAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAUr%0ArbkSD68iosVOmVsqJQxlnhSfv9MXSO%2FSANgSnjGWIlFGPuH2U7sovXXaQXuoUBCa%0AZrlPgl7Ghe3P1RHr23SjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBEBK%0AswlFHm0X8DBzDIkDsPokr5YUqElt4eJLSakLBB6jJpSeu19TA4Ye7918RPvuBhfi%0AlruTOGZBBKlnXIFofg5dMEoGBioDBAUGCARAENKhFF663b9g4BjRoPU36Bl2U0HE%0A3SB98FkADUs6VcHiuPZpbZd5GQzXJ%2Fg0zt0fLx7rnGV2wU1tcnV8claQfTAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0gAMEUC%0AIQD%2B4YzYY8x45FqeKFmyL9%2BRuGVMHNRzm%2B5jFqx0mWSqswIgLJ1a%2FTVJpW9oORPK%0AflTy9N69bNYohJ3ZgwzX2ui6Vuk%3D%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgDCCAiagAwIBAgIQXTW85fcmSSSnoI5DfJLoezAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABExj%0AfBG4OX5oyJ33cNMIu%2Bt7jsE2xl9i5K6ehiNOlVgj21y8wU2rFQ%2FMgXpsXKl8jCLi%0A3TOLL5l23Gi3GtRILo2jggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBEDX%0ARcJTq3QRcz2Z%2Bq9uAUOdATKWYw93Zh9qW4czooMq221DW2XwKZ%2FHxglhM35Rf9Zf%0A2BqKLt0EmsGDvmIz5EdpMEoGBioDBAUGCARAEpi1qRC%2BYzQdhilCXc8M47pDXBKE%0AMkBItXPqflHfjCFtH71k%2F5NS5QwgmOyOKqPj0IynG87%2FtoQUZfYw1ZZAOjAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0gAMEUC%0AIHhr4sZ7wu2ZTUkEitU71vBumuQSPHTNv6jxPKOedixaAiEA%2F9pXNiba781C%2BD7d%0Apyi4FW61j6X%2BH1trPz1dnKWipGY%3D%0A-----END+CERTIFICATE-----%0A",
"-----BEGIN+CERTIFICATE-----%0AMIICgTCCAiagAwIBAgIQceMnrqi3TzyA2Ym9foUzRTAKBggqhkjOPQQDAzApMQsw%0ACQYDVQQGEwJVUzEMMAoGA1UEChMDSUJNMQwwCgYDVQQDEwN0Y2EwHhcNMTYwNTEy%0AMTg0MDI3WhcNMTYwODEwMTg0MDI3WjArMQswCQYDVQQGEwJVUzEMMAoGA1UEChMD%0ASUJNMQ4wDAYDVQQDEwVsdWthczBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABP%2FT%0AWDr6zK0Tuwid9sCUo1hdq5%2BMrTtZxrC08e13porwTEY9nBkG%2BC%2BlF5NaQA28cm2Y%0AKZIMSeaG26YWfswD0GmjggEsMIIBKDAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH%2F%0ABAIwADANBgNVHQ4EBgQEAQIDBDAPBgNVHSMECDAGgAQBAgMEMA0GBioDBAUGCgQD%0ASUJNMBsGBioDBAUGCwQRU29mdHdhcmUgRW5naW5lZXIwTQYGKgMEBQYHAQH%2FBEAF%0AIv9SQDgjQIJ2npmIwURQluoz51hP1daysLQHvMxiJoNJ9gD%2FEr7tiupermkFiit7%0AiAiUfUEJRt06W7ZP7hWMMEoGBioDBAUGCARAlcZt5jKKYMD%2FJNbtWK5wYi8gvQIc%0AM2yyyLJnhP7RatwY68eTQvsxwNdTJyzwd%2F%2Bxi129MGQLcTEkKrLS5ZvUPjAhBgYq%0AAwQFBgkEF2NvbXBhbnktPjEjcG9zaXRpb24tPjIjMAoGCCqGSM49BAMDA0kAMEYC%0AIQC%2BdUtUs3z9tpx7D949D4VxkQSNPtlGJaoscRljZU9QXQIhAK311jpvvbNBekjJ%0AeZqUGzmV4T3IZRAYqCFJknDwhqXq%0A-----END+CERTIFICATE-----%0A"
]
}
This may not be the most efficient or workable fix for this issue, but I just wanted to show one possible solution.
@adecaro
Hi @harrijk, thanks for the feedback. @angrbrd, please, may you have a look at this? Thanks :)
@harrijk: this is a great bug report! Thank you.
Maintainers: I'll be working on this with @angrbrd, as I need to refactor something in this exact portion of the code quickly.