123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- from suds.client import Client
- import hashlib
- import json
- class Group(object):
- """Wrapper for group."""
- def __init__(self, group_info=None):
- self.info = group_info
- def __repr__(self):
- if self.info != None:
- return "{} - {}".format(self.info.GroupName, self.info.GroupGuid)
- else:
- return "No group!"
- class User(object):
- """Wrapper for user."""
- def __init__(self, user_info=None):
- self.info = user_info
- def valid_user_info(self):
- """ Returns true if given user_info has all required attributes."""
- required_attributes = ["EmailAddress", "FullName",
- "Password", "UserName", "PackageWorkflowType", "UserGuid"]
- for attribute in required_attributes:
- if not hasattr(self.info, attribute):
- return False
- return True
- def __repr__(self):
- if self.info != None:
- return "{} - {}".format(self.info.FullName, self.info.UserGuid)
- else:
- return "No user!"
- class MemoQSecurity(object):
- """Client for memoQ Security API."""
- def __init__(self):
- with open("config.json") as json_file:
- self.config = json.load(json_file)
- if self.config["api_base_url"] != "":
- api_url = self.config["api_base_url"] + \
- "/memoqservices/security?wsdl"
- self.client = Client(api_url)
- self.user = User()
- self.users = []
- self.groups = None
- self.subvendors = None
- def __repr__(self):
- return "{}".format(self.user)
- def set_active_user(self, guid):
- """Sets user of given guid as active."""
- self.user = User(self.client.service.GetUser(guid))
- def get_users(self):
- """Gets list of users from the server into users field."""
- self.users = [User(x) for x in self.client.service.ListUsers()[0]]
- def user_by_name(self, username):
- """ Returns list of users of given fullname (can be partial) from users field."""
- if not len(self.users):
- self.get_users()
- return [x for x in self.users if username in x.info.FullName]
- def not_empty_user_info(self):
- """Validates user info of active user. Returns true on success."""
- if self.user.valid_user_info():
- if self.user.info.EmailAddress != None \
- and self.user.info.FullName != None \
- and self.user.info.Password != None \
- and self.user.info.UserName != None \
- and self.user.info.PackageWorkflowType != None:
- return True
- return False
- def set_password(self, password):
- """Hashes and sets password for active user."""
- if self.user.info != None and password != "":
- salt = 'fgad s d f sgds g sdg gfdg'
- to_hash = (password + salt).encode('utf-8')
- self.user.info.Password = str(
- hashlib.sha1(to_hash).hexdigest()).upper()
- def new_user(self):
- """ Sets empty user info as active user (package workflow = online).
- For further user creation."""
- self.user = User(self.client.factory.create(
- '{http://kilgray.com/memoqservices/2007}UserInfo'))
- package_workflow = self.client.factory.create(
- '{http://schemas.datacontract.org/2004/07/MemoQServices}UserPackageWorkflowType')
- self.user.info.PackageWorkflowType.value = package_workflow.Online
- def create_user(self):
- """ Creates new user on server from active user. Returns guid."""
- if self.not_empty_user_info():
- guid = self.client.service.CreateUser(self.user.info)
- if guid != None:
- self.set_active_user(guid)
- return guid
- def update_user(self):
- """ Updates user info on server. Returns true on success."""
- if self.not_empty_user_info():
- self.client.service.UpdateUser(self.user.info)
- return True
- return False
- def delete_user(self):
- """ Deletes active user. Dangerous! Returns true on success."""
- if self.user != None and self.user.valid_user_info() and self.user.info.UserGuid != None:
- self.client.service.DeleteUser(self.user.info.UserGuid)
- return True
- return False
- def get_groups(self):
- """ Gets list of groups from the server into groups field."""
- self.groups = [Group(x) for x in self.client.service.ListGroups()[0]]
- def group_by_name(self, groupname):
- """ Returns list of groups of given group name (can be partial) from groups field."""
- if self.groups == None:
- self.get_groups()
- return [x for x in self.groups if groupname in x.info.GroupName]
- def get_subvendors(self):
- """ Gets list of subvendor groups from the server into subvendors field."""
- self.subvendors = [
- Group(x) for x in self.client.service.ListSubvendorGroups()[0]]
- def subvendor_by_name(self, groupname):
- """ Returns list of subvendor groups of given group name (can be partial) from subvendors field."""
- if self.subvendors == None:
- self.get_subvendors()
- return [x for x in self.subvendors if groupname in x.info.GroupName]
- def users_of_group(self, guid):
- """Returns list of users of group of given guid."""
- if guid == None:
- return []
- try:
- users = [User(x)
- for x in self.client.service.ListUsersOfGroup(guid)[0]]
- return users
- except:
- return []
- def add_current_user_to_group(self, group_guid):
- """Adds current user to group of given guid. Returns true on success."""
- if self.user != None and self.user.valid_user_info() and group_guid != None:
- group_users = self.users_of_group(group_guid)
- if len(group_users):
- new_users_guids = self.client.factory.create(
- '{http://kilgray.com/memoqservices/2007}userGuids')
- new_users_guids.guid = [
- user.info.UserGuid for user in group_users]
- new_users_guids.guid.append(self.user.info.UserGuid)
- if len(new_users_guids):
- try:
- self.client.service.SetUsersOfGroup(
- group_guid, new_users_guids)
- return True
- except:
- return False
- return False
- def remove_current_user_from_group(self, group_guid):
- """Removes current user from group of given guid. Returns true on success."""
- if self.user != None and self.user.valid_user_info() and group_guid != None:
- group_users = self.users_of_group(group_guid)
- if len(group_users) and len([x for x in group_users if x.info.UserGuid == self.user.info.UserGuid]):
- new_users_guids = self.client.factory.create(
- '{http://kilgray.com/memoqservices/2007}userGuids')
- new_users_guids.guid = [
- user.info.UserGuid for user in group_users if user.info.UserGuid != self.user.info.UserGuid]
- if len(new_users_guids):
- try:
- self.client.service.SetUsersOfGroup(
- group_guid, new_users_guids)
- return True
- except:
- return False
- return False
|