def updateMAXUserInfo(event): """This subscriber will trigger when a user change his/her profile data.""" # Bypass MAX update if user is admin if api.user.get_current().id == 'admin': return # Only execute if the event triggers on user profile data change if 'fullname' in event.data or 'twitter_username' in event.data: site = getSite() pm = getToolByName(site, "portal_membership") if pm.isAnonymousUser(): # the user has not logged in username = '' return else: username = api.user.get_current().id memberdata = pm.getMemberById(username) properties = dict(displayName=memberdata.getProperty('fullname', ''), twitterUsername=memberdata.getProperty('twitter_username', '') ) registry = queryUtility(IRegistry) settings = registry.forInterface(IMAXUISettings, check=False) oauth_token = memberdata.getProperty('oauth_token', '') maxclient = MaxClient(url=settings.max_server, oauth_server=settings.oauth_server) maxclient.setActor(username) maxclient.setToken(oauth_token) maxclient.people[username].put(**properties)
def oauth_server(self): if self.max_server: server_info = MaxClient(self.max_server).server_info else: return None return server_info.get('max.oauth_server', None)
def main(maxinf, username, password, client, origin_url, target_url): if maxinf not in ['MAXUPC', 'MAXEXTERNS']: return maxinf = globals()[maxinf] conn = get_connection(maxinf['servers'], cluster=maxinf['cluster_name']) db = get_database(conn, 'max_' + client, username=username, password=password, authdb='admin') # Find contexts with the origin_url origin_contexts = db.contexts.find({'url': {'$regex': origin_url}}, {'url': 1}) origin_contexts = [a['url'] for a in origin_contexts] print('Changing {} contexts:'.format(len(origin_contexts))) for url in origin_contexts: print('{} -> {}'.format(url, url.replace(origin_url, target_url))) really_want_it = query_yes_no('Are you sure to make this changes?') if really_want_it: maxclient = MaxClient(maxinf['maxserver'], oauth_server=maxinf['oauth_server'], debug=True) maxclient.login() for url in origin_contexts: maxclient.contexts[url].put(url=url.replace(origin_url, target_url))
def maxcli(): arguments = docopt(__maxcli__doc__, version='MAX Client terminal utility') domain = arguments.get('<domain>') maxserver = arguments.get('--maxserver') username = arguments.get('--username') password = arguments.get('--password') hubserver = arguments.get('--hubserver') oauthserver = arguments.get('--oauthserver') debug = arguments.get('--debug') if domain is not None: # Authenticate using domain client = MaxClient.from_hub_domain(domain, hub=hubserver, debug=debug) else: # or directlly use a maxserver client = MaxClient(maxserver, oauth_server=oauthserver, debug=debug) print print ' Connecting to {}'.format(client.url) print '-' * 60 print succesfull_login = False while not succesfull_login: try: client.login(username, password) except BadUsernameOrPasswordError as error: print "Bad username or password, try again" # After getting the username once, use it while the user is trying # non empty passwords. On an empty password, ask for the user again username = error.username if error.password else None else: succesfull_login = True print MOTD ipdb.set_trace()
class MaxClient(RestClient): """ WSGI spinoff based on the rest client, that instantiates a max app without opening any port or socket """ path = '' route = '' app = None def setToken(self, oauth2_token): """ Instantiates a fallback RestClient to use with fileserver dependant endpoints This has to be executed after the original setToken, to be sure that the oauth_server has been set or fetched from the maxserver info endpoint. """ super(MaxClient, self).setToken(oauth2_token) self.rest = RestClient(self.url, oauth_server=self.oauth_server) self.rest.actor = self.actor self.rest.token = self.token self.settings = self.rest.info.settings.get() self.settings['max.include_traceback_in_500_errors'] = True # Reset url after modification, to make requests trough the wsgi app self.url = '' @property def requester(self): if self.app is None: self.app = RequesterApp(main({}, **self.settings)) return self.app def do_request(self, route, method_name, uri, params): """ If request contains files to upload, delegate call to the fallback rest client """ if params.get('files', {}): return self.rest.do_request(route, method_name, self.rest.url + uri, params) method = getattr(self.requester, method_name) method_kwargs = { 'headers': params.get('headers', {}) } if method != 'delete': method_kwargs['params'] = params.get('data', '') return method(uri, **method_kwargs) def response_content(self, response): return response.text
def setToken(self, oauth2_token): """ Instantiates a fallback RestClient to use with fileserver dependant endpoints This has to be executed after the original setToken, to be sure that the oauth_server has been set or fetched from the maxserver info endpoint. """ super(MaxClient, self).setToken(oauth2_token) self.rest = RestClient(self.url, oauth_server=self.oauth_server) self.rest.actor = self.actor self.rest.token = self.token self.settings = self.rest.info.settings.get() self.settings['max.include_traceback_in_500_errors'] = True # Reset url after modification, to make requests trough the wsgi app self.url = ''
def get_client(self, instance_name, username='', password=''): instance_info = self.get_instance(instance_name) client = MaxClient(instance_info['server']['dns']) if username and password: client.login(username=username, password=password) return client
def maxclient(self): client = MaxClient(self.config.url, self.oauth_server) return client
def oauth_server(self): server_info = MaxClient(self.config.url).server_info return server_info['max.oauth_server']
def maxclient(self): client = MaxClient(self.max_server, self.oauth_server) return client