-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmailapi.py
More file actions
59 lines (47 loc) · 2.12 KB
/
mailapi.py
File metadata and controls
59 lines (47 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import argparse
import json
import logging
import os
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def get_google_service(client_secret_file, scopes):
try:
flow = InstalledAppFlow.from_client_secrets_file(client_secret_file, scopes)
creds = flow.run_local_server(port=0)
service = build('admin', 'directory_v1', credentials=creds)
return service
except Exception as e:
logging.error(f"Failed to get Google service: {e}")
exit(1)
def get_all_users(service, domain):
users = []
try:
request = service.users().list(domain=domain, maxResults=500, orderBy='email', projection='full')
while request is not None:
response = request.execute()
users.extend(response.get('users', []))
request = service.users().list_next(previous_request=request, previous_response=response)
except HttpError as error:
logging.error(f"HTTP error occurred: {error}")
except Exception as ex:
logging.error(f"An error occurred: {ex}")
return users
def email_entrypoint(client_secret_file, domain):
scopes = ['https://www.googleapis.com/auth/admin.directory.user']
service = get_google_service(client_secret_file, scopes)
users = get_all_users(service, domain)
if users:
with open('user_details.json', 'w') as file:
json.dump(users, file, indent=4)
logging.info(f"Total users fetched: {len(users)}")
logging.info("User details saved in 'user_details.json'.")
else:
logging.info('No users found.')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Fetch and save Google Workspace user details.')
parser.add_argument('--client_secret', help='Path to client secret JSON file', required=True)
parser.add_argument('--domain', help='Google Workspace domain', required=True)
args = parser.parse_args()
email_entrypoint(args.client_secret, args.domain)