Google Provisioning API不再允许恢复(取消暂停)用户

时间:2012-11-21 18:27:10

标签: google-provisioning-api

还有人看到这个吗? 对多域的Google配置API似乎进行了一些更改。我有长时间运行的代码,可以恢复已停止工作的已暂停用户。我使用Python和2.0.1的Python GData库和UpdateUser方法来做到这一点。我还注意到,同一个库中的RetrieveUser不再返回已暂停用户的名字和姓氏。我已经在Google apps-api-issues上提出了一个问题,如果你看到这个问题,请加星标。

http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3281

3 个答案:

答案 0 :(得分:1)

这是一个简单的例子,将解决问题。请注意,从已挂起用户的RetrieveUser()返回的user_entry对象将不具有名字或姓氏的属性值。修改后的user_entry对象将传递给UpdateUser(),后者不允许使用名字和名字的缺失值。

#!/usr/bin/python
import sys
import gdata.apps.multidomain.client

if len(sys.argv) < 4:
  print "\nUsage:"
  print sys.argv[0], "admin_email admin_password user_email\n"
  sys.exit(0)

admin = sys.argv[1]
password = sys.argv[2]
email = sys.argv[3]
domain = ""
if '@' in admin:
  admin_name,domain = admin.split('@', 1)
else:
  print "Specify full email address of administrator.\n"
  print "\nUsage:"
  print sys.argv[0], "admin_email admin_password user_email\n"
  sys.exit(0)
if '@' not in email:
  print "Specify full email address of user.\n"
  print "\nUsage:"
  print sys.argv[0], "admin_email admin_password user_email\n"
  sys.exit(0)

md_client = gdata.apps.multidomain.client.MultiDomainProvisioningClient(
  domain=domain)
md_client.ClientLogin(email=admin, password=password, source='MDPROVISIONING')
print "Retrieve user: %s\n" %(email)
user_entry = md_client.RetrieveUser(email)
print user_entry
print ('\nRetrieve results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(user_entry.email,user_entry.suspended,
    user_entry.first_name,user_entry.last_name))
print "Update user (suspend): %s\n" %(email)
user_entry.suspended = 'true'
updated_user_entry = md_client.UpdateUser(email, user_entry)
print updated_user_entry
print ('\nSuspend results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(updated_user_entry.email,updated_user_entry.suspended,
    updated_user_entry.first_name,updated_user_entry.last_name))
print "Retrieve user: %s\n" %(email)
user_entry = md_client.RetrieveUser(email)
print user_entry
print ('\nRetrieve results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(user_entry.email,user_entry.suspended,
    user_entry.first_name,user_entry.last_name))
print "Update user (restore): %s\n" %(email)
user_entry.suspended = 'false'
updated_user_entry = md_client.UpdateUser(email, user_entry)
print updated_user_entry
print ('\nRestore results: email: %s, suspended: %s,'
  ' first name: %s, last name: %s\n' 
  %(updated_user_entry.email,updated_user_entry.suspended,
    updated_user_entry.first_name,updated_user_entry.last_name))

答案 1 :(得分:1)

感谢user1803418,这解释了为什么还原用户可以使用GAM而不是代码。在RetrieveUser API调用中缺少firstName和lastName绝对是Google最终需要解决的问题。但是,我将未解决的问题描述为由firstName / lastName问题激发的客户端库缺陷。

API仅需要在更新用户API调用中提交要更新的属性。无需指定用户的firstName,lastName和其他对象详细信息。这意味着检索用户以执行更新只会使更新过程花费更长时间,实际上只需要一次API调用。

GAM使用它自己实现的多域API调用,这是我在发布multidomain / client.py之前编写的。 GAM的实现不要求设置所有用户属性以执行更新。您可以通过以下方式看到: http://code.google.com/p/google-apps-manager/source/browse/trunk/gdata/apps/multidomain/service.py#69

只有调用UpdateUser()时设置的属性才会发送给Google。您可以通过安装GAM并在使用GAM命​​令取消挂起用户之前创建名为debug.gam的文件来自行查看:

gam更新用户暂停

对Google的XML请求将是最小的,仅显示一些字段,包括用户的暂停状态。 firstName和lastName将不包含在请求中。

所以我认为你有三个选择:

1)等待Google修复firstName / lastName问题。这也应解决悬而未决的问题。

2)重写multidomain / client.py UpdateUser()函数,以便它不需要设置所有用户属性来执行更新。

3)切换代码以使用GAM的自定义multidomain / service.py库,因为它支持仅更新用户提供的属性。

答案 2 :(得分:0)

我希望Google尽快修复丢失的名字。 在多域客户​​端中修改UpdateUser (gdata.apps.multidomain.client)似乎让事情继续下去:

def update_user(self, email, user_entry, **kwargs):

    user_entry = gdata.apps.multidomain.data.UserEntry(
        email=email,first_name=user_entry.first_name,
        last_name=user_entry.last_name,password=user_entry.password,
        change_password=user_entry.change_password_at_next_login,
        suspended=user_entry.suspended, is_admin=user_entry.is_admin,
        ip_whitelisted=user_entry.ip_whitelisted, quota=user_entry.quota)

    return self.update(user_entry,
                   uri=self.MakeMultidomainUserProvisioningUri(email),
                   **kwargs)