# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id: Auth.py,v 1.9 2006/12/15 18:35:38 mlhuang Exp $
+# $Id: Auth.py,v 1.12 2007/01/30 23:08:58 mlhuang Exp $
#
import crypt
from PLC.Nodes import Node, Nodes
from PLC.Sessions import Session, Sessions
from PLC.Peers import Peer, Peers
+from PLC.Boot import notify_owners
class Auth(Parameter):
"""
method.caller = peer = peers[0]
keys = [peer['key']]
else:
- persons = Persons(method.api, {'email': auth['name'], 'enabled': True})
+ persons = Persons(method.api, {'email': auth['name'], 'enabled': True, 'peer_id': None})
if not persons:
- raise PLCAuthenticationFailure, "No such peer or user '%s'" % auth['name']
+ raise PLCAuthenticationFailure, "No such user '%s'" % auth['name']
if not set(person['roles']).intersection(method.roles):
raise PLCAuthenticationFailure, "Not allowed to call method"
method.caller = person = persons[0]
- keys = Keys(method.api, {'key_id': person['key_ids'], 'key_type': "gpg"})
+ keys = Keys(method.api, {'key_id': person['key_ids'], 'key_type': "gpg", 'peer_id': None})
if not keys:
raise PLCAuthenticationFailure, "No GPG key on record for peer or user '%s'"
try:
if session['node_id'] is not None:
- nodes = Nodes(method.api, [session['node_id']])
+ nodes = Nodes(method.api, {'node_id': session['node_id'], 'peer_id': None})
if not nodes:
raise PLCAuthenticationFailure, "No such node"
node = nodes[0]
method.caller = node
elif session['person_id'] is not None and session['expires'] > time.time():
- persons = Persons(method.api, {'person_id': session['person_id'], 'enabled': True})
+ persons = Persons(method.api, {'person_id': session['person_id'], 'enabled': True, 'peer_id': None})
if not persons:
raise PLCAuthenticationFailure, "No such account"
person = persons[0]
assert auth.has_key('node_id')
try:
- nodes = Nodes(method.api, [auth['node_id']])
+ nodes = Nodes(method.api, {'node_id': auth['node_id'], 'peer_id': None})
if not nodes:
raise PLCAuthenticationFailure, "No such node"
node = nodes[0]
raise PLCAuthenticationFailure, "Cannot determine IP address of requestor"
if nodenetwork['ip'] != method.source[0]:
- raise PLCAuthenticationFailure, "Requestor IP %s does not mach node IP %s" % \
+ raise PLCAuthenticationFailure, "Requestor IP %s does not match node IP %s" % \
(method.source[0], nodenetwork['ip'])
else:
raise PLCAuthenticationFailure, "No node key or boot nonce"
method.caller = node
except PLCAuthenticationFailure, fault:
- # XXX Send e-mail
+ if nodes:
+ notify_owners(method, node, 'authfail', include_pis = True, include_techs = True, fault = fault)
raise fault
class AnonymousAuth(Auth):
assert auth.has_key('Username')
# Get record (must be enabled)
- persons = Persons(method.api, {'email': auth['Username'], 'enabled': True})
+ persons = Persons(method.api, {'email': auth['Username'], 'enabled': True, 'peer_id': None})
if len(persons) != 1:
raise PLCAuthenticationFailure, "No such account"