memoQSecurity.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. from suds.client import Client
  2. import hashlib
  3. import json
  4. class Group(object):
  5. """Wrapper for group."""
  6. def __init__(self, group_info=None):
  7. self.info = group_info
  8. def __repr__(self):
  9. if self.info != None:
  10. return "{} - {}".format(self.info.GroupName, self.info.GroupGuid)
  11. else:
  12. return "No group!"
  13. class User(object):
  14. """Wrapper for user."""
  15. def __init__(self, user_info=None):
  16. self.info = user_info
  17. def valid_user_info(self):
  18. """ Returns true if given user_info has all required attributes."""
  19. required_attributes = ["EmailAddress", "FullName",
  20. "Password", "UserName", "PackageWorkflowType", "UserGuid"]
  21. for attribute in required_attributes:
  22. if not hasattr(self.info, attribute):
  23. return False
  24. return True
  25. def __repr__(self):
  26. if self.info != None:
  27. return "{} - {}".format(self.info.FullName, self.info.UserGuid)
  28. else:
  29. return "No user!"
  30. class MemoQSecurity(object):
  31. """Client for memoQ Security API."""
  32. def __init__(self):
  33. with open("config.json") as json_file:
  34. self.config = json.load(json_file)
  35. if self.config["api_base_url"] != "":
  36. apiURL = self.config["api_base_url"] + \
  37. "/memoqservices/security?wsdl"
  38. self.client = Client(apiURL)
  39. self.user = None
  40. self.users = []
  41. self.groups = None
  42. self.subvendors = None
  43. def set_active_user(self, guid):
  44. """Sets user of given guid as active."""
  45. self.user = User(self.client.service.GetUser(guid))
  46. def get_users(self):
  47. """Gets list of users from the server into users field."""
  48. self.users = [User(x) for x in self.client.service.ListUsers()[0]]
  49. def user_by_name(self, username):
  50. """ Returns list of users of given fullname (can be partial) from users field."""
  51. if not len(self.users):
  52. self.get_users()
  53. return [x for x in self.users if username in x.info.FullName]
  54. def not_empty_user_info(self):
  55. """Validates user info of active user. Returns true on success."""
  56. if self.user.valid_user_info():
  57. if self.user.info.EmailAddress != None \
  58. and self.user.info.FullName != None \
  59. and self.user.info.Password != None \
  60. and self.user.info.UserName != None \
  61. and self.user.info.PackageWorkflowType != None:
  62. return True
  63. return False
  64. def set_password(self, password):
  65. """Hashes and sets password for active user."""
  66. if self.user.info != None and password != "":
  67. salt = 'fgad s d f sgds g sdg gfdg'
  68. to_hash = (password + salt).encode('utf-8')
  69. self.user.info.Password = str(
  70. hashlib.sha1(to_hash).hexdigest()).upper()
  71. def new_user(self):
  72. """ Sets empty user info as active user (package workflow = online).
  73. For further user creation."""
  74. self.user = User(self.client.factory.create(
  75. '{http://kilgray.com/memoqservices/2007}UserInfo'))
  76. package_workflow = self.client.factory.create(
  77. '{http://schemas.datacontract.org/2004/07/MemoQServices}UserPackageWorkflowType')
  78. self.user.info.PackageWorkflowType.value = package_workflow.Online
  79. def create_user(self):
  80. """ Creates new user on server from active user. Returns guid."""
  81. if self.not_empty_user_info():
  82. guid = self.client.service.CreateUser(self.user.info)
  83. if guid != None:
  84. self.set_active_user(guid)
  85. return guid
  86. def update_user(self):
  87. """ Updates user info on server. Returns true on success."""
  88. if self.not_empty_user_info():
  89. self.client.service.UpdateUser(self.user.info)
  90. return True
  91. return False
  92. def delete_user(self):
  93. """ Deletes active user. Dangerous! Returns true on success."""
  94. if self.user != None and self.user.valid_user_info() and self.user.info.UserGuid != None:
  95. self.client.service.DeleteUser(self.user.info.UserGuid)
  96. return True
  97. return False
  98. def get_groups(self):
  99. """ Gets list of groups from the server into groups field."""
  100. self.groups = [Group(x) for x in self.client.service.ListGroups()[0]]
  101. def group_by_name(self, groupname):
  102. """ Returns list of groups of given group name (can be partial) from groups field."""
  103. if self.groups == None:
  104. self.get_groups()
  105. return [x for x in self.groups if groupname in x.info.GroupName]
  106. def get_subvendors(self):
  107. """ Gets list of subvendor groups from the server into subvendors field."""
  108. self.subvendors = [
  109. Group(x) for x in self.client.service.ListSubvendorGroups()[0]]
  110. def subvendor_by_name(self, groupname):
  111. """ Returns list of subvendor groups of given group name (can be partial) from subvendors field."""
  112. if self.subvendors == None:
  113. self.get_subvendors()
  114. return [x for x in self.subvendors if groupname in x.info.GroupName]
  115. def users_of_group(self, guid):
  116. """Returns list of users of group of given guid."""
  117. if guid == None:
  118. return []
  119. try:
  120. users = [User(x)
  121. for x in self.client.service.ListUsersOfGroup(guid)[0]]
  122. return users
  123. except:
  124. return []
  125. def add_current_user_to_group(self, group_guid):
  126. """Adds current user to group of given guid. Returns true on success."""
  127. if self.user != None and self.user.valid_user_info() and group_guid != None:
  128. group_users = self.users_of_group(group_guid)
  129. if len(group_users):
  130. new_users_guids = self.client.factory.create(
  131. '{http://kilgray.com/memoqservices/2007}userGuids')
  132. new_users_guids.guid = [
  133. user.info.UserGuid for user in group_users]
  134. new_users_guids.guid.append(self.user.info.UserGuid)
  135. if len(new_users_guids):
  136. try:
  137. self.client.service.SetUsersOfGroup(
  138. group_guid, new_users_guids)
  139. return True
  140. except:
  141. return False
  142. return False
  143. def remove_current_user_from_group(self, group_guid):
  144. """Removes current user from group of given guid. Returns true on success."""
  145. if self.user != None and self.user.valid_user_info() and group_guid != None:
  146. group_users = self.users_of_group(group_guid)
  147. if len(group_users) and len([x for x in group_users if x.info.UserGuid == self.user.info.UserGuid]):
  148. new_users_guids = self.client.factory.create(
  149. '{http://kilgray.com/memoqservices/2007}userGuids')
  150. new_users_guids.guid = [
  151. user.info.UserGuid for user in group_users if user.info.UserGuid != self.user.info.UserGuid]
  152. if len(new_users_guids):
  153. try:
  154. self.client.service.SetUsersOfGroup(
  155. group_guid, new_users_guids)
  156. return True
  157. except:
  158. return False
  159. return False