#!/usr/bin/python # # Copyright 2011 Google Inc. All Rights Reserved. # # 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. """Create group and update settings using two APIs. Sample to use the Groups Settings API in google-api-python client library http://code.google.com/p/google-api-python-client/source/checkout with the Groups Provisioning API in gdata-python-client library http://code.google.com/p/gdata-python-client/source/checkout to create a group and update its settings. Usage: $ python create_update_group.py """ __author__ = 'Shraddha Gupta ' import os import pprint import sys from apiclient.discovery import build import gdata.apps.groups.client import gflags import httplib2 from oauth2client.client import flow_from_clientsecrets from oauth2client.file import Storage from oauth2client.tools import run # CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this # application, including client_id and client_secret, which are found # on the API Access tab on the Google APIs # Console CLIENT_SECRETS = 'client_secrets.json' # Helpful message to display in the browser if the CLIENT_SECRETS file # is missing. MISSING_CLIENT_SECRETS_MESSAGE = """ WARNING: Please configure OAuth 2.0 To make this sample run you will need to populate the client_secrets.json file found at: %s with information from the APIs Console . """ % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS) # Request a token for the scope of two APIs: # Groups Provisioning and Groups Settings APIs SCOPES = ('https://apps-apis.google.com/a/feeds/groups/ ' 'https://www.googleapis.com/auth/apps.groups.settings') FLOW = flow_from_clientsecrets(CLIENT_SECRETS, scope=SCOPES, message=MISSING_CLIENT_SECRETS_MESSAGE) FLAGS = gflags.FLAGS def GetOAuth2Token(client_id, client_secret, access_token, refresh_token): """Get the OAuth 2.0 token to be used with the Groups Provisioning API. Args: client_id: String client_id of the installed application client_secret: String client_secret of the installed application access_token: String access token obtained from OAuth 2.0 server flow refresh_token: String refresh token obtained with access token Returns: token: String OAuth 2.0 token adapted for the Groups Provisioning API. """ token = gdata.gauth.OAuth2Token(client_id=client_id, client_secret=client_secret, scope=SCOPES, access_token=access_token, refresh_token=refresh_token, user_agent='create-manage-group-sample') return token def CreateAndUpdateGroup(http, groups_client, domain): """Create a group and update its settings. Args: http: httplib2.Http authorized object groups_client: gdata.apps.groups.client.GroupsProvisioningClient authorized group provisioning client domain: String domain name """ group_id = raw_input('Enter the group id: ') group_name = raw_input('Enter the group name: ') group_description = raw_input('Enter the group description: ') email_permission = raw_input('Enter the email permission: ') if not (group_id and group_name): print 'One or more required fields missing: group id, group name' sys.exit(1) new_group = groups_client.CreateGroup(group_id=group_id, group_name=group_name, description=group_description, email_permission=email_permission) print 'Group Created %s' % new_group.group_id print 'Name: %s\nDescription %s\nEmail Permission %s' % ( new_group.group_name, new_group.description, new_group.email_permission) group_id = '%s@%s' % (new_group.group_id, domain) service = build('groupssettings', 'v1', http=http) # Get the resource 'group' from the set of resources of the API. group_resource = service.groups() body = {'showInGroupDirectory': True, 'whoCanViewGroup': 'ALL_IN_DOMAIN_CAN_VIEW', 'whoCanViewMembership': 'ALL_IN_DOMAIN_CAN_VIEW'} # Update the group properties g = group_resource.update(groupUniqueId=group_id, body=body).execute() print '\nUpdated Access Permissions to the group\n' pprint.pprint(g) def main(argv): """Demonstrates creation of a group and updation of its settings.""" storage = Storage('group.dat') credentials = storage.get() if credentials is None or credentials.invalid: print 'Credentials are invalid or do not exist.' credentials = run(FLOW, storage) # Create an httplib2.Http object to handle our HTTP requests and authorize it # with the valid credentials. http = httplib2.Http() http = credentials.authorize(http) domain = raw_input('Enter the domain: ') # Create an OAuth 2.0 token suitable for use with the GData client library oauth2token = GetOAuth2Token(credentials.client_id, credentials.client_secret, credentials.access_token, credentials.refresh_token) groups_client = oauth2token.authorize( gdata.apps.groups.client.GroupsProvisioningClient(domain=domain)) CreateAndUpdateGroup(http, groups_client, domain) if __name__ == '__main__': main(sys.argv)