Cambio masivo de contraseñas

cancel
Showing results for 
Search instead for 
Did you mean: 
kazu2ya
Member II

Cambio masivo de contraseñas

Buenos días a todos y todas otra vez.
Aqui en mi afan por pegarme con Alfresco, me ha surgido otro problemilla que espero que con vuestra ayuda pueda superar.

La cuestión es que quiero que a principio de cada mes se le cambie la contraseña a todos los usuarios de Alfresco y les envie un correo diciendoles la nueva, exceptuando el guest y el administrador. Ahora tengo hecho una tarea que cada principio de mes me envia un correo al administrador. La cuestion es que necesitaria listar a todos los usuarios para poder cambiarle la contraseña y a su vez enviarles el correo.

¿Alguien podría decirme el camino a seguir?

Muchas gracias de antemano
4 Replies
kazu2ya
Member II

Re: Cambio masivo de contraseñas

Buenas otra vez, he estado indagando en el tema de intentar conseguir una lista de los usuarios de Alfresco.
He avanzado un poco consiguiendo pasarle el PersonService a la clase, pero ahora de ahi no se como conseguir los usuarios, he conseguido listar unos NodeRef, pero no se que hacer con ellos. ¿Alguien me podría decir por donde tirar?
Os pongo el codigo que tengo para que saque una lista de tantos NodeRef como usuarios hay:
Set<NodeRef> node = personService.getAllPeople();
            Iterator<NodeRef> users = node.iterator();
            while(users.hasNext()){
              NodeRef usu = users.next();
              System.out.println(usu.toString());
              System.out.println("El id: "+usu.getId());
              System.out.println("El StoreRef: "+usu.getStoreRef());
            }
kazu2ya
Member II

Re: Cambio masivo de contraseñas

Buenas, veo que nadie me puede ayudar por el momento, yo de todas formas, como me sigo pegando con ello, os voy a ir poniendo mis avances (o retrocesos) en el tema para a ver si alguien me ayuda a continuar o si a alguien le sirve.

Ahora me he quedado con que desde el xml le paso el PersonService y el NodeService con lo cual a la hora de conseguir los datos de un usuario se quedaría con el siguiente código:
Set<NodeRef> people = personService.getAllPeople();
          Iterator<NodeRef> users = people.iterator();
          while(users.hasNext()){
             NodeRef usu = users.next();
             System.out.println(usu);
             System.out.println(nodeService.exists(usu));
             System.out.println(nodeService.getType(usu));
             System.out.println(nodeService.getProperty(usu,ContentModel.PROP_NAME));
             System.out.println(nodeService.getProperty(usu,ContentModel.PROP_USERNAME));
          }

Pero ahora el problema lo tengo  en que usu si que me devuelve datos, pero al ejecutar el nodeService me da un error de null pointer ¿Alguna idea?
Muchas gracias
kazu2ya
Member II

Re: Cambio masivo de contraseñas

Bueno yo sigo con mis avances a ver si va saliendo poco a poco.

Vamos a ver los cambios con respecto al anterior son principalmente que desde el xml que me creé le paso nuevos parametros:
<bean id="MiJob" class="org.springframework.scheduling.quartz.JobDetailBean">
      <property name="jobClass" value="org.alfresco.web.quarz.quarzjob"/>
      <property name="jobDataAsMap">
         <map>
            <entry key="actionService" value-ref="actionService"/>
            <entry key="personService" value-ref="personService"/>
            <entry key="nodeService" value-ref="nodeService" />
            <entry key="transactionService" value-ref="transactionService"/>
            <entry key="authenticationComponent" value-ref="authenticationComponent"/>
            <entry key="authenticationService" value-ref="authenticationService" />
         </map>
      </property>
   </bean>

Y en la clase quarzjob tengo el siguiente código:
Set<NodeRef> people = personService.getAllPeople();
         Iterator<NodeRef> users = people.iterator();
         while (users.hasNext()) {
            NodeRef usu = users.next();
            String username = nodeService.getProperty(usu, ContentModel.PROP_USERNAME).toString();
            String correo = nodeService.getProperty(usu, ContentModel.PROP_EMAIL).toString();
            String pass = "nuevo";
            char[] cadenapass = new char[pass.length()];
            for (int i=0; i<pass.length(); i++){
               cadenapass[i] = pass.charAt(i);
            }
            String password = new String(cadenapass);
            if (authenticationService.authenticationExists(username)){
               authenticationService.setAuthentication(username, cadenapass);
               System.out.println("Cambio de contraseña de "+username+":"+password+
                     " y envio de correo a "+correo);
            }
            else
               System.out.println("El usuario "+ username + " no existe");
         }

La cuestión de ahora es que el "authenticationService.setAuthentication(username, cadenapass);" no me hace nada, ni error ni cambio de contraseña y no entiendo porque. ¿Alguna sugerencia?

Un saludo a todos y todas
kazu2ya
Member II

Re: Cambio masivo de contraseñas

Bueno pues al final y despues de duro trabajo lo conseguí. Y para ver si a alguien le sirve le pongo aquí la solución.

Respecto al post anterior lo que me faltaba era el commit de la transacción, con lo cual el código se queda así:
try{
            Set<NodeRef> people = personService.getAllPeople();
            Iterator<NodeRef> users = people.iterator();
            while (users.hasNext()) {
               NodeRef usu = users.next();
               String username = nodeService.getProperty(usu, ContentModel.PROP_USERNAME).toString();
               String correo = nodeService.getProperty(usu, ContentModel.PROP_EMAIL).toString();
               String pass = this.generatePass(); //Generador automatico de passwords
               if (authenticationService.authenticationExists(username)){
                  UserTransaction transaction = transactionService.getNonPropagatingUserTransaction();
                   transaction.begin();
                  authenticationService.setAuthentication(username, pass.toCharArray());
                  transaction.commit();
               }
               else
                  System.out.println("El usuario "+ username + " no existe");
            }
         }catch(Exception e){
            System.out.println(e.getMessage());
         }

Bueno pues este tema se puede dar por zanjado. Un saludo a todos