106 lines
3.3 KiB
Python
106 lines
3.3 KiB
Python
"""
|
|
@file agent.py
|
|
@date 2008-09-16
|
|
Contributors can be viewed at:
|
|
http://svn.secondlife.com/svn/linden/projects/2008/pyogp/CONTRIBUTORS.txt
|
|
|
|
$LicenseInfo:firstyear=2008&license=apachev2$
|
|
|
|
Copyright 2008, Linden Research, Inc.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License").
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
or in
|
|
http://svn.secondlife.com/svn/linden/projects/2008/pyogp/LICENSE.txt
|
|
|
|
$/LicenseInfo$
|
|
"""
|
|
import re
|
|
from logging import getLogger, CRITICAL, ERROR, WARNING, INFO, DEBUG
|
|
|
|
from credentials import PlainPasswordCredential
|
|
from legacy_login import LegacyLogin
|
|
from regiondomain import Region
|
|
|
|
logger = getLogger('pyogp.lib.base.agent')
|
|
log = logger.log
|
|
|
|
class Agent(object):
|
|
""" an OGP agent """
|
|
|
|
def __init__(self):
|
|
""" initialize this agent """
|
|
|
|
self.login_uri = None
|
|
self.region_uri = None # this should move out, supports login
|
|
self.regionname = None # this should move out, supports login
|
|
|
|
self.firstname = None
|
|
self.lastname = None
|
|
self.password = None
|
|
self.credentials = None
|
|
|
|
#these maybe don't belong here
|
|
self.agentdomain = None
|
|
self.regions = [] # all known regions
|
|
self.region = None # the host simulation for the agent
|
|
|
|
log(DEBUG, 'initializing agent: %s' %self)
|
|
|
|
def setCredentials(self, firstname, lastname, password):
|
|
""" establish the agent's identifying attributes """
|
|
|
|
# todo: accomodate md5password
|
|
self.firstname = firstname
|
|
self.lastname = lastname
|
|
self.password = password
|
|
|
|
self.credentials = PlainPasswordCredential(self.firstname, self.lastname, self.password)
|
|
|
|
def login(self, login_uri, region_uri=None, firstname=None, lastname=None, password=None, restclient=None, regionname=None):
|
|
""" login to a login endpoint. this should move to a login class in time """
|
|
|
|
if (firstname != None):
|
|
self.firstname = firstname
|
|
|
|
if (lastname != None):
|
|
self.lastname = lastname
|
|
|
|
if (password != None):
|
|
self.password = password
|
|
|
|
if (regionname != None):
|
|
self.regionname = regionname
|
|
|
|
if (self.credentials == None):
|
|
self.setCredentials(self.firstname, self.lastname, self.password)
|
|
|
|
#todo: accomodate both legacy login and OGP login, for now OGP only
|
|
if (re.search('auth.cgi$', login_uri)):
|
|
|
|
log(INFO, "Login context is OGP")
|
|
|
|
from agentdomain import AgentDomain
|
|
|
|
self.agentdomain = AgentDomain(login_uri, restclient)
|
|
self.agentdomain.login(self.credentials)
|
|
|
|
self.region = Region(region_uri)
|
|
self.region.details = self.agentdomain.place_avatar(self.region.region_uri)
|
|
self.region.set_seed_cap_url(self.region.details['region_seed_capability'])
|
|
else:
|
|
self.thingy = LegacyLogin(login_uri)
|
|
|
|
login_params = PlainPasswordCredential(self.firstname, self.lastname, self.password).get_xmlrpc_login_params()
|
|
if (self.regionname != None):
|
|
login_params['start'] = self.regionname
|
|
else:
|
|
login_params['start'] = "last"
|
|
|
|
self.region = Region(regionname = self.region)
|
|
self.region.details = self.thingy.login(login_params, self.region)
|
|
|
|
|