示例#1
0
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)
示例#2
0
    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)
示例#3
0
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))
示例#4
0
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()
示例#5
0
文件: wsgi.py 项目: UPCnet/maxclient
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
示例#6
0
文件: wsgi.py 项目: UPCnet/maxclient
    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 = ''
示例#7
0
 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
示例#8
0
 def maxclient(self):
     client = MaxClient(self.config.url, self.oauth_server)
     return client
示例#9
0
 def oauth_server(self):
     server_info = MaxClient(self.config.url).server_info
     return server_info['max.oauth_server']
示例#10
0
 def maxclient(self):
     client = MaxClient(self.max_server, self.oauth_server)
     return client