59
67
# FIXME: the IVLE server must check that an admin is doing this!
61
69
if 'uid' not in props or props['uid'] is None:
62
raise NotImplementedError, "No algorithm for creating uids yet!"
70
# For the time being, just choose a random unixid.
71
# This may result in duplicates, but the unixid is essentially
72
# a monitoring/logging convenience only. Oh, and dups could kill
74
props['uid'] = random.randrange(5000,10000)
75
# raise NotImplementedError, "No algorithm for creating uids yet!"
64
77
# props['uid'] = uid
101
def get_login(login, passwd, _realm, _login, _may_save):
102
"""Callback function used by pysvn for authentication.
104
log("Getting password for %s (realm %s)" % (login, _realm))
105
return (True, login, passwd, False)
88
107
def activate_user(props):
89
108
"""Create the on-disk stuff for the given user.
90
109
Sets the state of the user in the db from pending to enabled.
105
124
details = db.get_user(login)
107
# FIXME: make svn config/auth
111
common.makeuser.make_jail(login, details['unixid'])
126
# make svn config/auth
129
common.makeuser.make_svn_repo(login, throw_on_error=False)
130
log("Creating svn config")
131
common.makeuser.make_svn_config(login, throw_on_error=False)
132
log("Creating svn auth")
133
passwd = common.makeuser.make_svn_auth(login, throw_on_error=False)
134
log("passwd: %s" % passwd)
137
svn.callback_get_login = partial(get_login, login, passwd)
139
if conf.svn_addr[-1] != '/':
140
conf.svn_addr = conf.svn_addr + "/"
142
# FIXME: This should be a loop over enrolements.
143
# We're not going to fix this now because it requires
144
# a large amount of admin console work to manage subject
146
# Instead, we're just going to use a single offering with
147
# a "short" name of "info1".
148
log("Creating /info1")
150
svn.mkdir(conf.svn_addr + login + "/info1",
151
"Initial creation of work directory for Informatics 1")
152
except Exception, exc:
153
log("While mkdiring info1: %s" % str(exc))
155
log("Creating /submissions")
157
svn.mkdir(conf.svn_addr + login + "/submissions",
158
"Initial creation of submissions directory")
159
except Exception, exc:
160
log("While mkdiring submissions: %s" % str(exc))
162
log("Creating /stuff")
164
svn.mkdir(conf.svn_addr + login + "/stuff",
165
"Initial creation of directory for miscellania")
166
except Exception, exc:
167
log("While mkdiring stuff: %s" % str(exc))
171
common.makeuser.make_jail(login, details.unixid)
175
tcf_path = os.path.join(conf.jail_base, 'template/opt/ivle/lib/conf/conf.py')
176
cf_path = os.path.join(conf.jail_base, login, 'opt/ivle/lib/conf/conf.py')
179
cf = open(cf_path, "w")
180
cf.write(open(tcf_path, "r").read())
181
cf.write("# The login name for the owner of the jail\n")
182
cf.write("login = %s\n" % repr(login))
184
cf.write("# The subversion-only password for the owner of the jail\n")
185
cf.write("svn_pass = %s\n" % repr(passwd))
190
log("Checking out directories in the jail")
192
svn.checkout(conf.svn_addr + login + "/stuff",
193
common.studpath.url_to_local(login + "/stuff")[1])
194
except Exception, exc:
195
log("While mkdiring stuff: %s" % str(exc))
198
svn.checkout(conf.svn_addr + login + "/submissions",
199
common.studpath.url_to_local(login + "/submissions")[1])
200
except Exception, exc:
201
log("While mkdiring submissions: %s" % str(exc))
204
svn.checkout(conf.svn_addr + login + "/info1",
205
common.studpath.url_to_local(login + "/info1")[1])
206
except Exception, exc:
207
log("While mkdiring info1: %s" % str(exc))
210
# FIXME: should this be nicer?
211
os.system("chown -R %d:%d %s" \
212
% (details.unixid, details.unixid,
213
common.studpath.url_to_local(login)[1]))
113
217
db.update_user(login, state='enabled')
115
219
return {"response": "okay"}
221
except Exception, exc:
222
print >> sys.stderr, exc