Tabla de Contenidos

Configuración

La configuración en SIMO sigue dos principios, que sea externalizable, es decir que no sea necesario desplegar para alterar la configuración y que sea legible. Ambas condiciones se logran mediante archivos de propiedades los cuales se describen a continuación.

application.properties

Es el archivo de configuración principal, por defecto su localización es en el directorio /datossimo/archivos aunque esta localización puede ser cambiada con variables de entorno tomcat. En este archivo se encuentran propiedades básicas para la operación del sistema, pero también se encuentran las referencias a otros archivos de configuración, de esta forma, los archivos de configuración complementarios pueden estar en el mismo directorio que application.properties, en otro directorio o incluso internos al war si asi se desea. El archivo incluye propiedades definidas por Spring Boot, pero también contiene propiedades específicas del sistema SIMO.Las principales propiedades son:

Configuración de Datasource y pool de conexiones

spring.datasource.username=usrsimo

spring.datasource.password=simo

spring.datasource.max-active= 200

spring.datasource.max-idle= 10

spring.datasource.min-idle= 10

Generación de código

#Controla si hibernate genera DDL (crea tablas y demás) a partir de las anotaciones JPA

spring.jpa.generate-ddl=false

Hibernate Search

#Directorio donde se almacenan indices si se tiene un directorio tipo FileSystem

spring.jpa.properties.hibernate.search.default.indexBase = /indexsimo/lucene

#Tipo de directorio

spring.jpa.properties.hibernate.search.default.directory_provider = infinispan

#Configuración infinispan si se usa este tipo de directorio

spring.jpa.properties.hibernate.search.infinispan.configuration_resourcename = file:/datossimo/archivos/infinispan.xml

Repositorios y archivos

sigeca.documents.fileStagePrefix=sigeca-${sigeca.cluster.name}-

sigeca.documents.fileStageSuffix=.tmp

sigeca.documents.repositoryPath=/datossimo/archivos/repository

sigeca.documents.reportDirectory=/datossimo/archivos/report

#Controla tamaños y tipos de archivo generales y excepciones

multipart.maxRequestSize=80MB

file.restriction.fileSize.default=10000000

file.restriction.mimeTypes.imagen=image/jpeg,image/png

file.restriction.mimeTypes.DAT=application/x-ns-proxy-autoconfig

file.restriction.fileSize.DAT=16388608

file.restriction.fileSize.acuerdo=16388608

Roles permitidos por servidor

simo.rol=CIUDADANO,CARGADOR,ADMINISTRADOR,ADMIN_CONVOCATORIA,ADMIN_ENTIDAD,ADMIN_ENTIDAD_EDUCATIVA,ANALISTA,SUPERVISOR,AUDITOR

Integración PENTAHO

pentaho.url=http://192.168.52.37:8181
# ruta para consultar el estado de los trabajos (esta compuesto de url+getStatus+jobName)
pentaho.getStatus=/kettle/jobStatus/?xml=y&name=
#ruta para iniciar la tarea (esta compuesto de url+startJob+jobName)
pentaho.startJob=/kettle/runJob?level=DebugLevel&xml=y&job=
pentaho.auth=Y2x1c3RlcjpjbHVzdGVy

#Mensajes de retorno estado
pentaho.finishedStatus=OK,Finished
pentaho.runnigStatus=Running
pentaho.errorStatus=Finished (with errors),Stopped,Stopped (with errors)

Agendador Quartz

quartz.enabled=true

Referencias a otros archivos de configuración

business-rules.properties=classpath:business-rules.properties
#business-rules.properties=file:/datossimo/archivos/business-rules.properties
notificaciones.properties=file:/datossimo/archivos/notificaciones.properties
messages.properties=file:/datossimo/archivos/messages.properties
pse.properties=file:/datossimo/archivos/pse.properties
cluster.properties=file:/datossimo/archivos/cluster.properties
ayuda.properties=file:/datossimo/archivos/ayuda.properties
jobs.properties=file:/datossimo/archivos/jobs.properties
antecedentes.properties=file:/datossimo/archivos/antecedentes.properties

business-rules.properties

Este archivo contiene todas las reglas de negocio que son aplicadas por recurso (Entidad JPA, DTO), el sistema evalua las reglas de negocio para un objeto que hereda de Model y produce un mapa de permisos para un objeto en particular y segùn el contexto de ejecución en el cual se está utilizando el objeto Por ejemplo, al serializar un objeto de tipo convocatoria, el sistema lo aumenta con un campo llamado access que tiene un mapa de los permisos que sobre esa convocatoria tiene el usuario autenticado en el contexto de ejecución (estado de la aplicación) en el cual se serializa el objeto, es decir, para un momento especìfico, las reglas de negocio indican si un usuario puede editar, crear, activar una convocatoria, etc. De esta forma, el sistema de permisos es áltamente configurable y flexible.

