27 from datetime
import datetime
29 from smtplib
import SMTPRecipientsRefused
32 from django.conf
import settings
33 from django.utils.http
import int_to_base36
35 from clm.models.cluster
import Cluster
36 from clm.models.user
import User
37 from clm.utils
import mail
38 from clm.utils.cm
import CM
39 from clm.utils.decorators
import guest_log
40 from clm.utils.exception
import CLMException
41 from clm.utils.tokens
import default_token_generator
as token_generator
42 from common.signature
import Signature
43 from common.states
import user_active_states, registration_states, \
61 user = User.objects.get(login=login)
62 except User.DoesNotExist:
63 raise CLMException(
'user_get')
65 if user.is_active == user_active_states[
'ok']:
67 user.last_login_date = datetime.now()
70 raise CLMException(
'user_edit')
74 if user.password == password:
91 auth_header = parameters[
'authorization']
92 space = auth_header.index(
' ')
93 auth_header = auth_header[space + 1:]
94 login_and_signature = auth_header.split(
':')
96 login = login_and_signature[0]
97 user_signature = login_and_signature[1]
99 user = User.objects.get(login=login)
100 except User.DoesNotExist, error:
102 raise CLMException(
'user_get')
104 raise CLMException(
'user_parameter')
106 if not Signature.checkSignature(user.password, user_signature, parameters):
107 raise CLMException(
'user_get')
129 def register(first, last, login, email, new_password, organization, wi_data):
135 default_cluster_id = Cluster.objects.filter(state=cluster_states[
'ok'])[0].id
137 default_cluster_id =
None
139 user.default_cluster_id = default_cluster_id
142 user.password = new_password
143 user.organization = organization
144 user.act_key =
''.join(random.choice(string.ascii_uppercase + string.digits)
for n
in range(40))
145 user.is_active = user_active_states[
'inactive']
150 raise CLMException(
'user_register')
153 if settings.MAILER_ACTIVE:
156 mail.send_activation_email(user.act_key, user, wi_data)
157 except SMTPRecipientsRefused:
158 reg_state = registration_states[
'error']
159 reg_state = registration_states[
'mail_confirmation']
161 if settings.AUTOACTIVATION:
163 for cluster
in Cluster.objects.filter(state__exact=0):
165 resp = CM(cluster.id).send_request(
"guest/user/add/", new_user_id=user.id)
166 if resp[
'status'] !=
'ok':
167 raise CLMException(
'cm_get')
169 user.is_active = user_active_states[
'ok']
170 user.activation_date = datetime.now()
173 reg_state = registration_states[
'completed']
175 user.is_active = user_active_states[
'email_confirmed']
177 reg_state = registration_states[
'admin_confirmation']
182 raise CLMException(
'user_activate')
184 return {
'user': user.dict,
'registration_state': reg_state}
199 return User.objects.filter(login=login).exists()
213 def email_exists(email):
214 return User.objects.filter(email__exact=email).exists()
232 user = User.objects.get(act_key=act_key)
234 raise CLMException(
'user_get')
235 user.is_active = user_active_states[
'email_confirmed']
236 reg_state = registration_states[
'admin_confirmation']
237 if settings.AUTOACTIVATION:
239 for cluster
in Cluster.objects.filter(state__exact=0):
241 resp = CM(cluster.id).send_request(
"guest/user/add/", new_user_id=user.id)
242 if resp[
'status'] !=
'ok':
243 raise CLMException(
'cm_get')
245 user.is_active = user_active_states[
'ok']
246 reg_state = registration_states[
'completed']
248 user.activation_date = datetime.now()
253 raise CLMException(
'user_activate')
255 if settings.MAILER_ACTIVE
and reg_state == registration_states[
'admin_confirmation']:
257 mail.send_admin_registration_notification(user, wi_data)
258 except SMTPRecipientsRefused:
261 return {
'user': user.dict,
'registration_state': reg_state}
274 def is_mailer_active():
275 return {
'mailer_active': settings.MAILER_ACTIVE,
'contact_email': settings.CONTACT_EMAIL}
289 def reset_password_mail(email, wi_data):
290 if settings.MAILER_ACTIVE:
291 user = User.objects.get(email=email)
292 token = token_generator.make_token(user)
294 mail.send_reset_password_mail(user, token, wi_data)
296 except SMTPRecipientsRefused:
297 raise CLMException(
'reset_password_smtp_error')
298 raise CLMException(
'reset_password_error')
312 def check_token(user_id, token):
314 user = User.objects.get(id=user_id)
316 raise CLMException(
'user_get')
318 if token_generator.check_token(user, int_to_base36(user_id) +
u'-' + token):
320 raise CLMException(
'user_bad_token')
335 def set_password_token(user_id, token, new_password):
337 user = User.objects.get(id=user_id)
339 raise CLMException(
'user_get')
341 if token_generator.check_token(user, int_to_base36(user_id) +
u'-' + token):
342 user.password = new_password
346 raise CLMException(
'user_set_password')
348 raise CLMException(
'user_bad_token')