mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 04:41:35 +00:00
Compare commits
13 Commits
v7.01.00
...
20241204.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2bc1429ee2 | ||
|
|
25fdd76af0 | ||
|
|
ff3f31cf9e | ||
|
|
0b303ffc30 | ||
|
|
4c78c5fe9f | ||
|
|
17b97d2fb1 | ||
|
|
2193d34f76 | ||
|
|
b1c212e9f6 | ||
|
|
da58ae62a8 | ||
|
|
84d04141b3 | ||
|
|
f29c697455 | ||
|
|
a1238c6397 | ||
|
|
4dfdc3a717 |
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -17,7 +17,7 @@ defaults:
|
|||||||
working-directory: src
|
working-directory: src
|
||||||
|
|
||||||
env:
|
env:
|
||||||
SCRATCH_COUNTER: 3
|
SCRATCH_COUNTER: 4
|
||||||
OPENSSL_CONFIG_OPTS: no-fips --api=3.0.0
|
OPENSSL_CONFIG_OPTS: no-fips --api=3.0.0
|
||||||
OPENSSL_INSTALL_PATH: ${{ github.workspace }}/bin/ssl
|
OPENSSL_INSTALL_PATH: ${{ github.workspace }}/bin/ssl
|
||||||
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
||||||
@@ -120,7 +120,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
cache.tar.xz
|
cache.tar.xz
|
||||||
key: gam-${{ matrix.jid }}-20241114
|
key: gam-${{ matrix.jid }}-20241203
|
||||||
|
|
||||||
- name: Untar Cache archive
|
- name: Untar Cache archive
|
||||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||||
|
|||||||
@@ -1059,6 +1059,7 @@ Specify a collection of items by directly specifying them; the item type is dete
|
|||||||
all_shortcuts |
|
all_shortcuts |
|
||||||
all_3p_shortcuts |
|
all_3p_shortcuts |
|
||||||
all_items |
|
all_items |
|
||||||
|
my_commentable_items |
|
||||||
my_docs |
|
my_docs |
|
||||||
my_files |
|
my_files |
|
||||||
my_folders |
|
my_folders |
|
||||||
@@ -6779,12 +6780,12 @@ gam print ownership <DriveFileID>|(drivefilename <DriveFileName>) [todrive <ToDr
|
|||||||
gam <UserTypeEntity> show filecomments <DriveFileEntity>
|
gam <UserTypeEntity> show filecomments <DriveFileEntity>
|
||||||
[showdeleted] [start <Date>|<Time>]
|
[showdeleted] [start <Date>|<Time>]
|
||||||
[fields <CommentsFieldNameList>] [showphotolinks]
|
[fields <CommentsFieldNameList>] [showphotolinks]
|
||||||
[countsonly]
|
[countsonly|positivecountsonly]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> print filecomments <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filecomments <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
[showdeleted] [start <Date>|<Time>]
|
[showdeleted] [start <Date>|<Time>]
|
||||||
[fields <CommentsFieldNameList>] [showphotolinks]
|
[fields <CommentsFieldNameList>] [showphotolinks]
|
||||||
[countsonly]
|
[countsonly|positivecountsonly]
|
||||||
(addcsvdata <FieldName> <String>)*
|
(addcsvdata <FieldName> <String>)*
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,29 @@
|
|||||||
|
7.01.03
|
||||||
|
|
||||||
|
Fixed bug in `gam update cigroups <GroupEntity> delete|sync|update` where `cbcm-browser` and `chrome-os_device`
|
||||||
|
addresses were not properly handled.
|
||||||
|
|
||||||
|
7.01.02
|
||||||
|
|
||||||
|
Added option `positivecountsonly` to `gam <UserTypeEntity> print|show filecomments` that causes
|
||||||
|
GAM to display the number of comments and replies only for files that have comments.
|
||||||
|
|
||||||
|
Added `my_commentable_items` to `<DriveFileQueryShortcut>` that can be used with
|
||||||
|
`gam <UserTypeEntity> print|show filecomments my_commentable_items` to speed up processing.
|
||||||
|
|
||||||
|
Updated code that uses the Domain Shared Contacts API with an HTTPS proxy to avoid a trap:
|
||||||
|
```
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
File "atom/http.py", line 250, in _prepare_connection
|
||||||
|
AttributeError: module 'ssl' has no attribute 'wrap_socket'
|
||||||
|
```
|
||||||
|
|
||||||
|
7.01.01
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> print|show filetree` where no error message was generated
|
||||||
|
if a user had Drive disabled.
|
||||||
|
|
||||||
7.01.00
|
7.01.00
|
||||||
|
|
||||||
Fixed bug in `gam update chromepolicy` that caused some policy updates to fail.
|
Fixed bug in `gam update chromepolicy` that caused some policy updates to fail.
|
||||||
@@ -5,7 +31,7 @@ Fixed bug in `gam update chromepolicy` that caused some policy updates to fail.
|
|||||||
Added option `showhtml` to `gam <UserTypeEntity> print|show messages` that, when used with `showbody`,
|
Added option `showhtml` to `gam <UserTypeEntity> print|show messages` that, when used with `showbody`,
|
||||||
will display message body content of type HTML.
|
will display message body content of type HTML.
|
||||||
|
|
||||||
Added support for manageing/displaying Chrome profiles.
|
Added support for managing/displaying Chrome profiles.
|
||||||
|
|
||||||
* See: https://github.com/GAM-team/GAM/wiki/Chrome-Profile-Management
|
* See: https://github.com/GAM-team/GAM/wiki/Chrome-Profile-Management
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,594 +0,0 @@
|
|||||||
{
|
|
||||||
"auth": {
|
|
||||||
"oauth2": {
|
|
||||||
"scopes": {
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers": {
|
|
||||||
"description": "View and manage your Chrome browsers registered with Cloud Management"
|
|
||||||
},
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers.readonly": {
|
|
||||||
"description": "View your Chrome browsers registered with Cloud Management"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"basePath": "",
|
|
||||||
"baseUrl": "https://admin.googleapis.com/admin/directory/v1.1beta1/customer/",
|
|
||||||
"batchPath": "batch",
|
|
||||||
"canonicalName": "cbcm",
|
|
||||||
"discoveryVersion": "v1",
|
|
||||||
"documentationLink": "https://support.google.com/chrome/a/answer/9681204",
|
|
||||||
"fullyEncodeReservedExpansion": true,
|
|
||||||
"icons": {
|
|
||||||
"x16": "http://www.google.com/images/icons/product/search-16.gif",
|
|
||||||
"x32": "http://www.google.com/images/icons/product/search-32.gif"
|
|
||||||
},
|
|
||||||
"id": "cbcm:v1.1beta1",
|
|
||||||
"kind": "discovery#restDescription",
|
|
||||||
"mtlsRootUrl": "https://admin.mtls.googleapis.com/",
|
|
||||||
"name": "cbcm",
|
|
||||||
"ownerDomain": "google.com",
|
|
||||||
"ownerName": "Jay Lee",
|
|
||||||
"packagePath": "cbcm",
|
|
||||||
"parameters": {
|
|
||||||
"$.xgafv": {
|
|
||||||
"description": "V1 error format.",
|
|
||||||
"enum": [
|
|
||||||
"1",
|
|
||||||
"2"
|
|
||||||
],
|
|
||||||
"enumDescriptions": [
|
|
||||||
"v1 error format",
|
|
||||||
"v2 error format"
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"access_token": {
|
|
||||||
"description": "OAuth access token.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"alt": {
|
|
||||||
"default": "json",
|
|
||||||
"description": "Data format for response.",
|
|
||||||
"enum": [
|
|
||||||
"json",
|
|
||||||
"media",
|
|
||||||
"proto"
|
|
||||||
],
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Responses with Content-Type of application/json",
|
|
||||||
"Media download with context-dependent Content-Type",
|
|
||||||
"Responses with Content-Type of application/x-protobuf"
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"callback": {
|
|
||||||
"description": "JSONP",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"fields": {
|
|
||||||
"description": "Selector specifying which fields to include in a partial response.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"key": {
|
|
||||||
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"oauth_token": {
|
|
||||||
"description": "OAuth 2.0 token for the current user.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"prettyPrint": {
|
|
||||||
"default": "true",
|
|
||||||
"description": "Returns response with indentations and line breaks.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"quotaUser": {
|
|
||||||
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"uploadType": {
|
|
||||||
"description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"upload_protocol": {
|
|
||||||
"description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"protocol": "rest",
|
|
||||||
"resources": {
|
|
||||||
"chromebrowsers": {
|
|
||||||
"methods": {
|
|
||||||
"delete": {
|
|
||||||
"description": "Deletes a browser.",
|
|
||||||
"flatPath": "{customer}/devices/chromebrowsers/{deviceId}",
|
|
||||||
"httpMethod": "DELETE",
|
|
||||||
"id": "cbcm.chromebrowsers.delete",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer",
|
|
||||||
"deviceId"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"deviceId": {
|
|
||||||
"description": "Immutable ID of the browser.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/devices/chromebrowsers/{deviceId}",
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"description": "Retrieves a browser.",
|
|
||||||
"flatPath": "{customer}/devices/chromebrowsers/{deviceId}",
|
|
||||||
"httpMethod": "GET",
|
|
||||||
"id": "cbcm.chromebrowsers.get",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer",
|
|
||||||
"deviceId"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"deviceId": {
|
|
||||||
"description": "Immutable ID of the browser.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"projection": {
|
|
||||||
"description": "Restrict information returned to a set of selected fields. FULL or BASIC.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/devices/chromebrowsers/{deviceId}",
|
|
||||||
"response": {
|
|
||||||
"$ref": "ChromeBrowser"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers",
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers.readonly"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"list": {
|
|
||||||
"description": "Retrieves a paginated list of all the browsers in a domain.",
|
|
||||||
"flatPath": "{customer}/devices/chromebrowsers",
|
|
||||||
"httpMethod": "GET",
|
|
||||||
"id": "cbcm.chromebrowsers.list",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"maxResults": {
|
|
||||||
"description": "Maximum number of results to return.",
|
|
||||||
"format": "int32",
|
|
||||||
"location": "query",
|
|
||||||
"maximum": "100",
|
|
||||||
"minimum": "1",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"orderBy": {
|
|
||||||
"description": "property to use for sorting results.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"orgUnitPath": {
|
|
||||||
"description": "The full path of the organizational unit or its unique ID.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"pageToken": {
|
|
||||||
"description": "Token to specify the next page in the list.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"projection": {
|
|
||||||
"description": "Restrict information returned to a set of selected fields. FULL or BASIC.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"query": {
|
|
||||||
"description": "Search string using the list page query language.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"sortOrder": {
|
|
||||||
"description": "Whether to return results in ascending or descending order. Must be used with the orderBy parameter.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/devices/chromebrowsers",
|
|
||||||
"response": {
|
|
||||||
"$ref": "ChromeBrowsers"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers",
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers.readonly"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"moveChromeBrowsersToOu": {
|
|
||||||
"description": "Move Chrome Browsers Device between Organization Units",
|
|
||||||
"flatPath": "{customer}/devices/chromebrowsers/moveChromeBrowsersToOu",
|
|
||||||
"httpMethod": "POST",
|
|
||||||
"id": "cbcm.chromebrowsers.moveChromeBrowsersToOu",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/devices/chromebrowsers/moveChromeBrowsersToOu",
|
|
||||||
"request": {
|
|
||||||
"$ref": "MoveChromeBrowsersRequest"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"description": "Updates a browser.",
|
|
||||||
"flatPath": "{customer}/devices/chromebrowsers/{deviceId}",
|
|
||||||
"httpMethod": "PUT",
|
|
||||||
"id": "cbcm.chromebrowsers.update",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer",
|
|
||||||
"deviceId"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"deviceId": {
|
|
||||||
"description": "Immutable ID of the browser.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"projection": {
|
|
||||||
"description": "BASIC or FULL",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/devices/chromebrowsers/{deviceId}",
|
|
||||||
"request": {
|
|
||||||
"$ref": "ChromeBrowser"
|
|
||||||
},
|
|
||||||
"response": {
|
|
||||||
"$ref": "ChromeBrowser"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enrollmentTokens": {
|
|
||||||
"methods": {
|
|
||||||
"list": {
|
|
||||||
"description": "Retrieves a paginated list of all the browser entollment tokens in a domain.",
|
|
||||||
"flatPath": "{customer}/chrome/enrollmentTokens",
|
|
||||||
"httpMethod": "GET",
|
|
||||||
"id": "cbcm.enrollmentTokens.list",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"pageSize": {
|
|
||||||
"description": "Maximum number of results to return.",
|
|
||||||
"format": "int32",
|
|
||||||
"location": "query",
|
|
||||||
"maximum": "100",
|
|
||||||
"minimum": "1",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"orgUnitPath": {
|
|
||||||
"description": "The full path of the organizational unit or its unique ID.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"pageToken": {
|
|
||||||
"description": "Token to specify the next page in the list.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"query": {
|
|
||||||
"description": "Search string using the list page query language.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/chrome/enrollmentTokens",
|
|
||||||
"response": {
|
|
||||||
"$ref": "EnrollmentTokens"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers",
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers.readonly"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"description": "Creates a browser enrollment token in a domain.",
|
|
||||||
"flatPath": "{customer}/chrome/enrollmentTokens",
|
|
||||||
"httpMethod": "POST",
|
|
||||||
"id": "cbcm.enrollmentTokens.create",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/chrome/enrollmentTokens",
|
|
||||||
"request": {
|
|
||||||
"$ref": "CreateEnrollmentTokenRequest"
|
|
||||||
},
|
|
||||||
"response": {
|
|
||||||
"$ref": "EnrollmentToken"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"revoke": {
|
|
||||||
"description": "Revokes a browser enrollment token in a domain.",
|
|
||||||
"flatPath": "{customer}/chrome/enrollmentTokens/{tokenPermanentId}:revoke",
|
|
||||||
"httpMethod": "POST",
|
|
||||||
"id": "cbcm.enrollmentTokens.revoke",
|
|
||||||
"parameterOrder": [
|
|
||||||
"customer",
|
|
||||||
"tokenPermanentId"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"customer": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"tokenPermanentId": {
|
|
||||||
"description": "Unique identifier for an enrollment token.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "{customer}/chrome/enrollmentTokens/{tokenPermanentId}:revoke",
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.directory.device.chromebrowsers"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"revision": "20201203",
|
|
||||||
"rootUrl": "https://admin.googleapis.com/admin/directory/v1.1beta1/customer/",
|
|
||||||
"schemas": {
|
|
||||||
"ChromeBrowser": {
|
|
||||||
"id": "ChromeBrowser",
|
|
||||||
"properties": {
|
|
||||||
"annotatedAssetId": {
|
|
||||||
"description": "Asset identifier as annotated by the administrator or specified during enrollment.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"annotatedLocation": {
|
|
||||||
"description": "Address or location of the device as annotated by the administrator.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"annotatedNotes": {
|
|
||||||
"description": "Notes about this device as annotated by the administrator",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"annotatedUser": {
|
|
||||||
"description": "User of the device as annotated by the administrator.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"deviceId": {
|
|
||||||
"annotations": {
|
|
||||||
"required": [
|
|
||||||
"cbcm.chromebrowsers.update"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"description": "The unique ID of the device.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"ChromeBrowsers": {
|
|
||||||
"id": "ChromeBrowsers",
|
|
||||||
"properties": {
|
|
||||||
"browsers": {
|
|
||||||
"description": "List of Chrome browser objects.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "ChromeBrowser"
|
|
||||||
},
|
|
||||||
"type": "array"
|
|
||||||
},
|
|
||||||
"etag": {
|
|
||||||
"description": "ETag of the resource.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"kind": {
|
|
||||||
"default": "admin#directory#chromeosdevices",
|
|
||||||
"description": "Kind of resource this is.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"nextPageToken": {
|
|
||||||
"description": "Token used to access the next page of this result. To access the next page, use this token's value in the `pageToken` query string of this request.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"EnrollmentToken": {
|
|
||||||
"id": "EnrollmentToken",
|
|
||||||
"properties": {
|
|
||||||
"kind": {
|
|
||||||
"default": "admin#directory#chromeEnrollmentToken",
|
|
||||||
"description": "Kind of resource this is.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"tokenId": {
|
|
||||||
"description": "Enrollment Token ID.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"tokenPermanentId": {
|
|
||||||
"description": "Enrollment Token Permanent ID.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"customerId": {
|
|
||||||
"description": "Immutable ID of the G Suite account.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"orgUnitPath": {
|
|
||||||
"description": "The full path of the organizational unit or its unique ID.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"creatorId": {
|
|
||||||
"description": "Creator ID.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"createTime": {
|
|
||||||
"description": "Creation Time.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"revokerId": {
|
|
||||||
"description": "Revoker ID.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"revokeTime": {
|
|
||||||
"description": "Revoke Time",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"EnrollmentTokens": {
|
|
||||||
"id": "EnrollmentTokens",
|
|
||||||
"properties": {
|
|
||||||
"chrome_enrollment_tokens": {
|
|
||||||
"description": "List of Chrome browser enrollment token objects.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "EnrollmentToken"
|
|
||||||
},
|
|
||||||
"type": "array"
|
|
||||||
},
|
|
||||||
"kind": {
|
|
||||||
"default": "admin#directory#chromeEnrollmentTokens",
|
|
||||||
"description": "Kind of resource this is.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"nextPageToken": {
|
|
||||||
"description": "Token used to access the next page of this result. To access the next page, use this token's value in the `pageToken` query string of this request.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"CreateEnrollmentTokenRequest": {
|
|
||||||
"id": "CreateEnrollmentTokenRequest",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"org_unit_path": {
|
|
||||||
"description": "The full path of the organizational unit or its unique ID.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"expire_time": {
|
|
||||||
"description": "Expiration Time.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"token_type": {
|
|
||||||
"id": "token_type",
|
|
||||||
"annotations": {
|
|
||||||
"required": [
|
|
||||||
"cbcm.enrollmentTokens.create"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"description": "CHROME_BROWSER.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"MoveChromeBrowsersRequest": {
|
|
||||||
"id": "MoveChromeBrowsersRequest",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"org_unit_path": {
|
|
||||||
"annotations": {
|
|
||||||
"required": [
|
|
||||||
"cbcm.chromebrowsers.moveChromeBrowsersToOu"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"description": "Destination organization unit to move devices to. Full path of the organizational unit or its ID prefixed with id:",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"resource_ids": {
|
|
||||||
"annotations": {
|
|
||||||
"required": [
|
|
||||||
"cbcm.chromebrowsers.moveChromeBrowsersToOu"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"description": "List of unique device IDs of Chrome Browser Devices to move. A maximum of 600 browsers may be moved per request.",
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"servicePath": "",
|
|
||||||
"title": "Admin SDK API",
|
|
||||||
"version": "cbcm_v1.1beta1"
|
|
||||||
}
|
|
||||||
@@ -1,249 +0,0 @@
|
|||||||
{
|
|
||||||
"auth": {
|
|
||||||
"oauth2": {
|
|
||||||
"scopes": {
|
|
||||||
"https://www.googleapis.com/auth/admin.contact.delegation": {
|
|
||||||
"description": "View and manage your Contact Delegation"
|
|
||||||
},
|
|
||||||
"https://www.googleapis.com/auth/admin.contact.delegation.readonly": {
|
|
||||||
"description": "View your Contact Delegation"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"basePath": "",
|
|
||||||
"baseUrl": "https://admin.googleapis.com/admin/contacts/v1/",
|
|
||||||
"batchPath": "batch",
|
|
||||||
"canonicalName": "contactdelegation",
|
|
||||||
"description": "The Contact Delegation API allows Admins to delegate access of one user's, called the delegator, contacts to another user, called the delegate.",
|
|
||||||
"discoveryVersion": "v1",
|
|
||||||
"documentationLink": "https://developers.google.com/admin-sdk/contact-delegation",
|
|
||||||
"fullyEncodeReservedExpansion": true,
|
|
||||||
"icons": {
|
|
||||||
"x16": "http://www.google.com/images/icons/product/search-16.gif",
|
|
||||||
"x32": "http://www.google.com/images/icons/product/search-32.gif"
|
|
||||||
},
|
|
||||||
"id": "contactdelegation:v1",
|
|
||||||
"kind": "discovery#restDescription",
|
|
||||||
"name": "contactdelegation",
|
|
||||||
"ownerDomain": "google.com",
|
|
||||||
"ownerName": "Google",
|
|
||||||
"packagePath": "admin",
|
|
||||||
"parameters": {
|
|
||||||
"$.xgafv": {
|
|
||||||
"description": "V1 error format.",
|
|
||||||
"enum": [
|
|
||||||
"1",
|
|
||||||
"2"
|
|
||||||
],
|
|
||||||
"enumDescriptions": [
|
|
||||||
"v1 error format",
|
|
||||||
"v2 error format"
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"access_token": {
|
|
||||||
"description": "OAuth access token.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"alt": {
|
|
||||||
"default": "json",
|
|
||||||
"description": "Data format for response.",
|
|
||||||
"enum": [
|
|
||||||
"json",
|
|
||||||
"media",
|
|
||||||
"proto"
|
|
||||||
],
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Responses with Content-Type of application/json",
|
|
||||||
"Media download with context-dependent Content-Type",
|
|
||||||
"Responses with Content-Type of application/x-protobuf"
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"callback": {
|
|
||||||
"description": "JSONP",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"fields": {
|
|
||||||
"description": "Selector specifying which fields to include in a partial response.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"key": {
|
|
||||||
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"oauth_token": {
|
|
||||||
"description": "OAuth 2.0 token for the current user.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"prettyPrint": {
|
|
||||||
"default": "true",
|
|
||||||
"description": "Returns response with indentations and line breaks.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"quotaUser": {
|
|
||||||
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"uploadType": {
|
|
||||||
"description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"upload_protocol": {
|
|
||||||
"description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"protocol": "rest",
|
|
||||||
"resources": {
|
|
||||||
"delegates": {
|
|
||||||
"methods": {
|
|
||||||
"create": {
|
|
||||||
"description": "Creates a contact delegations",
|
|
||||||
"flatPath": "users/{user}/delegates",
|
|
||||||
"httpMethod": "POST",
|
|
||||||
"id": "contactdelegations.delegates.create",
|
|
||||||
"parameterOrder": [
|
|
||||||
"user"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"user": {
|
|
||||||
"description": "Email address of the delegator.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "users/{user}/delegates/{delegate}",
|
|
||||||
"request": {
|
|
||||||
"$ref": "Delegate"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.contact.delegation"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"description": "Deletes a contact delegation.",
|
|
||||||
"flatPath": "users/{user}/delegates/{delegate}",
|
|
||||||
"httpMethod": "DELETE",
|
|
||||||
"id": "contactdelegations.delegates.delete",
|
|
||||||
"parameterOrder": [
|
|
||||||
"user",
|
|
||||||
"delegate"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"delegate": {
|
|
||||||
"description": "Email address of the delegate",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"description": "Email address of the delegator.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "users/{user}/delegates/{delegate}",
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.contact.delegation"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"list": {
|
|
||||||
"description": "Lists contact delegates for a user",
|
|
||||||
"flatPath": "users/{user}/delegates",
|
|
||||||
"httpMethod": "GET",
|
|
||||||
"id": "contactdelegations.delegates.list",
|
|
||||||
"parameterOrder": [
|
|
||||||
"user"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"pageSize": {
|
|
||||||
"description": "Determines how many delegates are returned in each response. ",
|
|
||||||
"format": "int32",
|
|
||||||
"location": "query",
|
|
||||||
"minimum": "1",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"pageToken": {
|
|
||||||
"description": "Token to specify the next page in the list.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"description": "Email address of the delegator.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "users/{user}/delegates",
|
|
||||||
"response": {
|
|
||||||
"$ref": "Delegates"
|
|
||||||
},
|
|
||||||
"scopes": [
|
|
||||||
"https://www.googleapis.com/auth/admin.contact.delegation",
|
|
||||||
"https://www.googleapis.com/auth/admin.contact.delegation.readonly"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rootUrl": "https://admin.googleapis.com/admin/contacts/v1/",
|
|
||||||
"schemas": {
|
|
||||||
"Delegate": {
|
|
||||||
"description": "JSON template for a delegate.",
|
|
||||||
"id": "Delegate",
|
|
||||||
"properties": {
|
|
||||||
"email": {
|
|
||||||
"description": "Email of the delegate.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"Delegates": {
|
|
||||||
"id": "Delegates",
|
|
||||||
"properties": {
|
|
||||||
"delegates": {
|
|
||||||
"description": "List of delegates.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "Delegate"
|
|
||||||
},
|
|
||||||
"type": "array"
|
|
||||||
},
|
|
||||||
"etag": {
|
|
||||||
"description": "ETag of the resource.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"kind": {
|
|
||||||
"default": "",
|
|
||||||
"description": "Kind of resource this is.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"nextPageToken": {
|
|
||||||
"description": "Token used to access the next page of this result. To access the next page, use this token's value in the `pageToken` query string of this request.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"servicePath": "",
|
|
||||||
"title": "Contact Delegation API",
|
|
||||||
"version": "v1",
|
|
||||||
"version_module": true
|
|
||||||
}
|
|
||||||
@@ -1,486 +0,0 @@
|
|||||||
{
|
|
||||||
"basePath": "",
|
|
||||||
"discoveryVersion": "v1",
|
|
||||||
"documentationLink": "https://support.google.com/datastudio",
|
|
||||||
"canonicalName": "Data Studio",
|
|
||||||
"id": "datastudio:v1",
|
|
||||||
"ownerName": "Google",
|
|
||||||
"description": "Allows programmatic viewing and editing of Data Studio assets.",
|
|
||||||
"rootUrl": "https://datastudio.googleapis.com/",
|
|
||||||
"ownerDomain": "google.com",
|
|
||||||
"mtlsRootUrl": "https://datastudio.mtls.googleapis.com/",
|
|
||||||
"batchPath": "batch",
|
|
||||||
"version_module": true,
|
|
||||||
"version": "v1",
|
|
||||||
"schemas": {
|
|
||||||
"Asset": {
|
|
||||||
"id": "Asset",
|
|
||||||
"properties": {
|
|
||||||
"title": {
|
|
||||||
"description": "The title of the asset.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"createTime": {
|
|
||||||
"format": "google-datetime",
|
|
||||||
"description": "Date the asset was created.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"lastViewByMeTime": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Date the asset was last viewed by me.",
|
|
||||||
"format": "google-datetime"
|
|
||||||
},
|
|
||||||
"owner": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "The owner of the asset."
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "The name of the asset."
|
|
||||||
},
|
|
||||||
"trashed": {
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Value indicating if the asset is in the trash."
|
|
||||||
},
|
|
||||||
"updateTime": {
|
|
||||||
"format": "google-datetime",
|
|
||||||
"description": "Date the asset was last modified.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"updateByMeTime": {
|
|
||||||
"description": "Date the asset was last modified by me.",
|
|
||||||
"type": "string",
|
|
||||||
"format": "google-datetime"
|
|
||||||
},
|
|
||||||
"assetType": {
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Asset type not specified.",
|
|
||||||
"A report asset.",
|
|
||||||
"A data Source asset."
|
|
||||||
],
|
|
||||||
"enum": [
|
|
||||||
"ASSET_TYPE_UNSPECIFIED",
|
|
||||||
"REPORT",
|
|
||||||
"DATA_SOURCE"
|
|
||||||
],
|
|
||||||
"description": "The type of the asset.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "A Data Studio asset.",
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"SearchAssetsResponse": {
|
|
||||||
"id": "SearchAssetsResponse",
|
|
||||||
"properties": {
|
|
||||||
"assets": {
|
|
||||||
"items": {
|
|
||||||
"$ref": "Asset"
|
|
||||||
},
|
|
||||||
"type": "array",
|
|
||||||
"description": "The list of assets."
|
|
||||||
},
|
|
||||||
"nextPageToken": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "A token to retrieve next page of results. Pass this value in the SearchAssetsRequest.page_token field in the subsequent call to `SearchAssets` method to retrieve the next page of results."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description": "Response message for DataStudioService.SearchAssets",
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"UpdatePermissionsRequest": {
|
|
||||||
"description": "Request message for DataStudioService.UpdatePermissions",
|
|
||||||
"properties": {
|
|
||||||
"updateMask": {
|
|
||||||
"description": "The list of fields to be updated. Currently not supported.",
|
|
||||||
"type": "string",
|
|
||||||
"format": "google-fieldmask"
|
|
||||||
},
|
|
||||||
"permissions": {
|
|
||||||
"description": "The permissions object to update.",
|
|
||||||
"$ref": "Permissions"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"id": "UpdatePermissionsRequest",
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"AddMembersRequest": {
|
|
||||||
"properties": {
|
|
||||||
"members": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": "Required. The members to add to the role. The format of a member is one of - user:alice@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-app@appspot.gserviceaccount.com"
|
|
||||||
},
|
|
||||||
"role": {
|
|
||||||
"type": "string",
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Role not specified.",
|
|
||||||
"A viewer.",
|
|
||||||
"An editor.",
|
|
||||||
"An owner.",
|
|
||||||
"Link shared viewer.",
|
|
||||||
"Link shared editor."
|
|
||||||
],
|
|
||||||
"enum": [
|
|
||||||
"ROLE_UNSPECIFIED",
|
|
||||||
"VIEWER",
|
|
||||||
"EDITOR",
|
|
||||||
"OWNER",
|
|
||||||
"LINK_VIEWER",
|
|
||||||
"LINK_EDITOR"
|
|
||||||
],
|
|
||||||
"description": "Required. The role to add members to."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object",
|
|
||||||
"id": "AddMembersRequest",
|
|
||||||
"description": "Request message for DataStudioService.AddMembers"
|
|
||||||
},
|
|
||||||
"Permissions": {
|
|
||||||
"type": "object",
|
|
||||||
"id": "Permissions",
|
|
||||||
"description": "A Data Studio asset's Permissions.",
|
|
||||||
"properties": {
|
|
||||||
"permissions": {
|
|
||||||
"description": "A map from a Role to a list of members. Role is a string representation of the Role enum. One of: - OWNER - EDITOR - VIEWER",
|
|
||||||
"additionalProperties": {
|
|
||||||
"$ref": "Members"
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
},
|
|
||||||
"etag": {
|
|
||||||
"format": "byte",
|
|
||||||
"description": "etag to detect and fail concurrent modifications",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"RevokeAllPermissionsRequest": {
|
|
||||||
"description": "Request message for DataStudioService.RevokeAllPermissions",
|
|
||||||
"id": "RevokeAllPermissionsRequest",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"members": {
|
|
||||||
"description": "Required. The members that are having their access revoked. The format of a member is one of - user:alice@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-app@appspot.gserviceaccount.com",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"type": "array"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Members": {
|
|
||||||
"description": "A wrapper message for a list of members.",
|
|
||||||
"properties": {
|
|
||||||
"members": {
|
|
||||||
"description": "Format of string is one of - user:alice@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-app@appspot.gserviceaccount.com",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"type": "array"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object",
|
|
||||||
"id": "Members"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"name": "datastudio",
|
|
||||||
"protocol": "rest",
|
|
||||||
"baseUrl": "https://datastudio.googleapis.com/",
|
|
||||||
"title": "Data Studio API",
|
|
||||||
"revision": "20210412",
|
|
||||||
"fullyEncodeReservedExpansion": true,
|
|
||||||
"icons": {
|
|
||||||
"x32": "http://www.google.com/images/icons/product/search-32.gif",
|
|
||||||
"x16": "http://www.google.com/images/icons/product/search-16.gif"
|
|
||||||
},
|
|
||||||
"parameters": {
|
|
||||||
"quotaUser": {
|
|
||||||
"location": "query",
|
|
||||||
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"prettyPrint": {
|
|
||||||
"location": "query",
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Returns response with indentations and line breaks.",
|
|
||||||
"default": "true"
|
|
||||||
},
|
|
||||||
"callback": {
|
|
||||||
"location": "query",
|
|
||||||
"type": "string",
|
|
||||||
"description": "JSONP"
|
|
||||||
},
|
|
||||||
"uploadType": {
|
|
||||||
"description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
|
|
||||||
"type": "string",
|
|
||||||
"location": "query"
|
|
||||||
},
|
|
||||||
"upload_protocol": {
|
|
||||||
"type": "string",
|
|
||||||
"location": "query",
|
|
||||||
"description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
|
|
||||||
},
|
|
||||||
"$.xgafv": {
|
|
||||||
"enumDescriptions": [
|
|
||||||
"v1 error format",
|
|
||||||
"v2 error format"
|
|
||||||
],
|
|
||||||
"description": "V1 error format.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"1",
|
|
||||||
"2"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"oauth_token": {
|
|
||||||
"type": "string",
|
|
||||||
"location": "query",
|
|
||||||
"description": "OAuth 2.0 token for the current user."
|
|
||||||
},
|
|
||||||
"alt": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"json",
|
|
||||||
"media",
|
|
||||||
"proto"
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"description": "Data format for response.",
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Responses with Content-Type of application/json",
|
|
||||||
"Media download with context-dependent Content-Type",
|
|
||||||
"Responses with Content-Type of application/x-protobuf"
|
|
||||||
],
|
|
||||||
"default": "json"
|
|
||||||
},
|
|
||||||
"fields": {
|
|
||||||
"description": "Selector specifying which fields to include in a partial response.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"access_token": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "OAuth access token.",
|
|
||||||
"location": "query"
|
|
||||||
},
|
|
||||||
"key": {
|
|
||||||
"type": "string",
|
|
||||||
"location": "query",
|
|
||||||
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"servicePath": "",
|
|
||||||
"kind": "discovery#restDescription",
|
|
||||||
"resources": {
|
|
||||||
"assets": {
|
|
||||||
"methods": {
|
|
||||||
"getPermissions": {
|
|
||||||
"parameters": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"location": "path",
|
|
||||||
"description": "Required. The name of the asset.",
|
|
||||||
"required": true
|
|
||||||
},
|
|
||||||
"role": {
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Role not specified.",
|
|
||||||
"A viewer.",
|
|
||||||
"An editor.",
|
|
||||||
"An owner.",
|
|
||||||
"Link shared viewer.",
|
|
||||||
"Link shared editor."
|
|
||||||
],
|
|
||||||
"type": "string",
|
|
||||||
"location": "query",
|
|
||||||
"description": "The role of the permssion.",
|
|
||||||
"enum": [
|
|
||||||
"ROLE_UNSPECIFIED",
|
|
||||||
"VIEWER",
|
|
||||||
"EDITOR",
|
|
||||||
"OWNER",
|
|
||||||
"LINK_VIEWER",
|
|
||||||
"LINK_EDITOR"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"id": "datastudio.assets.getPermissions",
|
|
||||||
"response": {
|
|
||||||
"$ref": "Permissions"
|
|
||||||
},
|
|
||||||
"flatPath": "v1/assets/{name}/permissions",
|
|
||||||
"path": "v1/assets/{name}/permissions",
|
|
||||||
"description": "Gets the asset's permission for a given role.",
|
|
||||||
"parameterOrder": [
|
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"httpMethod": "GET"
|
|
||||||
},
|
|
||||||
"updatePermissions": {
|
|
||||||
"id": "datastudio.assets.updatePermissions",
|
|
||||||
"parameterOrder": [
|
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"flatPath": "v1/assets/{name}/permissions",
|
|
||||||
"description": "Updates a permission.",
|
|
||||||
"request": {
|
|
||||||
"$ref": "UpdatePermissionsRequest"
|
|
||||||
},
|
|
||||||
"path": "v1/assets/{name}/permissions",
|
|
||||||
"parameters": {
|
|
||||||
"name": {
|
|
||||||
"description": "Required. The name of the asset.",
|
|
||||||
"location": "path",
|
|
||||||
"type": "string",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"response": {
|
|
||||||
"$ref": "Permissions"
|
|
||||||
},
|
|
||||||
"httpMethod": "PATCH"
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"path": "v1/{+name}",
|
|
||||||
"id": "datastudio.assets.get",
|
|
||||||
"parameterOrder": [
|
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"description": "Gets the asset by name.",
|
|
||||||
"parameters": {
|
|
||||||
"name": {
|
|
||||||
"description": "Required. The name of the asset. Format: assets/{asset}",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"pattern": "^assets/[^/]+$",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flatPath": "v1/assets/{assetsId}",
|
|
||||||
"response": {
|
|
||||||
"$ref": "Asset"
|
|
||||||
},
|
|
||||||
"httpMethod": "GET"
|
|
||||||
},
|
|
||||||
"search": {
|
|
||||||
"response": {
|
|
||||||
"$ref": "SearchAssetsResponse"
|
|
||||||
},
|
|
||||||
"path": "v1/assets:search",
|
|
||||||
"parameters": {
|
|
||||||
"pageToken": {
|
|
||||||
"type": "string",
|
|
||||||
"location": "query",
|
|
||||||
"description": "A token identifying a page of results the server should return. Use the value of SearchAssetsResponse.next_page_token returned from the previous call to `SearchAssets` method."
|
|
||||||
},
|
|
||||||
"assetTypes": {
|
|
||||||
"type": "string",
|
|
||||||
"repeated": true,
|
|
||||||
"description": "Exactly one AssetType must be specified.",
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Asset type not specified.",
|
|
||||||
"A report asset.",
|
|
||||||
"A data Source asset."
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"enum": [
|
|
||||||
"ASSET_TYPE_UNSPECIFIED",
|
|
||||||
"REPORT",
|
|
||||||
"DATA_SOURCE"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"description": "The title of assets to include. Not an exact match, works the same as search from the UI.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"owner": {
|
|
||||||
"type": "string",
|
|
||||||
"location": "query",
|
|
||||||
"description": "The email of the owner of the asset."
|
|
||||||
},
|
|
||||||
"pageSize": {
|
|
||||||
"description": "Requested page size. If unspecified, server will pick an appropriate default.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "integer",
|
|
||||||
"format": "int32"
|
|
||||||
},
|
|
||||||
"orderBy": {
|
|
||||||
"location": "query",
|
|
||||||
"description": "How the results should be ordered. Valid options are: - title",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"includeTrashed": {
|
|
||||||
"location": "query",
|
|
||||||
"type": "boolean",
|
|
||||||
"description": "Value indicating if assets in trash should be included."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flatPath": "v1/assets:search",
|
|
||||||
"httpMethod": "GET",
|
|
||||||
"description": "Searches assets.",
|
|
||||||
"id": "datastudio.assets.search",
|
|
||||||
"parameterOrder": []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"resources": {
|
|
||||||
"permissions": {
|
|
||||||
"methods": {
|
|
||||||
"revokeAllPermissions": {
|
|
||||||
"path": "v1/assets/{name}/permissions:revokeAllPermissions",
|
|
||||||
"response": {
|
|
||||||
"$ref": "Permissions"
|
|
||||||
},
|
|
||||||
"flatPath": "v1/assets/{name}/permissions:revokeAllPermissions",
|
|
||||||
"id": "datastudio.assets.permissions.revokeAllPermissions",
|
|
||||||
"description": "Revokes one or more members' access to an asset.",
|
|
||||||
"parameters": {
|
|
||||||
"name": {
|
|
||||||
"required": true,
|
|
||||||
"type": "string",
|
|
||||||
"location": "path",
|
|
||||||
"description": "Required. The name of the asset."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parameterOrder": [
|
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"httpMethod": "POST",
|
|
||||||
"request": {
|
|
||||||
"$ref": "RevokeAllPermissionsRequest"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"addMembers": {
|
|
||||||
"path": "v1/assets/{name}/permissions:addMembers",
|
|
||||||
"parameters": {
|
|
||||||
"name": {
|
|
||||||
"required": true,
|
|
||||||
"location": "path",
|
|
||||||
"type": "string",
|
|
||||||
"description": "Required. The name of the asset."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"httpMethod": "POST",
|
|
||||||
"parameterOrder": [
|
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"response": {
|
|
||||||
"$ref": "Permissions"
|
|
||||||
},
|
|
||||||
"id": "datastudio.assets.permissions.addMembers",
|
|
||||||
"request": {
|
|
||||||
"$ref": "AddMembersRequest"
|
|
||||||
},
|
|
||||||
"description": "Adds one or more members to a role.",
|
|
||||||
"flatPath": "v1/assets/{name}/permissions:addMembers"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -28,11 +28,10 @@ print(version_info)
|
|||||||
datas = []
|
datas = []
|
||||||
for pkg in GAM_VER_LIBS:
|
for pkg in GAM_VER_LIBS:
|
||||||
datas += copy_metadata(pkg, recursive=True)
|
datas += copy_metadata(pkg, recursive=True)
|
||||||
datas += [('admin-directory_v1.1beta1.json', '.')]
|
datas += [('gam/cbcm-v1.1beta1.json', '.')]
|
||||||
datas += [('cbcm-v1.1beta1.json', '.')]
|
datas += [('gam/contactdelegation-v1.json', '.')]
|
||||||
datas += [('contactdelegation-v1.json', '.')]
|
datas += [('gam/datastudio-v1.json', '.')]
|
||||||
datas += [('datastudio-v1.json', '.')]
|
datas += [('gam/serviceaccountlookup-v1.json', '.')]
|
||||||
datas += [('serviceaccountlookup-v1.json', '.')]
|
|
||||||
datas += [('cacerts.pem', '.')]
|
datas += [('cacerts.pem', '.')]
|
||||||
hiddenimports = [
|
hiddenimports = [
|
||||||
'gam.gamlib.yubikey',
|
'gam.gamlib.yubikey',
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.01.00'
|
__version__ = '7.01.04'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
#pylint: disable=wrong-import-position
|
#pylint: disable=wrong-import-position
|
||||||
@@ -89,6 +89,7 @@ from traceback import print_exc
|
|||||||
import types
|
import types
|
||||||
from urllib.parse import quote, quote_plus, unquote, urlencode, urlparse, parse_qs
|
from urllib.parse import quote, quote_plus, unquote, urlencode, urlparse, parse_qs
|
||||||
import uuid
|
import uuid
|
||||||
|
import warnings
|
||||||
import webbrowser
|
import webbrowser
|
||||||
import wsgiref.simple_server
|
import wsgiref.simple_server
|
||||||
import wsgiref.util
|
import wsgiref.util
|
||||||
@@ -5661,6 +5662,9 @@ def getServiceAccountEmailFromID(account_id, sal=None):
|
|||||||
sa_emails = []
|
sa_emails = []
|
||||||
for _, raw_cert in certs.items():
|
for _, raw_cert in certs.items():
|
||||||
cert = x509.load_pem_x509_certificate(raw_cert.encode(), default_backend())
|
cert = x509.load_pem_x509_certificate(raw_cert.encode(), default_backend())
|
||||||
|
# suppress crytography warning due to long service account email
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
warnings.filterwarnings('ignore', message='.*Attribute\'s length.*')
|
||||||
mg = re.match(sa_cn_rx, cert.issuer.rfc4514_string())
|
mg = re.match(sa_cn_rx, cert.issuer.rfc4514_string())
|
||||||
if mg:
|
if mg:
|
||||||
sa_email = f'{mg.group(1)}@{mg.group(2)}.iam.gserviceaccount.com'
|
sa_email = f'{mg.group(1)}@{mg.group(2)}.iam.gserviceaccount.com'
|
||||||
@@ -5729,8 +5733,10 @@ def convertUIDtoEmailAddressWithType(emailAddressOrUID, cd=None, sal=None, email
|
|||||||
# Convert UID to email address
|
# Convert UID to email address
|
||||||
def convertUIDtoEmailAddress(emailAddressOrUID, cd=None, emailTypes=None,
|
def convertUIDtoEmailAddress(emailAddressOrUID, cd=None, emailTypes=None,
|
||||||
checkForCustomerId=False, ciGroupsAPI=False, aliasAllowed=True):
|
checkForCustomerId=False, ciGroupsAPI=False, aliasAllowed=True):
|
||||||
if emailAddressOrUID.startswith('cbcm-browser.'):
|
if ciGroupsAPI:
|
||||||
return emailAddressOrUID
|
normalizedEmailAddressOrUID = normalizeEmailAddressOrUID(emailAddressOrUID, ciGroupsAPI=ciGroupsAPI)
|
||||||
|
if normalizedEmailAddressOrUID.startswith('cbcm-browser.') or normalizedEmailAddressOrUID.startswith('chrome-os-device.'):
|
||||||
|
return normalizedEmailAddressOrUID
|
||||||
email, _ = convertUIDtoEmailAddressWithType(emailAddressOrUID, cd, emailTypes,
|
email, _ = convertUIDtoEmailAddressWithType(emailAddressOrUID, cd, emailTypes,
|
||||||
checkForCustomerId, ciGroupsAPI, aliasAllowed)
|
checkForCustomerId, ciGroupsAPI, aliasAllowed)
|
||||||
return email
|
return email
|
||||||
@@ -11427,8 +11433,8 @@ def convertGCPFolderNameToID(parent, crm):
|
|||||||
systemErrorExit(MULTIPLE_PROJECT_FOLDERS_FOUND_RC, None)
|
systemErrorExit(MULTIPLE_PROJECT_FOLDERS_FOUND_RC, None)
|
||||||
return folders[0]['name']
|
return folders[0]['name']
|
||||||
|
|
||||||
PROJECTID_PATTERN = re.compile(r'^[a-z][a-z0-9-]{4,28}[a-z0-9]$')
|
PROJECTID_PATTERN = re.compile(r'^[a-z][a-z0-9-]{4,99}[a-z0-9]$')
|
||||||
PROJECTID_FORMAT_REQUIRED = '[a-z][a-z0-9-]{4,28}[a-z0-9]'
|
PROJECTID_FORMAT_REQUIRED = '[a-z][a-z0-9-]{4,99}[a-z0-9]'
|
||||||
def _checkProjectId(projectId):
|
def _checkProjectId(projectId):
|
||||||
if not PROJECTID_PATTERN.match(projectId):
|
if not PROJECTID_PATTERN.match(projectId):
|
||||||
Cmd.Backup()
|
Cmd.Backup()
|
||||||
@@ -12412,9 +12418,16 @@ def _generatePrivateKeyAndPublicCert(projectId, clientEmail, name, key_size, b64
|
|||||||
writeStdout(Msg.EXTRACTING_PUBLIC_CERTIFICATE+'\n')
|
writeStdout(Msg.EXTRACTING_PUBLIC_CERTIFICATE+'\n')
|
||||||
public_key = private_key.public_key()
|
public_key = private_key.public_key()
|
||||||
builder = x509.CertificateBuilder()
|
builder = x509.CertificateBuilder()
|
||||||
builder = builder.subject_name(x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, name, _validate=False)]))
|
# suppress cryptography warnings on service account email length
|
||||||
builder = builder.issuer_name(x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, name, _validate=False)]))
|
with warnings.catch_warnings():
|
||||||
# Gooogle seems to enforce the not before date strictly. Set the not before
|
warnings.filterwarnings('ignore', message='.*Attribute\'s length.*')
|
||||||
|
builder = builder.subject_name(x509.Name([x509.NameAttribute(NameOID.COMMON_NAME,
|
||||||
|
name,
|
||||||
|
_validate=False)]))
|
||||||
|
builder = builder.issuer_name(x509.Name([x509.NameAttribute(NameOID.COMMON_NAME,
|
||||||
|
name,
|
||||||
|
_validate=False)]))
|
||||||
|
# Google seems to enforce the not before date strictly. Set the not before
|
||||||
# date to be UTC two minutes ago which should cover any clock skew.
|
# date to be UTC two minutes ago which should cover any clock skew.
|
||||||
now = datetime.datetime.utcnow()
|
now = datetime.datetime.utcnow()
|
||||||
builder = builder.not_valid_before(now - datetime.timedelta(minutes=2))
|
builder = builder.not_valid_before(now - datetime.timedelta(minutes=2))
|
||||||
@@ -16520,7 +16533,6 @@ def doCreateAdmin():
|
|||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
if myarg == 'condition':
|
if myarg == 'condition':
|
||||||
body['condition'] = getChoice(ADMIN_CONDITION_CHOICE_MAP, mapChoice=True)
|
body['condition'] = getChoice(ADMIN_CONDITION_CHOICE_MAP, mapChoice=True)
|
||||||
cd = buildGAPIObject(API.DIRECTORY_BETA)
|
|
||||||
else:
|
else:
|
||||||
unknownArgumentExit()
|
unknownArgumentExit()
|
||||||
try:
|
try:
|
||||||
@@ -16654,7 +16666,6 @@ def doPrintShowAdmins():
|
|||||||
fieldsList.append('condition')
|
fieldsList.append('condition')
|
||||||
if csvPF:
|
if csvPF:
|
||||||
csvPF.AddTitle('condition')
|
csvPF.AddTitle('condition')
|
||||||
cd = buildGAPIObject(API.DIRECTORY_BETA)
|
|
||||||
elif myarg == 'privileges':
|
elif myarg == 'privileges':
|
||||||
showPrivileges = True
|
showPrivileges = True
|
||||||
elif myarg == 'oneitemperrow':
|
elif myarg == 'oneitemperrow':
|
||||||
@@ -34639,7 +34650,7 @@ def doUpdateCIGroups():
|
|||||||
continue
|
continue
|
||||||
_batchAddGroupMembers(parent, i, count,
|
_batchAddGroupMembers(parent, i, count,
|
||||||
[convertUIDtoEmailAddress(member, cd=cd, emailTypes='any',
|
[convertUIDtoEmailAddress(member, cd=cd, emailTypes='any',
|
||||||
checkForCustomerId=True) for member in addMembers],
|
checkForCustomerId=True, ciGroupsAPI=True) for member in addMembers],
|
||||||
role, expireTime)
|
role, expireTime)
|
||||||
elif CL_subCommand in {'delete', 'remove'}:
|
elif CL_subCommand in {'delete', 'remove'}:
|
||||||
baseRole, groupMemberType = _getRoleGroupMemberType()
|
baseRole, groupMemberType = _getRoleGroupMemberType()
|
||||||
@@ -34681,11 +34692,12 @@ def doUpdateCIGroups():
|
|||||||
j = 0
|
j = 0
|
||||||
for member in removeMembers:
|
for member in removeMembers:
|
||||||
j += 1
|
j += 1
|
||||||
memberEmail = convertUIDtoEmailAddress(member, cd=cd, emailTypes='any', checkForCustomerId=True)
|
memberEmail = convertUIDtoEmailAddress(member, cd=cd, emailTypes='any',
|
||||||
|
checkForCustomerId=True, ciGroupsAPI=True)
|
||||||
try:
|
try:
|
||||||
memberName = callGAPI(ci.groups().memberships(), 'lookup',
|
memberName = callGAPI(ci.groups().memberships(), 'lookup',
|
||||||
throwReasons=GAPI.CIGROUP_GET_THROW_REASONS,
|
throwReasons=GAPI.CIGROUP_GET_THROW_REASONS,
|
||||||
parent=parent, memberKey_id=member, fields='name').get('name')
|
parent=parent, memberKey_id=memberEmail, fields='name').get('name')
|
||||||
callGAPI(ci.groups().memberships(), 'delete',
|
callGAPI(ci.groups().memberships(), 'delete',
|
||||||
throwReasons=GAPI.MEMBERS_THROW_REASONS+[GAPI.FAILED_PRECONDITION],
|
throwReasons=GAPI.MEMBERS_THROW_REASONS+[GAPI.FAILED_PRECONDITION],
|
||||||
name=memberName)
|
name=memberName)
|
||||||
@@ -34714,7 +34726,7 @@ def doUpdateCIGroups():
|
|||||||
syncMembersMaps[baseRole] = {}
|
syncMembersMaps[baseRole] = {}
|
||||||
for member in syncMembers:
|
for member in syncMembers:
|
||||||
syncMembersSets[baseRole].add(_cleanConsumerAddress(convertUIDtoEmailAddress(member, cd=cd, emailTypes='any',
|
syncMembersSets[baseRole].add(_cleanConsumerAddress(convertUIDtoEmailAddress(member, cd=cd, emailTypes='any',
|
||||||
checkForCustomerId=True), syncMembersMaps[baseRole]))
|
checkForCustomerId=True, ciGroupsAPI=True), syncMembersMaps[baseRole]))
|
||||||
checkForExtraneousArguments()
|
checkForExtraneousArguments()
|
||||||
i = 0
|
i = 0
|
||||||
count = len(entityList)
|
count = len(entityList)
|
||||||
@@ -34836,7 +34848,8 @@ def doUpdateCIGroups():
|
|||||||
j = 0
|
j = 0
|
||||||
for member in updateMembers:
|
for member in updateMembers:
|
||||||
j += 1
|
j += 1
|
||||||
memberEmail = convertUIDtoEmailAddress(member, cd=cd, emailTypes='any', checkForCustomerId=True)
|
memberEmail = convertUIDtoEmailAddress(member, cd=cd, emailTypes='any',
|
||||||
|
checkForCustomerId=True, ciGroupsAPI=True)
|
||||||
try:
|
try:
|
||||||
memberName = callGAPI(ci.groups().memberships(), 'lookup',
|
memberName = callGAPI(ci.groups().memberships(), 'lookup',
|
||||||
throwReasons=GAPI.CIGROUP_GET_THROW_REASONS,
|
throwReasons=GAPI.CIGROUP_GET_THROW_REASONS,
|
||||||
@@ -51946,6 +51959,7 @@ QUERY_SHORTCUTS_MAP = {
|
|||||||
'allshortcuts': f"mimeType = '{MIMETYPE_GA_SHORTCUT}'",
|
'allshortcuts': f"mimeType = '{MIMETYPE_GA_SHORTCUT}'",
|
||||||
'all3pshortcuts': f"mimeType = '{MIMETYPE_GA_3P_SHORTCUT}'",
|
'all3pshortcuts': f"mimeType = '{MIMETYPE_GA_3P_SHORTCUT}'",
|
||||||
'allitems': 'allitems',
|
'allitems': 'allitems',
|
||||||
|
'mycommentableitems': ME_IN_OWNERS_AND+f"(mimeType = '{MIMETYPE_GA_DOCUMENT}' or mimeType = '{MIMETYPE_GA_SPREADSHEET}' or mimeType = '{MIMETYPE_GA_PRESENTATION}')",
|
||||||
'mydocs': ME_IN_OWNERS_AND+f"mimeType = '{MIMETYPE_GA_DOCUMENT}'",
|
'mydocs': ME_IN_OWNERS_AND+f"mimeType = '{MIMETYPE_GA_DOCUMENT}'",
|
||||||
'myfiles': ME_IN_OWNERS_AND+f"mimeType != '{MIMETYPE_GA_FOLDER}'",
|
'myfiles': ME_IN_OWNERS_AND+f"mimeType != '{MIMETYPE_GA_FOLDER}'",
|
||||||
'myfolders': ME_IN_OWNERS_AND+f"mimeType = '{MIMETYPE_GA_FOLDER}'",
|
'myfolders': ME_IN_OWNERS_AND+f"mimeType = '{MIMETYPE_GA_FOLDER}'",
|
||||||
@@ -54815,7 +54829,8 @@ def initFileTree(drive, shareddrive, DLP, shareddriveFields, showParent, user, i
|
|||||||
except (GAPI.notFound, GAPI.fileNotFound, GAPI.invalid, GAPI.noListTeamDrivesAdministratorPrivilege) as e:
|
except (GAPI.notFound, GAPI.fileNotFound, GAPI.invalid, GAPI.noListTeamDrivesAdministratorPrivilege) as e:
|
||||||
entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE, fileId], str(e), i, count)
|
entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE, fileId], str(e), i, count)
|
||||||
return (None, False)
|
return (None, False)
|
||||||
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy):
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
||||||
|
userSvcNotApplicableOrDriveDisabled(user, str(e), i, count)
|
||||||
return (None, False)
|
return (None, False)
|
||||||
return (fileTree, True)
|
return (fileTree, True)
|
||||||
|
|
||||||
@@ -56232,14 +56247,14 @@ def _showComment(comment, stripPhotoLinks, timeObjects, i=0, count=0, FJQC=None)
|
|||||||
Ind.Decrement()
|
Ind.Decrement()
|
||||||
|
|
||||||
# gam <UserTypeEntity> show filecomments <DriveFileEntity>
|
# gam <UserTypeEntity> show filecomments <DriveFileEntity>
|
||||||
# [showdeleted] [start <Date>|<Time>] [countsonly]
|
# [showdeleted] [start <Date>|<Time>] [countsonly|positivecountsonly]
|
||||||
# [fields <CommentsFieldNameList>] [showphotolinks]
|
# [fields <CommentsFieldNameList>] [showphotolinks]
|
||||||
# [countsonly]
|
# [countsonly]
|
||||||
# [formatjson]
|
# [formatjson]
|
||||||
# gam <UserTypeEntity> print filecomments <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
# gam <UserTypeEntity> print filecomments <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
# [showdeleted] [start <Date>|<Time>]
|
# [showdeleted] [start <Date>|<Time>]
|
||||||
# [fields <CommentsFieldNameList>] [showphotolinks]
|
# [fields <CommentsFieldNameList>] [showphotolinks]
|
||||||
# [countsonly]
|
# [countsonly|positivecountsonly]
|
||||||
# (addcsvdata <FieldName> <String>)*
|
# (addcsvdata <FieldName> <String>)*
|
||||||
# [formatjson [quotechar <Character>]]
|
# [formatjson [quotechar <Character>]]
|
||||||
def printShowFileComments(users):
|
def printShowFileComments(users):
|
||||||
@@ -56264,7 +56279,7 @@ def printShowFileComments(users):
|
|||||||
FJQC = FormatJSONQuoteChar(csvPF)
|
FJQC = FormatJSONQuoteChar(csvPF)
|
||||||
fieldsList = []
|
fieldsList = []
|
||||||
fileIdEntity = getDriveFileEntity()
|
fileIdEntity = getDriveFileEntity()
|
||||||
countsOnly = False
|
countsOnly = positiveCountsOnly = False
|
||||||
stripPhotoLinks = True
|
stripPhotoLinks = True
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
addCSVData = {}
|
addCSVData = {}
|
||||||
@@ -56285,6 +56300,8 @@ def printShowFileComments(users):
|
|||||||
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
||||||
elif myarg == 'countsonly':
|
elif myarg == 'countsonly':
|
||||||
countsOnly = True
|
countsOnly = True
|
||||||
|
elif myarg == 'positivecountsonly':
|
||||||
|
countsOnly = positiveCountsOnly = True
|
||||||
else:
|
else:
|
||||||
FJQC.GetFormatJSONQuoteChar(myarg)
|
FJQC.GetFormatJSONQuoteChar(myarg)
|
||||||
if csvPF:
|
if csvPF:
|
||||||
@@ -56338,6 +56355,7 @@ def printShowFileComments(users):
|
|||||||
numReplies += len(comment['replies'])
|
numReplies += len(comment['replies'])
|
||||||
if not csvPF:
|
if not csvPF:
|
||||||
if countsOnly:
|
if countsOnly:
|
||||||
|
if not positiveCountsOnly or kcount > 0:
|
||||||
printKeyValueList([Ent.Singular(Ent.DRIVE_FILE_ID), fileId, 'comments', kcount, 'replies', numReplies])
|
printKeyValueList([Ent.Singular(Ent.DRIVE_FILE_ID), fileId, 'comments', kcount, 'replies', numReplies])
|
||||||
else:
|
else:
|
||||||
if not FJQC.formatJSON:
|
if not FJQC.formatJSON:
|
||||||
@@ -56350,6 +56368,7 @@ def printShowFileComments(users):
|
|||||||
_showComment(comment, stripPhotoLinks, timeObjects, k, kcount, FJQC)
|
_showComment(comment, stripPhotoLinks, timeObjects, k, kcount, FJQC)
|
||||||
Ind.Decrement()
|
Ind.Decrement()
|
||||||
elif countsOnly:
|
elif countsOnly:
|
||||||
|
if not positiveCountsOnly or kcount > 0:
|
||||||
row = {'User': user, 'fileId': fileId}
|
row = {'User': user, 'fileId': fileId}
|
||||||
if addCSVData:
|
if addCSVData:
|
||||||
row.update(addCSVData)
|
row.update(addCSVData)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -247,7 +247,9 @@ class ProxiedHttpClient(HttpClient):
|
|||||||
# Trivial setup for ssl socket.
|
# Trivial setup for ssl socket.
|
||||||
sslobj = None
|
sslobj = None
|
||||||
if ssl_imported:
|
if ssl_imported:
|
||||||
sslobj = ssl.wrap_socket(p_sock, None, None)
|
context = ssl.SSLContext(ssl.PROTOCOL_TLS)
|
||||||
|
context.minimum_version = ssl.TLSVersion.TLSv1_2
|
||||||
|
sslobj = context.wrap_socket(p_sock, server_hostname=url.host)
|
||||||
else:
|
else:
|
||||||
sock_ssl = socket.ssl(p_sock, None, None)
|
sock_ssl = socket.ssl(p_sock, None, None)
|
||||||
sslobj = http.client.FakeSocket(p_sock, sock_ssl)
|
sslobj = http.client.FakeSocket(p_sock, sock_ssl)
|
||||||
|
|||||||
@@ -568,7 +568,7 @@ class ProxiedHttpClient(HttpClient):
|
|||||||
context.minimum_version = ssl.TLSVersion.TLSv1_2
|
context.minimum_version = ssl.TLSVersion.TLSv1_2
|
||||||
sslobj = context.wrap_socket(p_sock, server_hostname=uri.host)
|
sslobj = context.wrap_socket(p_sock, server_hostname=uri.host)
|
||||||
else:
|
else:
|
||||||
sock_ssl = socket.ssl(p_sock, None, Nonesock_)
|
sock_ssl = socket.ssl(p_sock, None, None)
|
||||||
sslobj = http.client.FakeSocket(p_sock, sock_ssl)
|
sslobj = http.client.FakeSocket(p_sock, sock_ssl)
|
||||||
# Initalize httplib and replace with the proxy socket.
|
# Initalize httplib and replace with the proxy socket.
|
||||||
connection = http.client.HTTPConnection(proxy_uri.host)
|
connection = http.client.HTTPConnection(proxy_uri.host)
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ CONTACTS = 'contacts'
|
|||||||
CONTACTDELEGATION = 'contactdelegation'
|
CONTACTDELEGATION = 'contactdelegation'
|
||||||
DATATRANSFER = 'datatransfer'
|
DATATRANSFER = 'datatransfer'
|
||||||
DIRECTORY = 'directory'
|
DIRECTORY = 'directory'
|
||||||
DIRECTORY_BETA = 'directory_beta'
|
|
||||||
DOCS = 'docs'
|
DOCS = 'docs'
|
||||||
DRIVE2 = 'drive2'
|
DRIVE2 = 'drive2'
|
||||||
DRIVE3 = 'drive3'
|
DRIVE3 = 'drive3'
|
||||||
@@ -235,7 +234,6 @@ _INFO = {
|
|||||||
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||||
DATATRANSFER: {'name': 'Data Transfer API', 'version': 'datatransfer_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
DATATRANSFER: {'name': 'Data Transfer API', 'version': 'datatransfer_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||||
DIRECTORY: {'name': 'Directory API', 'version': 'directory_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
DIRECTORY: {'name': 'Directory API', 'version': 'directory_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||||
DIRECTORY_BETA: {'name': 'Directory API', 'version': 'directory_v1.1beta1', 'v2discovery': True, 'mappedAPI': 'admin', 'localjson': True},
|
|
||||||
DOCS: {'name': 'Docs API', 'version': 'v1', 'v2discovery': True},
|
DOCS: {'name': 'Docs API', 'version': 'v1', 'v2discovery': True},
|
||||||
DRIVE2: {'name': 'Drive API v2', 'version': 'v2', 'v2discovery': False, 'mappedAPI': 'drive'},
|
DRIVE2: {'name': 'Drive API v2', 'version': 'v2', 'v2discovery': False, 'mappedAPI': 'drive'},
|
||||||
DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
||||||
|
|||||||
@@ -1,141 +0,0 @@
|
|||||||
{
|
|
||||||
"basePath": "",
|
|
||||||
"baseUrl": "https://www.googleapis.com/service_accounts/v1",
|
|
||||||
"canonicalName": "serviceaccountlookup",
|
|
||||||
"description": "Pseudo-API to lookup public certificates for a service account anonymously",
|
|
||||||
"discoveryVersion": "v1",
|
|
||||||
"documentationLink": "https://example.com/",
|
|
||||||
"fullyEncodeReservedExpansion": true,
|
|
||||||
"icons": {
|
|
||||||
"x16": "http://www.google.com/images/icons/product/search-16.gif",
|
|
||||||
"x32": "http://www.google.com/images/icons/product/search-32.gif"
|
|
||||||
},
|
|
||||||
"id": "serviceaccountlookup:v1",
|
|
||||||
"kind": "discovery#restDescription",
|
|
||||||
"name": "serviceaccountlookup",
|
|
||||||
"ownerDomain": "google.com",
|
|
||||||
"ownerName": "Google",
|
|
||||||
"packagePath": "admin",
|
|
||||||
"parameters": {
|
|
||||||
"$.xgafv": {
|
|
||||||
"description": "V1 error format.",
|
|
||||||
"enum": [
|
|
||||||
"1",
|
|
||||||
"2"
|
|
||||||
],
|
|
||||||
"enumDescriptions": [
|
|
||||||
"v1 error format",
|
|
||||||
"v2 error format"
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"access_token": {
|
|
||||||
"description": "OAuth access token.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"alt": {
|
|
||||||
"default": "json",
|
|
||||||
"description": "Data format for response.",
|
|
||||||
"enum": [
|
|
||||||
"json",
|
|
||||||
"media",
|
|
||||||
"proto"
|
|
||||||
],
|
|
||||||
"enumDescriptions": [
|
|
||||||
"Responses with Content-Type of application/json",
|
|
||||||
"Media download with context-dependent Content-Type",
|
|
||||||
"Responses with Content-Type of application/x-protobuf"
|
|
||||||
],
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"callback": {
|
|
||||||
"description": "JSONP",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"fields": {
|
|
||||||
"description": "Selector specifying which fields to include in a partial response.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"key": {
|
|
||||||
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"oauth_token": {
|
|
||||||
"description": "OAuth 2.0 token for the current user.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"prettyPrint": {
|
|
||||||
"default": "true",
|
|
||||||
"description": "Returns response with indentations and line breaks.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"quotaUser": {
|
|
||||||
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"uploadType": {
|
|
||||||
"description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"upload_protocol": {
|
|
||||||
"description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
|
|
||||||
"location": "query",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"protocol": "rest",
|
|
||||||
"resources": {
|
|
||||||
"serviceaccounts": {
|
|
||||||
"methods": {
|
|
||||||
"lookup": {
|
|
||||||
"description": "Lookup",
|
|
||||||
"flatPath": "metadata/x509/{account}",
|
|
||||||
"httpMethod": "GET",
|
|
||||||
"id": "serviceaccountslookup.lookup",
|
|
||||||
"parameterOrder": [
|
|
||||||
"account"
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"account": {
|
|
||||||
"description": "Email or ID of the service account.",
|
|
||||||
"location": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path": "metadata/x509/{account}",
|
|
||||||
"response": {
|
|
||||||
"$ref": "Certificates"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rootUrl": "https://www.googleapis.com/service_accounts/v1",
|
|
||||||
"schemas": {
|
|
||||||
"Certificates": {
|
|
||||||
"description": "JSON template for certificates.",
|
|
||||||
"id": "Certificates",
|
|
||||||
"properties": {
|
|
||||||
"email": { "description": "Email of the delegate.",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"servicePath": "",
|
|
||||||
"title": "Service Account Lookup Pseudo-API",
|
|
||||||
"version": "v1",
|
|
||||||
"version_module": true
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user