add nokey to create project

This commit is contained in:
Jay Lee
2024-06-21 16:19:39 +00:00
parent c12ee6438c
commit d5ad1cb2fb
2 changed files with 14 additions and 9 deletions

View File

@ -1345,7 +1345,8 @@ gam create project [admin <EmailAddress>] [project <ProjectID>]
[sadescription <ServiceAccountDescription>] [sadescription <ServiceAccountDescription>]
[(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)| [(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|
(localkeysize 1024|2048|4096 [validityhours <Number>])| (localkeysize 1024|2048|4096 [validityhours <Number>])|
(yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)] (yubikey yubikey_pin yubikey_slot AUTHENTICATION|SIGNATURE yubikey_serialnumber <Number>)|
(nokey)]
gam use project [<EmailAddress>] [<ProjectID>] gam use project [<EmailAddress>] [<ProjectID>]
gam use project [admin <EmailAddress>] [project <ProjectID>] gam use project [admin <EmailAddress>] [project <ProjectID>]
[saname <ServiceAccountName>] [sadisplayname <ServiceAccountDisplayName>] [saname <ServiceAccountName>] [sadisplayname <ServiceAccountDisplayName>]

View File

@ -11196,7 +11196,7 @@ def _grantRotateRights(iam, projectId, service_account, email, account_type='ser
callGAPI(iam.projects().serviceAccounts(), 'setIamPolicy', callGAPI(iam.projects().serviceAccounts(), 'setIamPolicy',
resource=f'projects/{projectId}/serviceAccounts/{service_account}', body=body) resource=f'projects/{projectId}/serviceAccounts/{service_account}', body=body)
def _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo): def _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo, create_key=True):
iam = getAPIService(API.IAM, httpObj) iam = getAPIService(API.IAM, httpObj)
try: try:
service_account = callGAPI(iam.projects().serviceAccounts(), 'create', service_account = callGAPI(iam.projects().serviceAccounts(), 'create',
@ -11213,7 +11213,7 @@ def _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo):
entityActionFailedWarning([Ent.PROJECT, projectInfo['projectId'], Ent.SVCACCT, svcAcctInfo['name']], str(e)) entityActionFailedWarning([Ent.PROJECT, projectInfo['projectId'], Ent.SVCACCT, svcAcctInfo['name']], str(e))
return False return False
GM.Globals[GM.SVCACCT_SCOPES_DEFINED] = False GM.Globals[GM.SVCACCT_SCOPES_DEFINED] = False
if not doProcessSvcAcctKeys(mode='retainexisting', iam=iam, projectId=service_account['projectId'], if create_key and not doProcessSvcAcctKeys(mode='retainexisting', iam=iam, projectId=service_account['projectId'],
clientEmail=service_account['email'], clientId=service_account['uniqueId']): clientEmail=service_account['email'], clientId=service_account['uniqueId']):
return False return False
sa_email = service_account['name'].rsplit('/', 1)[-1] sa_email = service_account['name'].rsplit('/', 1)[-1]
@ -11230,7 +11230,7 @@ def setGAMProjectConsentScreen(httpObj, projectId, appInfo):
except (GAPI.invalidArgument, GAPI.alreadyExists): except (GAPI.invalidArgument, GAPI.alreadyExists):
pass pass
def _createClientSecretsOauth2service(httpObj, login_hint, appInfo, projectInfo, svcAcctInfo): def _createClientSecretsOauth2service(httpObj, login_hint, appInfo, projectInfo, svcAcctInfo, create_key=True):
def _checkClientAndSecret(csHttpObj, client_id, client_secret): def _checkClientAndSecret(csHttpObj, client_id, client_secret):
post_data = {'client_id': client_id, 'client_secret': client_secret, post_data = {'client_id': client_id, 'client_secret': client_secret,
@ -11293,7 +11293,7 @@ def _createClientSecretsOauth2service(httpObj, login_hint, appInfo, projectInfo,
sys.stdout.write(Msg.GO_BACK_TO_YOUR_BROWSER_AND_CLICK_OK_TO_CLOSE_THE_OAUTH_CLIENT_POPUP) sys.stdout.write(Msg.GO_BACK_TO_YOUR_BROWSER_AND_CLICK_OK_TO_CLOSE_THE_OAUTH_CLIENT_POPUP)
sys.stdout.write(Msg.TRUST_GAM_CLIENT_ID.format(GAM, client_id)) sys.stdout.write(Msg.TRUST_GAM_CLIENT_ID.format(GAM, client_id))
readStdin('') readStdin('')
if not _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo): if not _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo, create_key):
return return
sys.stdout.write(Msg.YOUR_GAM_PROJECT_IS_CREATED_AND_READY_TO_USE) sys.stdout.write(Msg.YOUR_GAM_PROJECT_IS_CREATED_AND_READY_TO_USE)
@ -11385,6 +11385,7 @@ def _generateProjectSvcAcctId(prefix):
def _getLoginHintProjectInfo(createCmd): def _getLoginHintProjectInfo(createCmd):
login_hint = None login_hint = None
create_key = True
appInfo = {'applicationTitle': '', 'supportEmail': ''} appInfo = {'applicationTitle': '', 'supportEmail': ''}
projectInfo = {'projectId': '', 'parent': '', 'name': ''} projectInfo = {'projectId': '', 'parent': '', 'name': ''}
svcAcctInfo = {'name': '', 'displayName': '', 'description': ''} svcAcctInfo = {'name': '', 'displayName': '', 'description': ''}
@ -11404,6 +11405,8 @@ def _getLoginHintProjectInfo(createCmd):
myarg = getArgument() myarg = getArgument()
if myarg == 'admin': if myarg == 'admin':
login_hint = getEmailAddress(noUid=True) login_hint = getEmailAddress(noUid=True)
elif myarg == 'nokey':
create_key = False
elif myarg == 'project': elif myarg == 'project':
projectInfo['projectId'] = getString(Cmd.OB_STRING, minLen=6, maxLen=30) projectInfo['projectId'] = getString(Cmd.OB_STRING, minLen=6, maxLen=30)
_checkProjectId(projectInfo['projectId']) _checkProjectId(projectInfo['projectId'])
@ -11453,7 +11456,7 @@ def _getLoginHintProjectInfo(createCmd):
else: else:
if projects: if projects:
entityActionFailedExit([Ent.USER, login_hint, Ent.PROJECT, projectInfo['projectId']], Msg.DUPLICATE) entityActionFailedExit([Ent.USER, login_hint, Ent.PROJECT, projectInfo['projectId']], Msg.DUPLICATE)
return (crm, httpObj, login_hint, appInfo, projectInfo, svcAcctInfo) return (crm, httpObj, login_hint, appInfo, projectInfo, svcAcctInfo, create_key)
def _getCurrentProjectId(): def _getCurrentProjectId():
jsonData = readFile(GC.Values[GC.OAUTH2SERVICE_JSON], continueOnError=True, displayError=False) jsonData = readFile(GC.Values[GC.OAUTH2SERVICE_JSON], continueOnError=True, displayError=False)
@ -11607,12 +11610,13 @@ def doCreateGCPFolder():
# [saname <ServiceAccountName>] [sadisplayname <ServiceAccountDisplayName>] [sadescription <ServiceAccountDescription>] # [saname <ServiceAccountName>] [sadisplayname <ServiceAccountDisplayName>] [sadescription <ServiceAccountDescription>]
# [(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)| # [(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|
# (localkeysize 1024|2048|4096 [validityhours <Number>])| # (localkeysize 1024|2048|4096 [validityhours <Number>])|
# (yubikey yubikey_pin yubikey_slot AUTHENTICATION yubikey_serialnumber <String>)] # (yubikey yubikey_pin yubikey_slot AUTHENTICATION yubikey_serialnumber <String>)|
# (nokey)]
def doCreateProject(): def doCreateProject():
_checkForExistingProjectFiles([GC.Values[GC.OAUTH2SERVICE_JSON], GC.Values[GC.CLIENT_SECRETS_JSON]]) _checkForExistingProjectFiles([GC.Values[GC.OAUTH2SERVICE_JSON], GC.Values[GC.CLIENT_SECRETS_JSON]])
sys.stdout.write(Msg.TRUST_GAM_CLIENT_ID.format(GAM_PROJECT_CREATION, GAM_PROJECT_CREATION_CLIENT_ID)) sys.stdout.write(Msg.TRUST_GAM_CLIENT_ID.format(GAM_PROJECT_CREATION, GAM_PROJECT_CREATION_CLIENT_ID))
readStdin('') readStdin('')
crm, httpObj, login_hint, appInfo, projectInfo, svcAcctInfo = _getLoginHintProjectInfo(True) crm, httpObj, login_hint, appInfo, projectInfo, svcAcctInfo, create_key = _getLoginHintProjectInfo(True)
login_domain = getEmailAddressDomain(login_hint) login_domain = getEmailAddressDomain(login_hint)
body = {'projectId': projectInfo['projectId'], 'displayName': projectInfo['name']} body = {'projectId': projectInfo['projectId'], 'displayName': projectInfo['name']}
if projectInfo['parent']: if projectInfo['parent']:
@ -11697,7 +11701,7 @@ def doCreateProject():
# except (GAPI.badRequest, GAPI.failedPrecondition, GAPI.permissionDenied): # except (GAPI.badRequest, GAPI.failedPrecondition, GAPI.permissionDenied):
# pass # pass
# Create client_secrets.json and oauth2service.json # Create client_secrets.json and oauth2service.json
_createClientSecretsOauth2service(httpObj, login_hint, appInfo, projectInfo, svcAcctInfo) _createClientSecretsOauth2service(httpObj, login_hint, appInfo, projectInfo, svcAcctInfo, create_key)
# gam use project [<EmailAddress>] [<ProjectID>] # gam use project [<EmailAddress>] [<ProjectID>]
# gam use project [admin <EmailAddress>] [project <ProjectID>] # gam use project [admin <EmailAddress>] [project <ProjectID>]