generate/resources/_users.py (57 lines of code) (raw):
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import hashlib
from cdktf import TerraformLocal, Fn
from cdktf_cdktf_provider_google.data_google_service_account_access_token import (
DataGoogleServiceAccountAccessToken,
)
from cdktf_cdktf_provider_googleworkspace.provider import GoogleworkspaceProvider
from cdktf_cdktf_provider_googleworkspace.user import User
import util
def init_workspace_provider(self, users):
setup_sa = self.created["vars"]["setup_service_account"].string_value
sa_token_access = DataGoogleServiceAccountAccessToken(
self,
"sa",
target_service_account=setup_sa,
scopes=[
"userinfo-email",
"cloud-platform",
"https://www.googleapis.com/auth/admin.directory.user",
],
)
user_pass = {
user["primary_email"]: hashlib.md5(util.random_str().encode()).hexdigest()
for user in users
}
self.created["locals"]["users_hash_pass"] = TerraformLocal(
self, "users_hash_password", user_pass
)
self.created["locals"]["change_password_at_next_login"] = TerraformLocal(
self, "change_password_at_next_login", True
)
GoogleworkspaceProvider(
self,
id="googleworkspace",
customer_id=self.created["data"]["google_org"].directory_customer_id,
access_token=sa_token_access.access_token,
)
def create_user(self, user):
user_id = user["primary_email"]
user["password"] = Fn.lookup(
self.created["locals"]["users_hash_pass"].as_string_map, user_id
)
user["hash_function"] = "MD5"
user["change_password_at_next_login"] = self.created["locals"][
"change_password_at_next_login"
].as_boolean
self.created["users"][user_id] = User(
self,
f"user_{user_id}",
**user,
)
def generate_users(self, my_resource, resource):
self.ensure_data(["google_org"])
add_users = self.eztf_config.get(my_resource)
if add_users:
init_workspace_provider(self, add_users)
for user in add_users:
create_user(self, user)