Commit aab45409ffa88ad13485a3adcb8e175c969e8be5
Committed by
Georg Hopp
1 parent
d7a3f878
add first basic code to create new database entries
Showing
4 changed files
with
71 additions
and
24 deletions
... | ... | @@ -7,10 +7,18 @@ class SystemData |
7 | 7 | end |
8 | 8 | |
9 | 9 | def save |
10 | + kind = self.class.to_s.to_sym | |
11 | + | |
10 | 12 | if @id |
11 | - @backend.update(self) | |
13 | + @backend.update(kind, to_h) | |
12 | 14 | else |
13 | - @backend.insert(self) | |
15 | + @backend.insert(kind, to_h) | |
14 | 16 | end |
15 | 17 | end |
18 | + | |
19 | + def to_h | |
20 | + Hash[instance_variables.map do |var| | |
21 | + [var[1...var.size].to_sym, eval(var)] if var != '@backend' | |
22 | + end] | |
23 | + end | |
16 | 24 | end | ... | ... |
... | ... | @@ -12,23 +12,23 @@ class SystemDataBackend |
12 | 12 | end |
13 | 13 | |
14 | 14 | def users |
15 | - load(:user) | |
15 | + load(:User) | |
16 | 16 | end |
17 | 17 | |
18 | 18 | def groups |
19 | - load(:group) | |
19 | + load(:Group) | |
20 | 20 | end |
21 | 21 | |
22 | 22 | def sites |
23 | - load(:site) | |
23 | + load(:Site) | |
24 | 24 | end |
25 | 25 | |
26 | 26 | def mailAliases |
27 | - load(:mailAlias) | |
27 | + load(:MailAlias) | |
28 | 28 | end |
29 | 29 | |
30 | 30 | def mailAccounts |
31 | - load(:mailAccount) | |
31 | + load(:MailAccount) | |
32 | 32 | end |
33 | 33 | |
34 | 34 | def userByName(name) |
... | ... | @@ -70,13 +70,11 @@ class SystemDataBackend |
70 | 70 | end |
71 | 71 | |
72 | 72 | def load!(kind) |
73 | - @data[kind] = Array.new | |
74 | - class_str = kind.to_s | |
75 | - class_str[0] = class_str[0..0].capitalize | |
76 | - | |
73 | + @data[kind] = Array.new | |
77 | 74 | @backend.load(kind) do |data| |
75 | + data[:backend] = @backend | |
78 | 76 | @data[kind].push( |
79 | - eval(class_str + '.new(data)') | |
77 | + eval(kind.to_s + '.new(data)') | |
80 | 78 | ) |
81 | 79 | end |
82 | 80 | end | ... | ... |
... | ... | @@ -21,20 +21,35 @@ class SystemDataBackendLdap |
21 | 21 | LDAP_SITE_MAP = {:o => :name} |
22 | 22 | |
23 | 23 | LDAP_MAP = { |
24 | - :user => LDAP_USER_MAP, | |
25 | - :group => LDAP_GROUP_MAP, | |
26 | - :site => LDAP_SITE_MAP | |
24 | + :User => LDAP_USER_MAP, | |
25 | + :Group => LDAP_GROUP_MAP, | |
26 | + :Site => LDAP_SITE_MAP | |
27 | 27 | } |
28 | 28 | |
29 | 29 | LDAP_FILTER = { |
30 | - :user => Net::LDAP::Filter::eq('objectClass', 'posixAccount'), | |
31 | - :group => Net::LDAP::Filter::eq('objectClass', 'posixGroup'), | |
32 | - :site => Net::LDAP::Filter::eq('objectClass', 'organization') & | |
30 | + :User => Net::LDAP::Filter::eq('objectClass', 'posixAccount'), | |
31 | + :Group => Net::LDAP::Filter::eq('objectClass', 'posixGroup'), | |
32 | + :Site => Net::LDAP::Filter::eq('objectClass', 'organization') & | |
33 | 33 | (~Net::LDAP::Filter::eq('o', 'hosting')), |
34 | - :mailAlias => Net::LDAP::Filter::eq('objectClass', 'mailAlias'), | |
35 | - :mailAccount => Net::LDAP::Filter::eq('objectClass', 'mailAccount') | |
34 | + :MailAlias => Net::LDAP::Filter::eq('objectClass', 'mailAlias'), | |
35 | + :MailAccount => Net::LDAP::Filter::eq('objectClass', 'mailAccount') | |
36 | 36 | } |
37 | 37 | |
38 | + LDAP_OBJECTCLASS = { | |
39 | + :User => [ 'account', 'posixAccount', 'shadowAccount' ], | |
40 | + :Group => 'posixGroup' | |
41 | + } | |
42 | + | |
43 | + LDAP_LAMBDA_USER = lambda do |entry| | |
44 | + entry[:cn] = entry[:uid] | |
45 | + entry[:shadowlastchange] = (Time::now.to_i/60/60/24).to_s | |
46 | + entry[:shadowmax] = '99999' | |
47 | + entry[:shadowwarning] = '7' | |
48 | + end | |
49 | + | |
50 | + LDAP_LAMBDA = { | |
51 | + :User => LDAP_LAMBDA_USER | |
52 | + } | |
38 | 53 | |
39 | 54 | def initialize(host, port, baseDn, args={}) |
40 | 55 | @baseDn = baseDn |
... | ... | @@ -62,8 +77,7 @@ class SystemDataBackendLdap |
62 | 77 | map = { :dn => :id } |
63 | 78 | map.merge!(LDAP_MAP[kind]) if LDAP_MAP[kind] |
64 | 79 | |
65 | - ydata = { :backend => self } | |
66 | - | |
80 | + ydata = {} | |
67 | 81 | data.each do |key,value| |
68 | 82 | ydata.merge!({ map[key] || key => value.size==1?value[0]:value.to_a }) |
69 | 83 | end |
... | ... | @@ -72,12 +86,32 @@ class SystemDataBackendLdap |
72 | 86 | end |
73 | 87 | end |
74 | 88 | |
89 | + def update(kind, data) | |
90 | + map = {} | |
91 | + map.merge!(LDAP_MAP[kind].invert) if LDAP_MAP[kind] | |
92 | + | |
93 | + entry = Net::LDAP::Entry.new(data[:id]) | |
94 | + data.delete(:id) | |
95 | + | |
96 | + entry[:changetype] = 'add' | |
97 | + entry[:objectclass] = LDAP_OBJECTCLASS[kind] | |
98 | + | |
99 | + data.each do |key,value| | |
100 | + key = map[key] if map[key] | |
101 | + entry[key] = value | |
102 | + end | |
103 | + | |
104 | + LDAP_LAMBDA[kind].call(entry) if LDAP_LAMBDA[kind] | |
105 | + | |
106 | + puts entry.to_ldif | |
107 | + end | |
108 | + | |
75 | 109 | private |
76 | 110 | |
77 | 111 | def ldapBase(kind) |
78 | 112 | case(kind) |
79 | - when :user, :group: @systemDn | |
80 | - when :site, :mailAlias, :mailAccount: @hostingDn | |
113 | + when :User, :Group: @systemDn | |
114 | + when :Site, :MailAlias, :MailAccount: @hostingDn | |
81 | 115 | end |
82 | 116 | end |
83 | 117 | ... | ... |
Please
register
or
login
to post a comment