]>
git.ipfire.org Git - ipfire.org.git/blob - www/webapp/db.py
9 class HashDatabase(object):
11 self
.conn
= sqlite3
.connect("/srv/www/ipfire.org/source/hashes.db")
12 self
.conn
.isolation_level
= None # autocommit mode
20 c
= self
.conn
.cursor()
21 c
.execute("CREATE TABLE IF NOT EXISTS hashes(file, sha1)")
24 def _save_hash(self
, path
, hash):
25 c
= self
.conn
.cursor()
26 c
.execute("INSERT INTO hashes VALUES('%s', '%s')" % (os
.path
.basename(path
), hash))
29 def get_hash(self
, path
):
30 c
= self
.conn
.cursor()
31 c
.execute("SELECT sha1 FROM hashes WHERE file = '%s'" % os
.path
.basename(path
))
37 hash = self
._calc
_hash
(path
)
38 self
._save
_hash
(path
, hash)
43 def _calc_hash(self
, path
):
44 if not os
.path
.exists(path
):
55 class UserDatabase(object):
56 HOST
= "ldap://ldap.ipfire.org"
57 BASEDN
= "ou=People,dc=mcfly,dc=local"
60 self
.conn
= ldap
.initialize(self
.HOST
)
61 self
.conn
.simple_bind()
66 def _find_dn_by_name(self
, name
):
67 results
= self
._search
(filterstr
="(uid=%s)" % name
)
68 assert len(results
) == 1
71 def _search(self
, filterstr
="(objectClass=*)", attrlist
=None):
72 return self
.conn
.search_st(self
.BASEDN
, ldap
.SCOPE_SUBTREE
,
73 filterstr
=filterstr
, attrlist
=attrlist
)
75 def check_password(self
, name
, password
):
76 dn
= self
._find
_dn
_by
_name
(name
)
77 conn
= ldap
.initialize(self
.HOST
)
79 conn
.simple_bind_s(dn
, password
)
81 except ldap
.INVALID_CREDENTIALS
:
86 def get_user_by_id(self
, id):
87 results
= self
._search
(filterstr
="(uidNumber=%s)" % id)
88 assert len(results
) == 1
89 return User(results
[0][1])
91 def get_user_by_name(self
, name
):
92 results
= self
._search
(filterstr
="(uid=%s)" % name
)
93 assert len(results
) == 1
94 return User(results
[0][1])
100 for dn
, attr
in self
._search
():
101 if dn
== self
.BASEDN
or not attr
:
103 ret
.append(User(attr
))
109 def __init__(self
, obj
):
112 def __cmp__(self
, other
):
113 return cmp(self
.realname
, other
.realname
)
116 return "<%s '%s'>" % (self
.__class
__.__name
__, self
.name
)
120 return self
.obj
["uid"][0]
124 return int(self
.obj
["uidNumber"][0])
128 #return self.obj["mail"]
129 return "%s@ipfire.org" % self
.name
133 return self
.obj
["cn"][0]
136 class Databases(object):
137 def __init__(self
, application
):
138 self
.application
= application
140 self
.hashes
= HashDatabase()
141 self
.planet
= PlanetDatabase()
142 self
.users
= UserDatabase()