Las reglas de negocio son escritas usando Spring EL con ayuda del servicio RuleService, ej

br.co.gov.cnsc.sigeca.model.Convocatoria.view = #getAuthUser()!=null
br.co.gov.cnsc.sigeca.model.Convocatoria.edit = #userHasRole(#currentUser,'ADMINISTRADOR') || (#userHasRole(#currentUser,'ADMIN_CONVOCATORIA') && #conv.estaAsociado(#currentUser,#root))
br.co.gov.cnsc.sigeca.model.Convocatoria.create = #userHasRole(#currentUser,'ADMIN_CONVOCATORIA')|| #userHasRole(#currentUser,'ADMINISTRADOR')
br.co.gov.cnsc.sigeca.model.Convocatoria.delete = false
br.co.gov.cnsc.sigeca.model.Convocatoria.publicarOpec = estado==T(co.gov.cnsc.sigeca.model.EstadoConvocatoria).A || estado==T(co.gov.cnsc.sigeca.model.EstadoConvocatoria).S
#br.co.gov.cnsc.sigeca.model.Convocatoria.gestionarCargador = #userHasRole(#currentUser,'ADMINISTRADOR') || (#userHasRole(#currentUser,'ADMIN_ENTIDAD') && #currentUser.entidad.id == entidad.id)
br.co.gov.cnsc.sigeca.model.Convocatoria.gestionarCargador = #userHasRole(#currentUser,'ADMINISTRADOR') || (#userHasRole(#currentUser,'ADMIN_ENTIDAD') && #usuario.isUsuarioEntidad(entidad.id))
br.co.gov.cnsc.sigeca.model.Convocatoria.crearEmpleo = #userHasRole(#currentUser,'CARGADOR') && #etapa.activa('OPEC',#root.id)
En este archivo también se especifican las reglas de excepción, estas son similares a las reglas de negocio pero su propósito es ser utilizadas cuando se quieren crear excepciones a las reglas de negocio regulares, ejemplo, cuando se debe permitir una inscripción extemporánea a una convocatoria a un solo usuario por fallo de tutela, algunas reglas de excepción son:

ex.co.gov.cnsc.sigeca.dto.InscripcionDTO.inscribir = #currentUser!=null && !existeInscripcion && preInscripcion && pinInscripcion!=null && (#excepcion.validarExcepcion('exACRINSCRIBIR',1, idEmpleo, 'EMPLEO'))

ex.co.gov.cnsc.sigeca.dto.InscripcionDTO.pagarPSE = #currentUser!=null && !existeInscripcion && preInscripcion && pinInscripcion==null && (#excepcion.validarExcepcion('exACRPSE',1, idEmpleo, 'EMPLEO'))

