@@ -538,3 +538,41 @@ def get_user_gpg_public_key(self, user):
538538 """
539539 url = "{}/users/{}/keys/gpg/public.key" .format (Bintray .BINTRAY_URL , user )
540540 return self ._requester .get (url )
541+
542+ def gpg_sign_version (self , subject , repo , package , version , key_subject = None , passphrase = None ,
543+ key_path = None ):
544+ """ GPG sign all files associated with the specified version.
545+
546+ GPG signing information may be needed
547+
548+ Security: Authenticated user with 'publish' permission.
549+
550+ :param subject: username or organization
551+ :param repo: repository name
552+ :param package: package name
553+ :param version: package version
554+ :param key_subject: Alternative Bintray subject for the GPG public key
555+ :param passphrase: Optional private key passphrase, if required
556+ :param key_path: Optional private key, if not stored in Bintray
557+ :return: request response
558+ """
559+ url = "{}/gpg/{}/{}/{}/versions/{}" .format (Bintray .BINTRAY_URL , subject , repo , package ,
560+ version )
561+ body = {}
562+ if subject :
563+ body ['subject' ] = key_subject
564+ if passphrase :
565+ body ['passphrase' ] = passphrase
566+ if key_path :
567+ with open (key_path , 'r' ) as fd :
568+ body ['private_key' ] = fd .read ()
569+ body = None if body == {} else body
570+ headers = None
571+ if "passphrase" in body and len (body .keys ()) == 1 :
572+ headers = {"X-GPG-PASSPHRASE" : passphrase }
573+ body = None
574+
575+ response = self ._requester .post (url , json = body , headers = headers )
576+
577+ self ._logger .info ("Sign successfully: {}" .format (url ))
578+ return response
0 commit comments