source: sipei/modules/genpass/genpass.module @ e7955cb

drupal-6.x
Last change on this file since e7955cb was ffa4103, checked in by Luis Peña <lpena@…>, 12 años ago

Cambiando el nombre de modulos a modules

  • Propiedad mode establecida a 100755
File size: 5.5 KB
Línea 
1<?php
2
3function _genpass_default_entropy() {
4  return 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789!#$%&()*+,-./:;<=>?@[]^_{|}~';
5}
6
7/**
8 * Generate a new password
9 * Based on the original D6 user_password function (with more characters)
10 *
11 * @return a fresh password according to the settings made in /admin/user/settings
12 *
13 * @see genpass_form_alter()
14 */
15function genpass_password() {
16  $pass = '';
17  $length = variable_get('genpass_length', 8);
18  $allowable_characters = variable_get('genpass_entropy', _genpass_default_entropy());
19
20  // Zero-based count of characters in the allowable list:
21  $len = strlen($allowable_characters) - 1;
22 
23  // Loop the number of times specified by $length.
24  for ($i = 0; $i < $length; $i++) {
25    // Each iteration, pick a random character from the
26    // allowable string and append it to the password:
27    $pass .= $allowable_characters[mt_rand(0, $len)];
28  }
29
30  return $pass;
31}
32
33
34/**
35 * helper function to find the password item in a form, since its position within
36 * the form-array depends on the profile module (account-category)
37 */
38function &genpass_get_pass_item(&$form){
39  if(isset($form['account']['pass'])) return $form['account']['pass'];
40  else return $form['pass'];
41}
42
43
44
45
46/**
47 * Take care of new form handling (admin and registration forms)
48 */
49function genpass_form_alter(&$form, $form_state, $form_id) {
50  switch($form_id) {
51 
52    case 'user_admin_settings':
53
54      $form['registration']['genpass_mode'] = array(
55        '#type' => 'radios',
56        '#title' => t('Password handling'),
57        '#default_value' => variable_get('genpass_mode', 0),
58        '#options' => array(
59          0 => t('Users must enter a password on registration (default Drupal behaviour).'),
60          1 => t('Users may enter a password on registration. If not, a random password will be generated.'),
61          2 => t('Users cannot choose a password on registration. It will be generated.')
62        ),
63        '#description' => t('Choose a password handling mode for new users. Note that for manual user creation by an administrator the second option always applies.')
64      );
65      $form['registration']['genpass_length'] = array(
66        '#type' => 'textfield',
67        '#title' => t('Generated password length'),
68        '#default_value' => variable_get('genpass_length', 8),
69        '#size' => 2,
70        '#maxlength' => 2,
71        '#description' => t('Set the length of generated passwords here. Allowed range: 5 to 32')
72      );
73      $form['registration']['genpass_entropy'] = array(
74        '#type' => 'textfield',
75        '#title' => t('Generated password entropy'),
76        '#default_value' => variable_get('genpass_entropy', _genpass_default_entropy()),
77        '#description' => t('Give a list of possible characters for a generated password. Note that the list must contain at least X different characters where X is defined by the length you have given above.')
78      );
79      $form['#validate'][] = 'genpass_user_admin_settings_validate';
80      $form['#submit'][] = 'genpass_user_admin_settings_submit';
81      break;
82     
83    case 'user_register':
84
85      $pass_item =& genpass_get_pass_item($form);
86      // alter the user-admin register (no mode decision)
87      if ($form['destination']['#value'] == 'admin/user/user/create' && user_access('administer users')) {
88        $pass_item['#required'] = FALSE;
89        $form['#validate'][] = 'genpass_user_admin_register_validate';
90      }
91      else { // alter the user-register form according to the mode
92        switch(variable_get('genpass_mode',0)){
93          case 2:
94            $pass_item['#type'] = 'hidden';
95          case 1:
96            $pass_item['#required'] = FALSE;
97            $form['#validate'][] = 'genpass_register_validate';
98        }
99      }
100
101      break;
102  }
103 
104}
105
106
107function genpass_user_admin_settings_validate($form, &$form_state) {
108  $length = $form_state['values']['genpass_length'];
109  if(!is_numeric($length) || $length < 5 || $length > 32){
110    form_set_error('genpass_length', t('The length of a generated password must be between 5 and 32')); return;
111  }
112  $entropy = $form_state['values']['genpass_entropy'];
113  $chars = array_unique(preg_split('//', $entropy, -1, PREG_SPLIT_NO_EMPTY));
114  if(count($chars) < $length){
115    form_set_error('genpass_entropy', t('The list of possible characters is not long or unique enough')); return;
116  }
117  return $form;
118}
119
120
121function genpass_user_admin_settings_submit($form, &$form_state) {
122  $mode = $form_state['values']['genpass_mode'];
123  if($mode >= 0 && $mode < 3) variable_set('genpass_mode', $mode);
124 
125  $length = $form_state['values']['genpass_length'];
126  if(is_numeric($length) && $length >= 5 && $length <= 32) variable_set('genpass_length', $length);
127 
128  $entropy = $form_state['values']['genpass_entropy'];
129  $chars = array_unique(preg_split('//', $entropy, -1, PREG_SPLIT_NO_EMPTY));
130  if(count($chars) >= $length) variable_set('genpass_entropy',$entropy);
131}
132
133
134
135function genpass_register_validate($form, &$form_state) {
136  if (empty($form_state['values']['pass']) && !form_get_errors() ) {
137    $pass = genpass_password();
138    $pass_item =& genpass_get_pass_item($form);
139    form_set_value($pass_item, $pass, $form_state);
140    drupal_set_message(t('Generated password'));
141  }
142  return $form;
143}
144
145
146function genpass_user_admin_register_validate($form, &$form_state) {
147  if (empty($form_state['values']['pass']) && !form_get_errors() ) {
148    $pass = genpass_password();
149    $pass_item =& genpass_get_pass_item($form);
150    form_set_value($pass_item, $pass, $form_state);
151    drupal_set_message(t('Generated password is ').$pass);
152  }
153  return $form;
154}
155
156
157
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.