ex.co.gov.cnsc.sigeca.model.InscripcionConvocatoria.inscribir = (#excepcion.validarExcepcion('exACRINSCRIBIR',1, empleo.id, 'EMPLEO')) && !#inscripcion.existeInscripcion(empleo.convocatoria,#currentUser) && pinInscripcion!=null && estado==T(co.gov.cnsc.sigeca.model.EstadoInscripcion).PI

ex.co.gov.cnsc.sigeca.model.InscripcionConvocatoria.pagarPSE = (#excepcion.validarExcepcion('exACRPSE',1, empleo.id, 'EMPLEO')) && estado==T(co.gov.cnsc.sigeca.model.EstadoInscripcion).PI && pinInscripcion==null && !#inscripcion.existeInscripcion(empleo.convocatoria,#currentUser)

notificaciones.properties

Contiene la configuración del sistema de envío de notificaciones y mensajes, tiene dos secciones principales, la primera es la configuración del servidor de correo y/o del servicio de envio masivo, así

EMAIL NOTIFICATION
spring.mail.host=localhost
spring.mail.port=1025
spring.mail.username=simo
spring.mail.password=cnsc2016*
spring.mail.default-encoding=UTF-8
spring.mail.properties.*= # properties to set on the JavaMail session
spring.mail.transport.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.socketFactory.port=25
spring.mail.properties.mail.smtp.starttls.enable=false
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback=true
La segunda son las plantillas de los correos prefijados:

############### MENSAJES PERSONALIZADAS ###################################
##TODO Cambiar namespace a properties y unificar con mensajes de notificaciones
#REGISTRO NUEVO CORREO
spring.properties.encoder=CNSC
spring.mail.properties.registro.setfrom=sigeca@cnsc.gov.co
spring.mail.properties.registro.setSubject=CNSC, Confirmar registro de usuario
spring.mail.properties.registro.setUrl=http://192.168.0.138:8080/index.html?codigoVerificacion=xxxx#confirmacionregistro
spring.mail.properties.registro.template=registro.vm
#OLVIDO DE CONTRASE\u00d1A
spring.mail.properties.olvido.setfrom=sigeca@cnsc.gov.co
spring.mail.properties.olvido.setSubject=CNSC2 Cambiar contrase\u00F1a
spring.mail.properties.olvido.setUrl=http://192.168.0.139:8080/index.html?codigoVerificacion=xxxx#cambiarcontrasena
spring.mail.properties.olvido.template=olvidocontrasena.vm
spring.mail.properties.olvido.template.multiples.usuarios=olvidocontrasenamultiplesusuarios.vm
#CAMBIAR DE CONTRASE\u00d1A
spring.mail.properties.cambio.setfrom=sigeca@cnsc.gov.co
spring.mail.properties.cambio.setSubject=CNSC2 Cambiar contrase\u00F1a
spring.mail.properties.cambio.setUrl=http://192.168.0.139:8080/index.html?codigoVerificacion=xxxx#cambiarcontrasena
spring.mail.properties.cambio.template=cambiarcontrasena.vm
#PREINSCRIPCION
spring.mail.properties.preinscripcion.setfrom=sigeca@cnsc.gov.co
spring.mail.properties.preinscripcion.setSubject=CNSC, Preinscripci\u00F3n a convocatoria.
spring.mail.properties.preinscripcion.template=preinscrito.vm
#NOTIFICAR
spring.mail.properties.notificar.setfrom=sigeca@cnsc.gov.co
spring.mail.properties.notificar.setSubject=Notificación CNSC
spring.mail.properties.notificar.setUrl=http://192.168.0.138:8080/
spring.mail.properties.notificar.template=notificacion.vm

messages.properties

Mensajes de error e informativos al usuario, ejemplo

sigeca.errorInesperado=Ocurrio un error inesperado, por favor comun\u00EDquese con la CNSC.
sigeca.acceso.noautorizado=No tiene permisos para esta opci\u00F3n, por favor ingrese al aplicativo con su usuario y contrase\u00F1a. O comun\u00EDquese con la CNSC.
sigeca.controladores.resultadobusqueda.error=No se encontraron resultados con los filtros aplicados.
sigeca.usuariocontrolador.cambiarcontrasena=Se cambio la contrase\u00F1a del usuario\:xxxx correctamente.
sigeca.usuariocontrolador.cambiarcontrasena.exception=Ocurrio un error inesperado cambiando la contrase\u00F1a, por favor comun\u00EDquese con la CNSC.
sigeca.usuariocontrolador.olvidocontrasena=Se envi\u00F3 un correo electr\u00F3nico con las instrucciones a seguir para recuperar su contrase\u00F1a.
sigeca.usuariocontrolador.olvidocontrasenaErrorUsuario=El usuario o correo no existe. Por favor valide sus datos o comun\u00EDquese con la CNSC.
sigeca.usuariocontrolador.registroexitoso=Usted recibir\u00E1 un correo electr\u00F3nico con la confirmaci\u00F3n del registro y los pasos a seguir para activar su usuario\:xx

cluster.properties

Contiene información específica del nodo, esta información es utilizada por subsistemas como Quartz, infinispan, y log, no debe ponerse en un recurso compartido, ejemplo

sigeca.cluster.name=julian1
sigeca.envio.correo.pendiente.habilitado=true
sigeca.envio.notificaciones.habilitado=true
sigeca.validar.pagospse.pendientes.habilitado=true

ayuda.properties

Contiene la información necesaria para desplegar los controles de ayuda contextual (wiki y videos), ejemplo

registro.wiki=http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#como_registrarse
formacion.wiki=http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#formacion
experiencialaboral.wiki=http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#experiencia
produccionintelectual.wiki=http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#produccion_intelectual
otrosdocumentos.wiki=http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#otros_documentos
ofertaEmpleo.wiki=http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#busqueda_empleo
datosbasicos.wiki=http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#datos_basicos
registro.video=http://www.youtube.com/embed/yyYvsEGNCik
datosbasicos.video=http://www.youtube.com/embed/YvNnKyC3VoY
formacion.video=http://www.youtube.com/embed/blJndAlX66o
experiencialaboral.video=http://www.youtube.com/embed/blJndAlX66o

jobs.properties

Contiene la configuración de los trabajos de ejecución fuera de máquina virtual, hasta el momento existen trabajos para ejecutar como procedimientos almacenados o como Pentaho, el prefijo de las propiedades (después de la palabra job) constituye el identificados del trabajo, ejemplo

#Trabajo de distribucion automatico
job.dist.servidor=julian1
job.dist.clase=co.gov.cnsc.sigeca.jobs.CallStoredProcedureJob
job.dist.descripcion=Distribución automática para una prueba
job.dist.recordable=true
job.dist.repetible=true
job.dist.startNow=true
job.dist.procedureName=public.distribucionautomatica
job.dist.inParameters=tipo
#job.dist.allowedRoles=ADMINISTRADOR,ADMIN_ENTIDAD_EDUCATIVA

antecedentes.properties

Contiene configuración de calificación automática de valoración de antecedentes