mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 04:41:35 +00:00
Compare commits
9 Commits
v7.00.18
...
20241016.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
861279e614 | ||
|
|
b80dd15f4b | ||
|
|
ae95c8fdea | ||
|
|
090b5937ab | ||
|
|
2323e130b1 | ||
|
|
6ef127f283 | ||
|
|
266f00d3a8 | ||
|
|
5c61867e1f | ||
|
|
0bbe1cc958 |
38
.github/workflows/build.yml
vendored
38
.github/workflows/build.yml
vendored
@@ -17,7 +17,7 @@ defaults:
|
|||||||
working-directory: src
|
working-directory: src
|
||||||
|
|
||||||
env:
|
env:
|
||||||
SCRATCH_COUNTER: 2
|
SCRATCH_COUNTER: 3
|
||||||
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
|
||||||
@@ -36,58 +36,63 @@ jobs:
|
|||||||
goal: build
|
goal: build
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
openssl_archs: linux-x86_64
|
openssl_archs: linux-x86_64
|
||||||
- os: [self-hosted, linux, arm64]
|
- os: ubuntu-24.04
|
||||||
jid: 2
|
jid: 2
|
||||||
goal: build
|
goal: build
|
||||||
|
arch: x86_64
|
||||||
|
openssl_archs: linux-x86_64
|
||||||
|
- os: [self-hosted, linux, arm64]
|
||||||
|
jid: 3
|
||||||
|
goal: build
|
||||||
arch: aarch64
|
arch: aarch64
|
||||||
openssl_archs: linux-aarch64
|
openssl_archs: linux-aarch64
|
||||||
- os: ubuntu-22.04
|
- os: ubuntu-22.04
|
||||||
jid: 3
|
jid: 4
|
||||||
goal: build
|
goal: build
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
openssl_archs: linux-x86_64
|
openssl_archs: linux-x86_64
|
||||||
staticx: yes
|
staticx: yes
|
||||||
- os: [self-hosted, linux, arm64]
|
- os: [self-hosted, linux, arm64]
|
||||||
jid: 4
|
jid: 5
|
||||||
goal: build
|
goal: build
|
||||||
arch: aarch64
|
arch: aarch64
|
||||||
openssl_archs: linux-aarch64
|
openssl_archs: linux-aarch64
|
||||||
staticx: yes
|
staticx: yes
|
||||||
- os: macos-13
|
- os: macos-13
|
||||||
jid: 5
|
jid: 6
|
||||||
goal: build
|
goal: build
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
openssl_archs: darwin64-x86_64
|
openssl_archs: darwin64-x86_64
|
||||||
- os: macos-14
|
- os: macos-14
|
||||||
jid: 6
|
jid: 7
|
||||||
goal: build
|
goal: build
|
||||||
arch: aarch64
|
arch: aarch64
|
||||||
openssl_archs: darwin64-arm64
|
openssl_archs: darwin64-arm64
|
||||||
- os: windows-2022
|
- os: windows-2022
|
||||||
jid: 7
|
jid: 8
|
||||||
goal: build
|
goal: build
|
||||||
arch: Win64
|
arch: Win64
|
||||||
openssl_archs: VC-WIN64A
|
openssl_archs: VC-WIN64A
|
||||||
- os: ubuntu-24.04
|
- os: ubuntu-24.04
|
||||||
goal: test
|
goal: test
|
||||||
python: "3.9"
|
python: "3.9"
|
||||||
jid: 8
|
|
||||||
arch: x86_64
|
|
||||||
- os: ubuntu-24.04
|
|
||||||
goal: test
|
|
||||||
python: "3.10"
|
|
||||||
jid: 9
|
jid: 9
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
- os: ubuntu-24.04
|
- os: ubuntu-24.04
|
||||||
goal: test
|
goal: test
|
||||||
python: "3.11"
|
python: "3.10"
|
||||||
jid: 10
|
jid: 10
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
- os: ubuntu-24.04
|
- os: ubuntu-24.04
|
||||||
goal: test
|
goal: test
|
||||||
python: "3.12"
|
python: "3.11"
|
||||||
jid: 11
|
jid: 11
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
|
- os: ubuntu-24.04
|
||||||
|
goal: test
|
||||||
|
python: "3.12"
|
||||||
|
jid: 12
|
||||||
|
arch: x86_64
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
@@ -110,7 +115,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
cache.tar.xz
|
cache.tar.xz
|
||||||
key: gam-${{ matrix.jid }}-20241008
|
key: gam-${{ matrix.jid }}-20241014
|
||||||
|
|
||||||
- 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'
|
||||||
@@ -181,7 +186,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "RUNNING: apt update..."
|
echo "RUNNING: apt update..."
|
||||||
sudo apt-get -qq --yes update
|
sudo apt-get -qq --yes update
|
||||||
sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev
|
sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev libsqlite3-dev
|
||||||
|
|
||||||
- name: MacOS install tools
|
- name: MacOS install tools
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
@@ -697,6 +702,7 @@ jobs:
|
|||||||
export MSI_FILENAME="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.msi"
|
export MSI_FILENAME="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.msi"
|
||||||
# auto-generate a lib.wxs based on the files PyInstaller created for the lib/ directory
|
# auto-generate a lib.wxs based on the files PyInstaller created for the lib/ directory
|
||||||
/c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/heat.exe dir "${gampath}/lib" -ke -srd -cg Lib -gg -dr lib -directoryid lib -out lib.wxs
|
/c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/heat.exe dir "${gampath}/lib" -ke -srd -cg Lib -gg -dr lib -directoryid lib -out lib.wxs
|
||||||
|
$PYTHON tools/gen-wix-xml-filelist.py lib.wxs
|
||||||
echo "-- begin lib.wxs --"
|
echo "-- begin lib.wxs --"
|
||||||
cat lib.wxs
|
cat lib.wxs
|
||||||
echo "-- end lib.wxs --"
|
echo "-- end lib.wxs --"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
- [Parameters for Basic Levels](#parameters-for-basic-levels)
|
- [Parameters for Basic Levels](#parameters-for-basic-levels)
|
||||||
- [Create an Access Level](#create-an-access-level)
|
- [Create an Access Level](#create-an-access-level)
|
||||||
- [Update an Access Level](#update-an-access-level)
|
- [Update an Access Level](#update-an-access-level)
|
||||||
|
- [Update Access Levels with JSON](#update-access-levels-with-json)
|
||||||
- [Delete an Access Level](#delete-an-access-level)
|
- [Delete an Access Level](#delete-an-access-level)
|
||||||
- [Display all Access Levels](#display-all-access-levels)
|
- [Display all Access Levels](#display-all-access-levels)
|
||||||
- [CAA Region Codes](#caa-region-codes)
|
- [CAA Region Codes](#caa-region-codes)
|
||||||
@@ -177,6 +178,27 @@ This example adds UK to the allowed regions for CORP_COUNTRIES
|
|||||||
gam update caalevel CORP_COUNTRIES basic condition regions US,CA,UK endcondition
|
gam update caalevel CORP_COUNTRIES basic condition regions US,CA,UK endcondition
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Update Access Levels with JSON
|
||||||
|
Update existing CAA levels via their JSON data; create a CSV file of CAA levels.
|
||||||
|
```
|
||||||
|
gam redirect csv ./CAAlevels.csv print caalevels formatjson quotechar "'"
|
||||||
|
```
|
||||||
|
Edit the JSON column for the desired CAA level(s) in CAAlevels.csv.
|
||||||
|
Update the desired CAA level by selecting the row by it's title; repeat for each title to update.
|
||||||
|
```
|
||||||
|
gam config csv_input_row_filter "title:text='Example Title'" csv CAAlevels.csv quotechar "'" gam update caalevel "~name" json "~JSON"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Edit CAAlevels.csv and add UK to the allowed regions for CORP_COUNTRIES
|
||||||
|
```
|
||||||
|
{"regions": ["US", "CA", "UK"]}
|
||||||
|
```
|
||||||
|
Do the update.
|
||||||
|
```
|
||||||
|
gam config csv_input_row_filter "title:text='CORP_COUNTRIES'" csv CAAlevels.csv quotechar "'" gam update caalevel "~name" json "~JSON"
|
||||||
|
```
|
||||||
|
|
||||||
## Delete an Access Level
|
## Delete an Access Level
|
||||||
Deletes the specified access level.
|
Deletes the specified access level.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -10,6 +10,16 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|||||||
|
|
||||||
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
||||||
|
|
||||||
|
### 7.00.19
|
||||||
|
|
||||||
|
Updated `gam update shareddrive <SharedDriveEntity> ou <OrgUnitItem>` to handle the following error
|
||||||
|
that occurs when an invalid `<SharedDriveEntity>` is specified.
|
||||||
|
```
|
||||||
|
ERROR: 400: invalidArgument - Invalid org membership name 0AJ3b2FTPakToUk9PVAxx.~
|
||||||
|
```
|
||||||
|
|
||||||
|
Updated `gam print browsers` to properly format the time field `deviceIdentifiersHistory.records.0.firstRecordTime`.
|
||||||
|
|
||||||
### 7.00.18
|
### 7.00.18
|
||||||
|
|
||||||
Updated `gam create project` to use a default project name of `gam-project-a1b2c` (`a1b2c` is a random string of 5 characters)
|
Updated `gam create project` to use a default project name of `gam-project-a1b2c` (`a1b2c` is a random string of 5 characters)
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||||
admin@server:/Users/admin$ gam version
|
admin@server:/Users/admin$ gam version
|
||||||
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||||
GAM 7.00.18 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.00.19 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.0 64-bit final
|
Python 3.13.0 64-bit final
|
||||||
MacOS Sonoma 14.5 x86_64
|
MacOS Sonoma 14.5 x86_64
|
||||||
@@ -923,7 +923,7 @@ writes the credentials into the file oauth2.txt.
|
|||||||
C:\>del C:\GAMConfig\oauth2.txt
|
C:\>del C:\GAMConfig\oauth2.txt
|
||||||
C:\>gam version
|
C:\>gam version
|
||||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||||
GAM7 7.00.18 - https://github.com/GAM-team/GAM - pythonsource
|
GAM7 7.00.19 - https://github.com/GAM-team/GAM - pythonsource
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.0 64-bit final
|
Python 3.13.0 64-bit final
|
||||||
Windows-10-10.0.17134 AMD64
|
Windows-10-10.0.17134 AMD64
|
||||||
|
|||||||
@@ -427,6 +427,15 @@ gam info ou <OrgUnitPath> nousers
|
|||||||
gam show teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
gam show teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||||
gam print teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
gam print teamdrives query "orgUnitId='03ph8a2z21rexy'" fields id,name,orgunit,createdtime
|
||||||
```
|
```
|
||||||
|
Alternative method; `<OrgUnitPath>` defaults to `/`.
|
||||||
|
```
|
||||||
|
gam show oushareddrives
|
||||||
|
[ou|org|orgunit <OrgUnitPath>]
|
||||||
|
[formatjson]
|
||||||
|
gam print oushareddrives [todrive <ToDriveAttribute>*]
|
||||||
|
[ou|org|orgunit <OrgUnitPath>]
|
||||||
|
[formatjson [quotechar <Character>]]
|
||||||
|
```
|
||||||
|
|
||||||
## Manage Shared Drive access
|
## Manage Shared Drive access
|
||||||
These commands are used to manage the ACLs on Shared Drives themselves, not the files/folders on the Shared Drives.
|
These commands are used to manage the ACLs on Shared Drives themselves, not the files/folders on the Shared Drives.
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
- [Print user domain counts](#print-user-domain-counts)
|
- [Print user domain counts](#print-user-domain-counts)
|
||||||
- [Print domain counts for users in a specific domain and/or selected by a query](#print-domain-counts-for-users-in-a-specific-domain-and-or-selected-by-a-query)
|
- [Print domain counts for users in a specific domain and/or selected by a query](#print-domain-counts-for-users-in-a-specific-domain-and-or-selected-by-a-query)
|
||||||
- [Print domain counts for users specified by `<UserTypeEntity>`](#print-domain-counts-for-users-specified-by-usertypeentity)
|
- [Print domain counts for users specified by `<UserTypeEntity>`](#print-domain-counts-for-users-specified-by-usertypeentity)
|
||||||
- [Print user counts by OrgUnit](print-user-counts-by-orgunit)
|
- [Print user counts by OrgUnit](#print-user-counts-by-orgunit)
|
||||||
- [Print user list](#print-user-list)
|
- [Print user list](#print-user-list)
|
||||||
- [Display user counts](#display-user-counts)
|
- [Display user counts](#display-user-counts)
|
||||||
- [Verify domain membership]($verify-domain-membership)
|
- [Verify domain membership]($verify-domain-membership)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAM 7.00.18 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.00.19 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.0 64-bit final
|
Python 3.13.0 64-bit final
|
||||||
MacOS Sonoma 14.5 x86_64
|
MacOS Sonoma 14.5 x86_64
|
||||||
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
|
|||||||
Print the current version of Gam with details and time offset information
|
Print the current version of Gam with details and time offset information
|
||||||
```
|
```
|
||||||
gam version timeoffset
|
gam version timeoffset
|
||||||
GAM 7.00.18 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.00.19 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.0 64-bit final
|
Python 3.13.0 64-bit final
|
||||||
MacOS Sonoma 14.5 x86_64
|
MacOS Sonoma 14.5 x86_64
|
||||||
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|||||||
Print the current version of Gam with extended details and SSL information
|
Print the current version of Gam with extended details and SSL information
|
||||||
```
|
```
|
||||||
gam version extended
|
gam version extended
|
||||||
GAM 7.00.18 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.00.19 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.0 64-bit final
|
Python 3.13.0 64-bit final
|
||||||
MacOS Sonoma 14.5 x86_64
|
MacOS Sonoma 14.5 x86_64
|
||||||
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.00.18
|
Latest: 7.00.19
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -72,7 +72,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
7.00.18
|
7.00.19
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -82,7 +82,7 @@ echo $VER
|
|||||||
Print the current version of Gam and address of this Wiki
|
Print the current version of Gam and address of this Wiki
|
||||||
```
|
```
|
||||||
gam help
|
gam help
|
||||||
GAM 7.00.18 - https://github.com/GAM-team/GAM
|
GAM 7.00.19 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.0 64-bit final
|
Python 3.13.0 64-bit final
|
||||||
MacOS Sonoma 14.5 x86_64
|
MacOS Sonoma 14.5 x86_64
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
7.00.19
|
||||||
|
|
||||||
|
Updated `gam update shareddrive <SharedDriveEntity> ou <OrgUnitItem>` to handle the following error
|
||||||
|
that occurs when an invalid `<SharedDriveEntity>` is specified.
|
||||||
|
```
|
||||||
|
ERROR: 400: invalidArgument - Invalid org membership name 0AJ3b2FTPakToUk9PVAxx.~
|
||||||
|
```
|
||||||
|
|
||||||
|
Updated `gam print browsers` to properly format the time field `deviceIdentifiersHistory.records.0.firstRecordTime`.
|
||||||
|
|
||||||
7.00.18
|
7.00.18
|
||||||
|
|
||||||
Updated `gam create project` to use a default project name of `gam-project-a1b2c` (`a1b2c` is a random string of 5 characters)
|
Updated `gam create project` to use a default project name of `gam-project-a1b2c` (`a1b2c` is a random string of 5 characters)
|
||||||
|
|||||||
@@ -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.00.18'
|
__version__ = '7.00.19'
|
||||||
__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
|
||||||
@@ -24993,7 +24993,7 @@ def doDeleteBrowsers():
|
|||||||
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden):
|
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden):
|
||||||
checkEntityAFDNEorAccessErrorExit(None, Ent.CHROME_BROWSER, deviceId)
|
checkEntityAFDNEorAccessErrorExit(None, Ent.CHROME_BROWSER, deviceId)
|
||||||
|
|
||||||
BROWSER_TIME_OBJECTS = {'lastActivityTime', 'lastPolicyFetchTime', 'lastRegistrationTime', 'lastStatusReportTime', 'safeBrowsingWarningsResetTime'}
|
BROWSER_TIME_OBJECTS = {'firstRecordTime', 'lastActivityTime', 'lastPolicyFetchTime', 'lastRegistrationTime', 'lastStatusReportTime', 'safeBrowsingWarningsResetTime'}
|
||||||
|
|
||||||
def _showBrowser(browser, FJQC, i=0, count=0):
|
def _showBrowser(browser, FJQC, i=0, count=0):
|
||||||
if FJQC.formatJSON:
|
if FJQC.formatJSON:
|
||||||
@@ -64285,13 +64285,15 @@ def _moveSharedDriveToOU(orgUnit, orgUnitId, driveId, user, i, count, ci, return
|
|||||||
'destinationOrgUnit': f'orgUnits/{orgUnitId[3:]}'}
|
'destinationOrgUnit': f'orgUnits/{orgUnitId[3:]}'}
|
||||||
try:
|
try:
|
||||||
callGAPI(ci.orgUnits().memberships(), 'move',
|
callGAPI(ci.orgUnits().memberships(), 'move',
|
||||||
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.ABORTED],
|
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.FORBIDDEN,
|
||||||
|
GAPI.INVALID_ARGUMENT, GAPI.ABORTED],
|
||||||
name=name, body=cibody)
|
name=name, body=cibody)
|
||||||
if not returnIdOnly:
|
if not returnIdOnly:
|
||||||
Act.Set(Act.MOVE)
|
Act.Set(Act.MOVE)
|
||||||
entityModifierNewValueActionPerformed([Ent.SHAREDDRIVE, driveId], Act.MODIFIER_TO, f'{Ent.Singular(Ent.ORGANIZATIONAL_UNIT)}: {orgUnit}', i, count)
|
entityModifierNewValueActionPerformed([Ent.USER, user, Ent.SHAREDDRIVE, driveId], Act.MODIFIER_TO,
|
||||||
|
f'{Ent.Singular(Ent.ORGANIZATIONAL_UNIT)}: {orgUnit}', i, count)
|
||||||
except (GAPI.notFound, GAPI.forbidden, GAPI.aborted, GAPI.badRequest, GAPI.internalError,
|
except (GAPI.notFound, GAPI.forbidden, GAPI.aborted, GAPI.badRequest, GAPI.internalError,
|
||||||
GAPI.noManageTeamDriveAdministratorPrivilege) as e:
|
GAPI.noManageTeamDriveAdministratorPrivilege, GAPI.invalidArgument) as e:
|
||||||
entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE_ID, driveId], str(e), i, count)
|
entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE_ID, driveId], str(e), i, count)
|
||||||
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
||||||
userSvcNotApplicableOrDriveDisabled(user, str(e), i, count)
|
userSvcNotApplicableOrDriveDisabled(user, str(e), i, count)
|
||||||
|
|||||||
@@ -1,58 +1,23 @@
|
|||||||
import os
|
|
||||||
import sys
|
|
||||||
import uuid
|
import uuid
|
||||||
|
from lxml import etree
|
||||||
|
import sys
|
||||||
|
|
||||||
source_dir = sys.argv[1]
|
# Hacky solution to create a Guid for all files
|
||||||
template_file = sys.argv[2]
|
# so Wix is happy and Guid is stable every time.
|
||||||
target_file = sys.argv[3]
|
# uuid5 is used for the Guid and the input is the
|
||||||
|
# source filename so the Guid will be the same
|
||||||
|
# every time as long as the source file name is
|
||||||
|
# the same.
|
||||||
|
|
||||||
existing_components = {
|
rewrite_file = sys.argv[1]
|
||||||
'gam.exe': ''' <Component Id="gam_exe" Guid="d046ea24-c9f8-40ca-84db-70b0119933ff">
|
|
||||||
<File Name="gam.exe" KeyPath="yes" />
|
|
||||||
<Environment Id="PATH" Name="PATH" Value="[INSTALLFOLDER]" Permanent="yes" Part="last" Action="set" System="yes" />
|
|
||||||
</Component>
|
|
||||||
''',
|
|
||||||
'LICENSE': ''' <Component Id="license" Guid="c76864c5-d005-44d5-bb7c-a27e5923792d">
|
|
||||||
<File Name="LICENSE" KeyPath="yes" />
|
|
||||||
</Component>
|
|
||||||
''',
|
|
||||||
'gam-setup.bat': ''' <Component Id="gam_setup_bat" Guid="5e6bbacb-d86f-4d80-a10b-89b81ee63fcb">
|
|
||||||
<File Name="gam-setup.bat" KeyPath="yes" />
|
|
||||||
</Component>
|
|
||||||
''',
|
|
||||||
'GamCommands.txt': ''' <Component Id="GamCommands_txt" Guid="a2dca862-b222-469e-a637-95ea2a1c53e7">
|
|
||||||
<File Name="GamCommands.txt" KeyPath="yes" />
|
|
||||||
</Component>
|
|
||||||
''',
|
|
||||||
'GamUpdate.txt': ''' <Component Id="GamUpdate_txt" Guid="1b7cdd48-0fff-4943-a219-102fcd14c755">
|
|
||||||
<File Name="GamUpdate.txt" KeyPath="yes" />
|
|
||||||
</Component>
|
|
||||||
''',
|
|
||||||
'cacerts.pem': ''' <Component Id="cacerts_pem" Guid="61fe2b2d-1646-4bed-b844-193965e97727">
|
|
||||||
<File Name="cacerts.pem" KeyPath="yes" />
|
|
||||||
</Component>
|
|
||||||
''',
|
|
||||||
}
|
|
||||||
|
|
||||||
component_xml = ''
|
|
||||||
all_files = []
|
|
||||||
for root, dirs, files in os.walk(source_dir):
|
|
||||||
for filename in files:
|
|
||||||
relpath = os.path.relpath(root, source_dir)
|
|
||||||
if relpath == '.':
|
|
||||||
all_files.append(filename)
|
|
||||||
else:
|
|
||||||
all_files.append(os.path.join(relpath, filename))
|
|
||||||
all_files.sort()
|
|
||||||
for filename in all_files:
|
|
||||||
component_xml += existing_components.get(filename,
|
|
||||||
f' <Component>\n <File Name="{filename}" KeyPath="yes"/>\n </Component>\n')
|
|
||||||
|
|
||||||
with open(template_file, 'r') as f:
|
|
||||||
template = f.read()
|
|
||||||
|
|
||||||
full_xml = template.replace('REPLACE_ME_WITH_FILE_COMPONENTS', component_xml)
|
|
||||||
|
|
||||||
with open(target_file, 'w') as f:
|
|
||||||
f.write(full_xml)
|
|
||||||
|
|
||||||
|
with open(rewrite_file, 'rb') as f:
|
||||||
|
input_xml = f.read()
|
||||||
|
root = etree.fromstring(input_xml)
|
||||||
|
for elem in root.getiterator():
|
||||||
|
if 'Guid' in elem.attrib:
|
||||||
|
source = elem.getchildren()[0].attrib['Source']
|
||||||
|
stable_uuid = str(uuid.uuid5(uuid.NAMESPACE_URL, source))
|
||||||
|
elem.attrib['Guid'] = stable_uuid
|
||||||
|
with open(rewrite_file, 'w') as f:
|
||||||
|
f.write(etree.tostring(root).decode())
|
||||||
|
|||||||
Reference in New Issue
Block a user