95
def get_login(login, passwd, _realm, _login, _may_save):
96
"""Callback function used by pysvn for authentication.
98
# print >> sys.stderr, "Getting password for %s (realm %s)" % (login, _realm)
99
return (True, login, passwd, False)
88
101
def activate_user(props):
89
102
"""Create the on-disk stuff for the given user.
90
103
Sets the state of the user in the db from pending to enabled.
105
118
details = db.get_user(login)
107
# FIXME: make svn config/auth
111
common.makeuser.make_jail(login, details['unixid'])
120
# make svn config/auth
122
# print >> sys.stderr, "Creating repo"
123
common.makeuser.make_svn_repo(login, throw_on_error=False)
124
# print >> sys.stderr, "Creating svn config"
125
common.makeuser.make_svn_config(login, throw_on_error=False)
126
# print >> sys.stderr, "Creating svn auth"
127
passwd = common.makeuser.make_svn_auth(login, throw_on_error=False)
128
# print >> sys.stderr, "passwd: %s" % passwd
131
svn.callback_get_login = partial(get_login, login, passwd)
133
# FIXME: This should be a loop over enrolements.
134
# We're not going to fix this now because it requires
135
# a large amount of admin console work to manage subject
137
# Instead, we're just going to use a single offering with
138
# a "short" name of "info1".
139
# print >> sys.stderr, "Creating /info1"
141
svn.mkdir(conf.svn_addr + login + "/info1",
142
"Initial creation of work directory for Informatics 1")
143
except Exception, exc:
145
# print >> sys.stderr, "Creating /submissions"
147
svn.mkdir(conf.svn_addr + login + "/submissions",
148
"Initial creation of submissions directory")
149
except Exception, exc:
151
# print >> sys.stderr, "Creating /stuff"
153
svn.mkdir(conf.svn_addr + login + "/stuff",
154
"Initial creation of directory for miscellania")
155
except Exception, exc:
158
# print >> sys.stderr, "Creating jail"
159
common.makeuser.make_jail(login, details.unixid)
163
tcf_path = os.path.join(conf.jail_base, 'template/opt/ivle/lib/conf/conf.py')
164
cf_path = os.path.join(conf.jail_base, login, 'opt/ivle/lib/conf/conf.py')
167
cf = open(cf_path, "w")
168
cf.write(open(tcf_path, "r").read())
169
cf.write("# The login name for the owner of the jail\n")
170
cf.write("login = %s\n" % repr(login))
172
cf.write("# The subversion-only password for the owner of the jail\n")
173
cf.write("svn_pass = %s\n" % repr(passwd))
178
# print >> sys.stderr, "Checking out directories in the jail"
180
svn.checkout(conf.svn_addr + "/" + login + "/stuff",
181
common.studpath.url_to_local(login + "/stuff")[1])
182
except Exception, exc:
185
svn.checkout(conf.svn_addr + "/" + login + "/submissions",
186
common.studpath.url_to_local(login + "/submissions")[1])
187
except Exception, exc:
190
svn.checkout(conf.svn_addr + "/" + login + "/info1",
191
common.studpath.url_to_local(login + "/info1")[1])
192
except Exception, exc:
195
# FIXME: should this be nicer?
196
os.system("chown -R %d:%d %s" \
197
% (details.unixid, details.unixid,
198
common.studpath.url_to_local(login)[1]))
201
# print >> sys.stderr, "Enabling user"
113
202
db.update_user(login, state='enabled')
115
204
return {"response": "okay"}
206
except Exception, exc:
207
print >> sys.stderr, exc