====== 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 [[:simo:documentos:tecnicos:filesystem|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|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=[[:simo:documentos:tecnicos:debuglevel|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 err**ors)** **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 **[[:simo:documentos:tecnicos:ruleservice|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.[[:simo:documentos:tecnicos:estadoconvocatoria|EstadoConvocatoria]]).A || estado==T(co.gov.cnsc.sigeca.model.[[:simo:documentos:tecnicos:estadoconvocatoria|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.[[:simo:documentos:tecnicos:inscripciondto|InscripcionDTO]].inscribir = #currentUser!=null && !existeInscripcion && preInscripcion && pinInscripcion!=null && (#excepcion.validarExcepcion('exACRINSCRIBIR',1, idEmpleo, 'EMPLEO')) ex.co.gov.cnsc.sigeca.dto.[[:simo:documentos:tecnicos:inscripciondto|InscripcionDTO]].pagarPSE = #currentUser!=null && !existeInscripcion && preInscripcion && pinInscripcion==null && (#excepcion.validarExcepcion('exACRPSE',1, idEmpleo, 'EMPLEO')) ex.co.gov.cnsc.sigeca.model.[[:simo:documentos:tecnicos:inscripcionconvocatoria|InscripcionConvocatoria]].inscribir = (#excepcion.validarExcepcion('exACRINSCRIBIR',1, empleo.id, 'EMPLEO')) && !#inscripcion.existeInscripcion(empleo.convocatoria,#currentUser) && pinInscripcion!=null && estado==T(co.gov.cnsc.sigeca.model.[[:simo:documentos:tecnicos:estadoinscripcion|EstadoInscripcion]]).PI ex.co.gov.cnsc.sigeca.model.[[:simo:documentos:tecnicos:inscripcionconvocatoria|InscripcionConvocatoria]].pagarPSE = (#excepcion.validarExcepcion('exACRPSE',1, empleo.id, 'EMPLEO')) && estado==T(co.gov.cnsc.sigeca.model.[[:simo:documentos:tecnicos:estadoinscripcion|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 [[:simo:documentos:tecnicos:javamail|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.[[:simo:documentos:tecnicos:sslsocketfactory|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|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|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|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/|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|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|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|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|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|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|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|http://simo.cnsc.gov.co/cnscwiki/doku.php?id=simo:documentos:manual_ciudadano#datos_basicos]]\\ registro.video=[[http://www.youtube.com/embed/yyYvsEGNCik|http://www.youtube.com/embed/yyYvsEGNCik]]\\ datosbasicos.video=[[http://www.youtube.com/embed/YvNnKyC3VoY|http://www.youtube.com/embed/YvNnKyC3VoY]]\\ formacion.video=[[http://www.youtube.com/embed/blJndAlX66o|http://www.youtube.com/embed/blJndAlX66o]]\\ experiencialaboral.video=[[http://www.youtube.com/embed/blJndAlX66o|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