56
58
from nova.common import memorycache as memcache
57
59
self.mc = memcache.Client(FLAGS.memcached_servers,
61
self.compute_rpcapi = compute_rpcapi.ComputeAPI()
63
def _get_tokens_for_instance(self, instance_uuid):
64
tokens_str = self.mc.get(instance_uuid.encode('UTF-8'))
68
tokens = jsonutils.loads(tokens_str)
60
71
def authorize_console(self, context, token, console_type, host, port,
61
internal_access_path):
72
internal_access_path, instance_uuid=None):
62
74
token_dict = {'token': token,
75
'instance_uuid': instance_uuid,
63
76
'console_type': console_type,
67
80
'last_activity_at': time.time()}
68
81
data = jsonutils.dumps(token_dict)
69
82
self.mc.set(token.encode('UTF-8'), data, FLAGS.console_token_ttl)
83
if instance_uuid is not None:
84
tokens = self._get_tokens_for_instance(instance_uuid)
86
self.mc.set(instance_uuid.encode('UTF-8'),
87
jsonutils.dumps(tokens))
70
89
LOG.audit(_("Received Token: %(token)s, %(token_dict)s)"), locals())
91
def _validate_token(self, context, token):
92
instance_uuid = token['instance_uuid']
93
if instance_uuid is None:
95
instance = db.instance_get_by_uuid(context, instance_uuid)
96
return self.compute_rpcapi.validate_console_port(context,
99
token['console_type'])
72
101
def check_token(self, context, token):
73
102
token_str = self.mc.get(token.encode('UTF-8'))
74
103
token_valid = (token_str is not None)
75
104
LOG.audit(_("Checking Token: %(token)s, %(token_valid)s)"), locals())
77
return jsonutils.loads(token_str)
106
token = jsonutils.loads(token_str)
107
if self._validate_token(context, token):
110
def delete_tokens_for_instance(self, context, instance_uuid):
111
tokens = self._get_tokens_for_instance(instance_uuid)
113
self.mc.delete(token)
114
self.mc.delete(instance_uuid.encode('UTF-8'))