--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">\r
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>\r
+<stringAttribute key="M2_GOALS" value="clean deploy -Dremote.address=scp://root:password@10.10.1.29 -Dremote.location=/opt/test-mediacube"/>\r
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>\r
+<booleanAttribute key="M2_OFFLINE" value="false"/>\r
+<stringAttribute key="M2_PROFILES" value=""/>\r
+<listAttribute key="M2_PROPERTIES"/>\r
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>\r
+<booleanAttribute key="M2_SKIP_TESTS" value="false"/>\r
+<intAttribute key="M2_THREADS" value="1"/>\r
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>\r
+<stringAttribute key="M2_USER_SETTINGS" value=""/>\r
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>\r
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">\r
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>\r
+</listAttribute>\r
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}/-modules"/>\r
+</launchConfiguration>\r
</Filters>\r
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L) %n" />\r
</Console>\r
- <HTMLMailAppender name="MarkeredMail" subject="MediaCube rendszerüzenet" to="vasary@elgekko.net" from="mediacubeserver@gmail.com" smtpHost="smtp.gmail.com"\r
+ <HTMLMailAppender name="MarkeredMail" subject="TEST MediaCube rendszerüzenet" to="vasary@elgekko.net" from="mediacubeserver@gmail.com" smtpHost="smtp.gmail.com"\r
smtpPort="465" smtpProtocol="smtps" smtpUsername="mediacubeserver@gmail.com" smtpPassword="salabakter" ignoreExceptions="false" bufferSize="1">\r
<Filters>\r
<MarkerFilter marker="MEDIACUBE" onMatch="ACCEPT" onMismatch="DENY" />\r
<AppenderRef ref="Console" />\r
<AppenderRef ref="MarkeredConsole" />\r
<!-- <AppenderRef ref="RollingFile" /> -->\r
-<!-- <AppenderRef ref="MarkeredMail" /> -->\r
+ <AppenderRef ref="MarkeredMail" />\r
</Root>\r
<Logger name="org.zkoss" level="trace" additivity="false" />\r
<Logger name="org.quartz" level="ERROR" additivity="false" />\r
--- /dev/null
+#Archívum felület hitelesítés \r
+auth_enabled=true\r
+ad_host=10.10.254.11\r
+ad_nonsecureport=3268\r
+ad_base_dn=DC=intra,DC=echotv,DC=hu\r
+ad_admin_map=G_ECH_U_INFORMATIKUSOK,G_ECH_U_MUSZAKVEZETOK,ECH-ISILON-ADMINS\r
+local_users=user:password\r
+local_admins=root:password\r
+local_jobsubmitters=lebony:lebony
\ No newline at end of file
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/user/jobengine/server/steps" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=true -Djobengine.octopus.rundowns.name=test-rundowns -Djobengine.octopus.storyfolders.name=test-storyfolders -Djobengine.octopus.stories.name=test-stories"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/user/jobengine/server/steps" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns -Djobengine.octopus.storyfolders.name=storyfolders -Djobengine.octopus.stories.name=stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
-<booleanAttribute key="show_selected_only" value="false"/>\r
+<booleanAttribute key="show_selected_only" value="true"/>\r
<stringAttribute key="target_bundles" value="cglib@default:default,com.auth0.java-jwt@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,javassist@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.jasper.glassfish@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jdt.core.compiler.batch@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.jvnet.mimepull@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.reflections@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
<booleanAttribute key="tracing" value="false"/>\r
<booleanAttribute key="useCustomFeatures" value="false"/>\r
]\r
}, \r
{\r
+ "active": false,\r
+ "name" : "NEXIO rögzített anyagok másolása az ISILON/ARCHIVE mappába",\r
+ "template": "copyforarchive-nexio-recordings.xml",\r
+ "executeimmediate": true,\r
+ "cronexpression": "0 0 0/1 1/1 * ? *",\r
+ "parameters": [ \r
+ {"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"},\r
+ {"name": "nexioUserName", "value": "administrator", "type": "java.lang.String"},\r
+ {"name": "nexioPassword", "value": "system", "type": "java.lang.String"},\r
+ {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE/TEST", "type": "java.lang.String"},\r
+ {"name": "archiveUserName", "value": "mediacube", "type": "java.lang.String"},\r
+ {"name": "archivePassword", "value": "Broadca5T", "type": "java.lang.String"},\r
+ {"name": "agencies", "value": "schedule-rec", "type": "java.lang.String"},\r
+ {"name": "limit", "value": 10, "type": "java.lang.Integer"},\r
+ {"name": "nexioKillDateDays", "value": 7, "type": "java.lang.Integer"},\r
+ {"name": "nexioAgency", "value": "ARCHIVED", "type": "java.lang.String"}\r
+ ]\r
+ }, \r
+ {\r
"active": false,\r
"name" : "TRAFFIC anyagok visszatöltése",\r
"template": "retrieve-traffic-missing-materials.xml",\r
<!-- <target>1.8</target> -->\r
<!-- </configuration> -->\r
<!-- </plugin> -->\r
+\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-antrun-plugin</artifactId>\r
+ <version>1.1</version>\r
+ <executions>\r
+ <execution>\r
+ <phase>validate</phase>\r
+ <goals>\r
+ <goal>run</goal>\r
+ </goals>\r
+ <configuration>\r
+ <tasks>\r
+ <echo>*** SETTINGS ***</echo>\r
+ <echo>[remote.address] ${remote.address}</echo>\r
+ <echo>[remote.location] ${remote.location}</echo>\r
+ </tasks>\r
+ </configuration>\r
+ </execution>\r
+ </executions>\r
+ </plugin>\r
<plugin>\r
<groupId>org.eclipse.tycho</groupId>\r
<artifactId>tycho-packaging-plugin</artifactId>\r
<launcherArgs>\r
<programArgs>-consoleLog -console 5555\r
</programArgs>\r
- <vmArgs>-Xms512m
--Xmx1024m
--Dfile.encoding=UTF-8
--agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888
--Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory
-
-#System
--Djetty.home=/opt/mediacube/configuration/jetty
--Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml
--Djobengine.jobsteps.root=/opt/mediacube/configuration/executors
--Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates
--Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json
-
--Dorg.eclipse.epp.logging.aeri.skipReports=true
--Declipse.ignoreApp=true
--Dosgi.noShutdown=true
--Djobengine.loglevel=INFO
--Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml\r
- </vmArgs>\r
- <vmArgsLin>#Database\r
--Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
--Djobengine.db.user=db2admin\r
--Djobengine.db.password=password\r
--Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
--Djobengine.nosql.db.user=db2admin\r
--Djobengine.nosql.db.password=password\r
--Djobengine.nosql.db.schema=test\r
-\r
-#Octopus\r
--Djobengine.octopus.api.address=http://10.10.1.11/api/v1\r
--Djobengine.octopus.api.user=mam\r
--Djobengine.octopus.api.password=napocska\r
--Djobengine.octopus.rundowns.name=rundowns\r
--Djobengine.octopus.storyfolders.name=storyfolders\r
--Djobengine.octopus.stories.name=stories\r
+ <vmArgs>-Xms512m\r
+-Xmx1024m\r
+-Dfile.encoding=UTF-8\r
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888\r
+-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory\r
\r
-#Selenio\r
--Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl\r
--Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium\r
+#System\r
+-Djetty.home=/opt/mediacube/configuration/jetty\r
+-Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml\r
+-Djobengine.jobsteps.root=/opt/mediacube/configuration/executors\r
+-Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates\r
+-Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json\r
+-Dmediacube.auth.location=/opt/mediacube/configuration/mediacube-auth.properties\r
\r
-#Nexio\r
--Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;\r
--Djobengine.nexio.db.user=sa\r
--Djobengine.nexio.db.password=resolve\r
--Dnexio.useMOSGateway=true\r
--Dnexio.host=10.10.1.55\r
+-Dorg.eclipse.epp.logging.aeri.skipReports=true \r
+-Declipse.ignoreApp=true \r
+-Dosgi.noShutdown=true\r
+-Djobengine.loglevel=INFO\r
+-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml\r
+ </vmArgs>\r
+ <vmArgsLin>#Database
+-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;
+-Djobengine.db.user=db2admin
+-Djobengine.db.password=password
+-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;
+-Djobengine.nosql.db.user=db2admin
+-Djobengine.nosql.db.password=password
+-Djobengine.nosql.db.schema=test
+
+#Octopus
+-Djobengine.octopus.api.address=http://10.10.1.11/api/v1
+-Djobengine.octopus.api.user=mam
+-Djobengine.octopus.api.password=napocska
+-Djobengine.octopus.rundowns.name=rundowns
+-Djobengine.octopus.storyfolders.name=storyfolders
+-Djobengine.octopus.stories.name=stories
+
+#Selenio
+-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl
+-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium
+
+#Nexio
+-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;
+-Djobengine.nexio.db.user=sa
+-Djobengine.nexio.db.password=resolve
+-Dnexio.useMOSGateway=true
+-Dnexio.host=10.10.1.55
-Dnexio.disable=false\r
</vmArgsLin>\r
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts\r
<artifactId>maven-resources-plugin</artifactId>\r
<version>2.7</version>\r
<executions>\r
- <execution>\r
- <id>copy-resources-1</id>\r
- <phase>install</phase>\r
- <goals>\r
- <goal>copy-resources</goal>\r
- </goals>\r
- <configuration>\r
- <outputDirectory>${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration</outputDirectory>\r
- <resources>\r
- <resource>\r
- <directory>${basedir}/../-configuration</directory>\r
- <includes>\r
- <include>dsm.opt</include>\r
- </includes>\r
- </resource>\r
- <resource>\r
- <directory>${basedir}/../user.jobengine.executors/config</directory>\r
- <includes>\r
- <include>scheduledjobs.json</include>\r
- </includes>\r
- </resource>\r
- <resource>\r
- <directory>${basedir}</directory>\r
- <includes>\r
- <include>log4j2.xml</include>\r
- </includes>\r
- </resource>\r
- </resources>\r
- </configuration>\r
- </execution>\r
<execution>\r
<id>copy-resources-1-lnx</id>\r
<phase>install</phase>\r
</resources>\r
</configuration>\r
</execution>\r
- <execution>\r
- <id>copy-resources-2</id>\r
- <phase>install</phase>\r
- <goals>\r
- <goal>copy-resources</goal>\r
- </goals>\r
- <configuration>\r
- <outputDirectory>${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/executors</outputDirectory>\r
- <resources>\r
- <resource>\r
- <directory>${basedir}/../user.jobengine.executors/config</directory>\r
- <includes>\r
- <include>config.xml</include>\r
- </includes>\r
- </resource>\r
- </resources>\r
- </configuration>\r
- </execution>\r
<execution>\r
<id>copy-resources-2-lnx</id>\r
<phase>install</phase>\r
</resources>\r
</configuration>\r
</execution>\r
- <execution>\r
- <id>copy-resources-3</id>\r
- <phase>install</phase>\r
- <goals>\r
- <goal>copy-resources</goal>\r
- </goals>\r
- <configuration>\r
- <outputDirectory>${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/executors</outputDirectory>\r
- <resources>\r
- <resource>\r
- <directory>${basedir}/../user.jobengine.executors/bin/user/jobengine/server/steps</directory>\r
- </resource>\r
- </resources>\r
- </configuration>\r
- </execution>\r
<execution>\r
<id>copy-resources-3-lnx</id>\r
<phase>install</phase>\r
</resources>\r
</configuration>\r
</execution>\r
- <execution>\r
- <id>copy-resources-4</id>\r
- <phase>install</phase>\r
- <goals>\r
- <goal>copy-resources</goal>\r
- </goals>\r
- <configuration>\r
- <outputDirectory>${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/jobtemplates</outputDirectory>\r
- <resources>\r
- <resource>\r
- <directory>${basedir}/../user.jobengine.executors/jobtemplates</directory>\r
- </resource>\r
- </resources>\r
- </configuration>\r
- </execution>\r
<execution>\r
<id>copy-resources-4-lnx</id>\r
<phase>install</phase>\r
</resources>\r
</configuration>\r
</execution>\r
- <execution>\r
- <id>copy-resources-5</id>\r
- <phase>install</phase>\r
- <goals>\r
- <goal>copy-resources</goal>\r
- </goals>\r
- <configuration>\r
- <outputDirectory>${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/jetty/etc</outputDirectory>\r
- <resources>\r
- <resource>\r
- <directory>${basedir}/../-configuration/jetty-deploy/etc</directory>\r
- </resource>\r
- </resources>\r
- </configuration>\r
- </execution>\r
<execution>\r
<id>copy-resources-5-lnx</id>\r
<phase>install</phase>\r
</resources>\r
</configuration>\r
</execution>\r
- <execution>\r
- <id>copy-resources-6</id>\r
- <phase>install</phase>\r
- <goals>\r
- <goal>copy-resources</goal>\r
- </goals>\r
- <configuration>\r
- <outputDirectory>${project.build.directory}/products/MediaCube/win32/win32/x86_64</outputDirectory>\r
- <resources>\r
- <resource>\r
- <directory>${basedir}/../-configuration</directory>\r
- <includes>\r
- <include>start-mediacube.sh</include>\r
- <include>stop-mediacube.sh</include>\r
- </includes>\r
- </resource>\r
- </resources>\r
- </configuration>\r
- </execution>\r
<execution>\r
<id>copy-resources-6-lnx</id>\r
<phase>install</phase>\r
<includes>\r
<include>start-mediacube.sh</include>\r
<include>stop-mediacube.sh</include>\r
+ <include>mediacube-auth.properties</include>\r
</includes>\r
</resource>\r
</resources>\r
private static final int DEFAULT_BUFFER_SIZE = 512;
- private static final ExecutorService executor = Executors.newFixedThreadPool(5);
+ private static final int CONCURRENT_MAIL_QUEUES = 1;
+ private static final ExecutorService executor = Executors.newFixedThreadPool(CONCURRENT_MAIL_QUEUES);
/**
* Create a SmtpAppender.
final SmtpManager manager = SmtpManager.getSmtpManager(configuration, to, cc, bcc, from, replyTo, subject, smtpProtocol, smtpHost, smtpPort,
smtpUsername, smtpPassword, isSmtpDebug, filter.toString(), bufferSize);
- if (manager == null) {
+ if (manager == null)
return null;
- }
return new HTMLMailAppender(name, filter, layout, manager, ignoreExceptions);
}
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
-import javax.mail.internet.InternetAddress;
import javax.mail.internet.InternetHeaders;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
private final FactoryData data;
+ private String defaultRecipient;
+
protected SmtpManager(final String name, final Session session, final MimeMessage message, final FactoryData data) {
super(null, name);
this.session = session;
this.message = message;
this.data = data;
+ this.defaultRecipient = data.to;
//this.buffer = new CyclicBuffer<>(LogEvent.class, data.numElements);
}
try {
if (appendEvent.getMarker() instanceof MediaCubeMarker) {
MediaCubeMarker mcm = (MediaCubeMarker) appendEvent.getMarker();
- message.setRecipient(RecipientType.TO, new InternetAddress(mcm.getTo()));
- }
+ message.setRecipients(RecipientType.TO, mcm.getTo());
+ } else
+ message.setRecipients(RecipientType.TO, defaultRecipient);
//final LogEvent[] priorEvents = buffer.removeAll();
// LOG4J-310: log appendEvent even if priorEvents is empty
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.apache.logging.log4j.Level;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Marker;\r
+import org.apache.logging.log4j.MarkerManager;\r
+import org.apache.logging.log4j.core.Appender;\r
+import org.apache.logging.log4j.core.Logger;\r
+import org.apache.logging.log4j.core.LoggerContext;\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.MessageFactory;\r
+import org.apache.logging.log4j.util.ReflectionUtil;\r
+\r
+public class LogCollector extends Logger {\r
+\r
+ class CollectedMessage {\r
+ private String message;\r
+ private Level level;\r
+\r
+ CollectedMessage(Level level, Message message) {\r
+ this.level = level;\r
+ this.message = message.getFormattedMessage();\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return String.format("%s %s\r\n", level, message);\r
+ }\r
+ }\r
+\r
+ private static final String LOGCOLLECTOR_FINISH = "LOGCOLLECTOR_FINISH";\r
+ public static Marker FINISH = MarkerManager.getMarker(LOGCOLLECTOR_FINISH);\r
+\r
+ public static org.apache.logging.log4j.Logger getLogger() {\r
+ Logger logger = (Logger) LogManager.getLogger(ReflectionUtil.getCallerClass(2));\r
+ LogCollector result = new LogCollector(logger.getContext(), logger.getName(), logger.getMessageFactory());\r
+ return result;\r
+ }\r
+\r
+ private Map<Marker, List<CollectedMessage>> messages = new HashMap<>();\r
+\r
+ protected LogCollector(LoggerContext context, String name, MessageFactory messageFactory) {\r
+ super(context, name, messageFactory);\r
+ Map<String, Appender> appenders = super.getAppenders();\r
+ }\r
+\r
+ private void collect(Marker marker, Level level, Message message) {\r
+ //LogEvent event = Log4jLogEvent.newBuilder().setMessage(message).setMarker(marker).setLevel(level).setLoggerName(super.getName()).build();\r
+ List<CollectedMessage> msgList = messages.get(marker);\r
+ if (msgList == null) {\r
+ msgList = new ArrayList<>();\r
+ messages.put(marker, msgList);\r
+ }\r
+ msgList.add(new CollectedMessage(level, message));\r
+ }\r
+\r
+ @Override\r
+ public void error(Marker marker, String message) {\r
+ Message msg = getMessageFactory().newMessage(message);\r
+ collect(marker, Level.ERROR, msg);\r
+ super.error(marker, message);\r
+ }\r
+\r
+ @Override\r
+ public void error(Marker marker, String message, Object... params) {\r
+ Message msg = getMessageFactory().newMessage(message, params);\r
+ collect(marker, Level.ERROR, msg);\r
+ super.error(marker, message, params);\r
+ }\r
+\r
+ private void finish() {\r
+ Set<Marker> markers = messages.keySet();\r
+ for (Marker marker : markers) {\r
+ List<CollectedMessage> msgList = messages.get(marker);\r
+ StringBuilder sb = new StringBuilder();\r
+ for (CollectedMessage msg : msgList) {\r
+ sb.append(msg.toString());\r
+ }\r
+ super.info(marker, sb.toString());\r
+ }\r
+ messages.clear();\r
+ }\r
+\r
+ @Override\r
+ public void info(Marker marker, String message) {\r
+ Message msg = getMessageFactory().newMessage(message);\r
+ collect(marker, Level.INFO, msg);\r
+ }\r
+\r
+ @Override\r
+ public void info(Marker marker, String message, Object... params) {\r
+ Message msg = getMessageFactory().newMessage(message, params);\r
+ collect(marker, Level.INFO, msg);\r
+ }\r
+\r
+ @Override\r
+ public void info(Object message) {\r
+ if (message instanceof Marker && LOGCOLLECTOR_FINISH.equals(((Marker) message).getName())) {\r
+ finish();\r
+ return;\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void warn(Marker marker, String message) {\r
+ Message msg = getMessageFactory().newMessage(message);\r
+ collect(marker, Level.WARN, msg);\r
+ }\r
+\r
+ @Override\r
+ public void warn(Marker marker, String message, Object... params) {\r
+ Message msg = getMessageFactory().newMessage(message, params);\r
+ collect(marker, Level.WARN, msg);\r
+ }\r
+}\r
org.apache.commons.lang;bundle-version="2.6.0",
user.jobengine.osgi.server;bundle-version="1.0.0",
user.jobengine.osgi.db,
- com.ibm.nosql;bundle-version="4.19.26",
- org.apache.logging.log4j.api;bundle-version="2.8.2"
+ com.ibm.nosql;bundle-version="4.19.26"
Bundle-ClassPath: .
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: com.fasterxml.jackson.annotation;version="2.4.5",
javax.ws.rs.core;version="2.0.1",
org.apache.commons.io;version="2.2.0",
org.apache.commons.net.ftp;version="3.6.0",
+ org.apache.logging.log4j;version="2.8.2",
+ org.apache.logging.log4j.message;version="2.8.2",
org.jboss.resteasy.client.jaxrs,
org.jboss.resteasy.plugins.providers,
org.jboss.resteasy.spi,
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="NEXIO anyagok törlése">\r
+ <declarations>\r
+ <parameters>\r
+<!-- A host név 'nexio.host' rendszerparaméter -->\r
+ <parameter name="nexioPort" type="java.lang.Integer"/>\r
+ <parameter name="nexioUserName" type="java.lang.String"/>\r
+ <parameter name="nexioPassword" type="java.lang.String"/>\r
+ <parameter name="archiveFtp" type="java.lang.String"/>\r
+ <parameter name="archiveUserName" type="java.lang.String"/>\r
+ <parameter name="archivePassword" type="java.lang.String"/>\r
+ <parameter name="agencies" type="java.lang.String"/>\r
+ <parameter name="limit" type="java.lang.Integer"/>\r
+ <parameter name="nexioKillDateDays" type="java.lang.Integer"/>\r
+ <parameter name="nexioAgency" type="java.lang.String"/>\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="id1" type="user.jobengine.server.steps.CopyForArchiveNEXIORecordingsStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="nexioPort" />\r
+ </input>\r
+ <input>\r
+ <parameter name="nexioUserName" />\r
+ </input>\r
+ <input>\r
+ <parameter name="nexioPassword" />\r
+ </input>\r
+ <input>\r
+ <parameter name="archiveFtp" />\r
+ </input>\r
+ <input>\r
+ <parameter name="archiveUserName" />\r
+ </input>\r
+ <input>\r
+ <parameter name="archivePassword" />\r
+ </input>\r
+ <input>\r
+ <parameter name="agencies" />\r
+ </input>\r
+ <input>\r
+ <parameter name="limit" />\r
+ </input>\r
+ <input>\r
+ <parameter name="nexioKillDateDays" />\r
+ </input>\r
+ <input>\r
+ <parameter name="nexioAgency" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
public static final String MEDIA_HOUSEID = "mediaHouseId";\r
public static final String MEDIA_TITLE = "mediaTitle";\r
public static final String MEDIA_DESCRIPTION = "mediaDescription";\r
+ public static final String MEDIA_TYPE = "mediaType";\r
private static final String DURATION = "duration";\r
\r
private ArchiveItem createArchiveItem(Path jsonFilePath, Path mediaFilePath, Path catchedFilePath) {\r
result.setMediaHouseId(getMetadata(dbObject, MEDIA_HOUSEID));\r
result.setMediaTitle(getMetadata(dbObject, MEDIA_TITLE));\r
result.setMediaDescription(getMetadata(dbObject, MEDIA_DESCRIPTION));\r
+ result.setMediaType(getMetadata(dbObject, MEDIA_TYPE));\r
result.setMediaFile(mediaFilePath.toString());\r
result.setCatchedFile(catchedFilePath.toString());\r
result.setDuration(NoSQLUtils.asLong(dbObject, DURATION));\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.OutputStream;\r
+import java.net.InetAddress;\r
+import java.net.URI;\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.commons.net.ftp.FTP;\r
+import org.apache.commons.net.ftp.FTPClient;\r
+import org.apache.commons.net.ftp.FTPReply;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.ibm.nosql.json.api.BasicDBList;\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+import com.ibm.nosql.json.api.DBCursor;\r
+import com.ibm.nosql.json.api.DBObject;\r
+import com.ibm.nosql.json.api.QueryBuilder;\r
+\r
+import user.commons.CalendarUtils;\r
+import user.commons.ListUtils;\r
+import user.commons.StoreUri;\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.commons.octopus.IOctopusAPI;\r
+import user.commons.octopus.OctopusAPI;\r
+import user.commons.remotestore.FtpDirectoryLister;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class CopyForArchiveNEXIORecordingsStep extends JobStep {\r
+ private static final String MEDIATYPE_RECORDING = "Visszarögzített";\r
+ private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm";\r
+ private static final String STARTTIME_FORMAT = "HHmm";\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String UTF_8 = "utf-8";\r
+ private static final String JSON_EXT = ".json";\r
+ private static final String XML_EXT = ".xml";\r
+ private static final String DURATION = "duration";\r
+ private static final String MXFEXT = ".MXF";\r
+ private static final String NEXIOCLIPS = "nexioclips";\r
+ private static final String LONGNAMEID = "longnameid";\r
+ private static final String ID = "id";\r
+ private static final String EXTAGENCY = "extagency";\r
+ private static final String RECORDDATE = "recorddate";\r
+ private static final SimpleDateFormat startTimeformat = new SimpleDateFormat(STARTTIME_FORMAT);\r
+\r
+ private OctopusAPI octopusAPI;\r
+ private IItemManager manager;\r
+\r
+ private DB db;\r
+ private FTPClient sourceFtp;\r
+ private FTPClient targetFtp;\r
+ private StoreUri sourceUri;\r
+ private StoreUri targetUri;\r
+ private int nexioKillDateDays;\r
+ private String nexioAgency;\r
+ private Object[] filterAgencies;\r
+\r
+ private int check(int value, String name) {\r
+ if (value == 0) {\r
+ logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere 0.", name);\r
+ throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name));\r
+ }\r
+ return value;\r
+ }\r
+\r
+ private String check(String value, String name) {\r
+ if (StringUtils.isBlank(value)) {\r
+ logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere üres.", name);\r
+ throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name));\r
+ }\r
+ return value;\r
+ }\r
+\r
+ private void copy(RundownArchive rundownArchive) {\r
+ for (StoryArchive storyArchive : rundownArchive.getStoryArchives()) {\r
+ for (FileArchive fileArchive : storyArchive.getFileArchives()) {\r
+ try {\r
+ copyFile(fileArchive, rundownArchive, storyArchive);\r
+ logger.info(getMarker(), "Sikeres anyag archiválás a '{}' tükörhöz: '{}'.", rundownArchive.getItemTitle(), fileArchive.getFileName());\r
+ } catch (Exception e) {\r
+ logger.error(getMarker(), "Az '{}' anyag archiválása sikertelen. A rendszer üzenete: {}", fileArchive.getFileName(), e.getMessage());\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ private void copyFile(FileArchive fileArchive, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception {\r
+ String origFileName = fileArchive.getFileName();\r
+ String videoFileName = origFileName + MXFEXT;\r
+\r
+ transferFile(videoFileName, videoFileName);\r
+ BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive);\r
+ transferMetadata(videoFileName, metadata);\r
+ createSourceKillDateFile(rundownArchive, origFileName);\r
+ }\r
+\r
+ private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive) {\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put("itemHouseId", rundownArchive.getItemHouseId());\r
+ result.put("itemTitle", rundownArchive.getItemTitle());\r
+ result.put("itemDescription", rundownArchive.getItemDesc());\r
+ result.put("userName", "mediacube");\r
+\r
+ result.put("mediaHouseId", storyArchive.getMediaHouseId());\r
+ result.put("mediaTitle", storyArchive.getMediaTitle());\r
+ result.put("mediaDescription", storyArchive.getMediaDesc());\r
+\r
+ result.put("duration", fileArchive.getDuration());\r
+ result.put("mediaType", MEDIATYPE_RECORDING);\r
+ return result;\r
+ }\r
+\r
+ private void createSourceKillDateFile(RundownArchive rundownArchive, String fileName) throws Exception {\r
+ logger.info("Create killdate/agency for {}", fileName);\r
+ OutputStream outStream = null;\r
+ try {\r
+ sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect();\r
+ Calendar killDate = CalendarUtils.createCalendar(rundownArchive.getScheduleDate());\r
+ killDate.add(Calendar.DAY_OF_YEAR, nexioKillDateDays);\r
+ byte[] killDateFile = EscortFiles.createNEXIOKillDateFile(fileName, killDate.getTime(), null, nexioAgency);\r
+ outStream = sourceFtp.storeFileStream(fileName + XML_EXT);\r
+ if (outStream == null) {\r
+ throw new NullPointerException("Can not open: " + fileName + XML_EXT + " Reply:" + sourceFtp.getReplyString());\r
+ }\r
+ outStream.write(killDateFile);\r
+ outStream.flush();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ if (outStream != null)\r
+ outStream.close();\r
+ sourceUri.cleanUp();\r
+ }\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(int nexioPort, String nexioUserName, String nexioPassword, String archiveFtp, String archiveUserName, String archivePassword,\r
+ String agencies, int limit, int nexioKillDateDays, String nexioAgency, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ setAndCheck(nexioPort, nexioUserName, nexioPassword, archiveFtp, archiveUserName, archivePassword, agencies, limit, nexioKillDateDays, nexioAgency,\r
+ jobEngine);\r
+ octopusAPI = new OctopusAPI();\r
+ List<BasicDBObject> clips = queryClips();\r
+ processClips(clips, limit);\r
+ return null;\r
+ }\r
+\r
+ private Date getScheduledStart(String clipName, Date recordDate) {\r
+ if (StringUtils.isBlank(clipName))\r
+ logger.warn(getMarker(), "A anyagnak nincs neve, ezért nem archiválható.", clipName);\r
+ if (recordDate == null)\r
+ logger.warn(getMarker(), "A {} anyag rögzítésének ideje nem meghatározható, ezért nem archiválható.", clipName);\r
+\r
+ Date timePart = null;\r
+ try {\r
+ String clipNameTime = clipName.split("_")[0];\r
+ timePart = startTimeformat.parse(clipNameTime);\r
+ } catch (ParseException e) {\r
+ logger.warn(getMarker(), "A {} anyag neve nem időbélyeggel kezdődik, ezért nem archiválható.", clipName);\r
+ return null;\r
+ }\r
+ return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime();\r
+ }\r
+\r
+ private RundownArchive processClip(BasicDBObject clip) {\r
+ RundownArchive result = null;\r
+ String clipName = NoSQLUtils.asString(clip, LONGNAMEID);\r
+ Date recordDate = clip.getDate(RECORDDATE);\r
+ long duration = NoSQLUtils.asLong(clip, DURATION);\r
+ logger.info("Processing {} {}", clipName, recordDate);\r
+ Date scheduledStart = getScheduledStart(clipName, recordDate);\r
+ if (scheduledStart == null)\r
+ return null;\r
+ DBObject rundown = octopusAPI.getRundown(scheduledStart);\r
+ if (rundown == null) {\r
+ logger.warn(getMarker(), "A '{}' anyaghoz nem talllható tükör '{}' kezdéssel, ezért nem archiválható.", clipName, scheduledStart);\r
+ return null;\r
+ }\r
+\r
+ try {\r
+ result = processRundow(rundown, clipName, duration);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.error(getMarker(), "A '{}' anyag metaadatainak transzformálása sikertelen, ezért az nem archiválható. A rendszer hibaüzenete: {}",\r
+ e.getMessage());\r
+ return null;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private void processClips(List<BasicDBObject> clips, int limit) {\r
+ logger.info(getMarker(), "A folyamat {} archiválható anyagot érzékelt.", clips.size());\r
+ int current = 0;\r
+ for (BasicDBObject clip : clips) {\r
+ RundownArchive rundownArchive = processClip(clip);\r
+ if (rundownArchive == null)\r
+ continue;\r
+\r
+ copy(rundownArchive);\r
+\r
+ current++;\r
+ if (current == limit)\r
+ break;\r
+ setProgress(current * 100 / limit);\r
+ }\r
+ }\r
+\r
+ private RundownArchive processRundow(DBObject r, String clipName, long duration) throws Exception {\r
+ BasicDBObject rundown = (BasicDBObject) r;\r
+ long rundownID = rundown.getLong(ID);\r
+ logger.info("Processing rundown {} {}", rundownID, rundown.getString(IOctopusAPI.NAME));\r
+\r
+ List<DBObject> stories = octopusAPI.getRundownFullStories(rundownID);\r
+ if (stories == null)\r
+ return null;\r
+ RundownArchive result = new RundownArchive();\r
+\r
+ long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID);\r
+ if (id == 0)\r
+ return null;\r
+ String name = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.RUNDOWN_TYPE), IOctopusAPI.NAME);\r
+ if (StringUtils.isBlank(name))\r
+ return null;\r
+ String channel = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.CHANNEL), IOctopusAPI.NAME);\r
+ Date scheduledStart = rundown.getDate(IOctopusAPI.SCHEDULED_START);\r
+ if (scheduledStart == null)\r
+ return null;\r
+ String start = CalendarUtils.toString(CalendarUtils.createCalendar(scheduledStart), SCHEDULED_FORMAT);\r
+ result.setScheduleDate(scheduledStart);\r
+ result.setItemHouseId(String.valueOf(id));\r
+ result.setItemTitle(String.format("%s %s %s", start, name, channel));\r
+\r
+ StringBuilder sb = new StringBuilder();\r
+ for (DBObject s : stories) {\r
+ BasicDBObject story = (BasicDBObject) s;\r
+ sb.append(story.getString(IOctopusAPI.PARENT_STORY_ID));\r
+ sb.append(" [" + story.getString(IOctopusAPI.FORMAT) + "] ");\r
+ sb.append(story.getString(IOctopusAPI.NAME));\r
+ sb.append("\r\n");\r
+ }\r
+ StoryArchive storyArchive = new StoryArchive();\r
+ storyArchive.setMediaHouseId(result.getItemHouseId());\r
+ storyArchive.setMediaTitle(clipName);\r
+ storyArchive.setMediaDesc(sb.toString());\r
+ result.addStoryArchive(storyArchive);\r
+ storyArchive.addFileArchive(new FileArchive(clipName, duration));\r
+ return result;\r
+ }\r
+\r
+ private List<BasicDBObject> queryClips() {\r
+ DBCollection collection = db.getCollection(NEXIOCLIPS);\r
+ BasicDBList agencies = new BasicDBList(filterAgencies);\r
+\r
+ Calendar now = CalendarUtils.createZeroCalendar();\r
+ QueryBuilder dateQueryBuilder = QueryBuilder.start(RECORDDATE).lessThan(now.getTime());\r
+ QueryBuilder queryBuilder = QueryBuilder.start(EXTAGENCY).in(agencies).and(dateQueryBuilder.get());\r
+ DBCursor cursor = collection.find(queryBuilder.get()).sort(RECORDDATE, -1);\r
+ if (!cursor.hasNext())\r
+ return null;\r
+ return ListUtils.cast(cursor.toArray());\r
+ }\r
+\r
+ private void setAndCheck(int nexioPort, String nexioUserName, String nexioPassword, String archiveFtp, String archiveUserName, String archivePassword,\r
+ String agencies, int limit, int nexioKillDateDays, String nexioAgency, IJobEngine jobEngine) throws Exception {\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (db == null) {\r
+ logger.error(getMarker(), "Az NoSQL adatkezelő réteg nem elérhető.");\r
+ throw new NullPointerException("Internal error, missing NoSQL DB reference.");\r
+ }\r
+\r
+ if (jobEngine == null) {\r
+ logger.error(getMarker(), "Az folyamatkezelő réteg nem elérhető.");\r
+ throw new NullPointerException("Internal error, missing JobEngine reference.");\r
+ }\r
+ manager = jobEngine.getItemManager();\r
+ if (manager == null) {\r
+ logger.error(getMarker(), "Az adatbáziskezelő réteg nem elérhető.");\r
+ throw new NullPointerException("Internal error, missing ItemManager reference.");\r
+ }\r
+ String nexioHost = System.getProperty("nexio.host");\r
+ if (StringUtils.isBlank(nexioHost)) {\r
+ logger.error(getMarker(), "A 'nexio.host' rendszer paraméter nem található.");\r
+ throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
+ }\r
+ check(nexioPort, "nexioPort");\r
+ check(nexioUserName, "nexioUserName");\r
+ check(nexioPassword, "nexioPassword");\r
+\r
+ check(agencies, "agencies");\r
+ filterAgencies = agencies.split(",");\r
+\r
+ check(limit, "limit");\r
+\r
+ check(nexioKillDateDays, "nexioKillDateDays");\r
+ this.nexioKillDateDays = nexioKillDateDays;\r
+ check(nexioAgency, "nexioAgency");\r
+ this.nexioAgency = nexioAgency;\r
+\r
+ sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost);\r
+ sourceUri.setPortNumber(nexioPort);\r
+ sourceUri.setUserName(nexioUserName);\r
+ sourceUri.setPassword(nexioPassword);\r
+ if (sourceUri == null) {\r
+ logger.error(getMarker(), "A forrás nem elérhető.");\r
+ throw new NullPointerException("Internal error, missing 'sourceUri'.");\r
+ }\r
+\r
+ check(archiveFtp, "archiveFtp");\r
+ check(archiveUserName, "archiveUserName");\r
+ check(archivePassword, "archivePassword");\r
+\r
+ targetUri = manager.createStoreUri(new URI(archiveFtp));\r
+ targetUri.setUserName(archiveUserName);\r
+ targetUri.setPassword(archivePassword);\r
+ if (targetUri == null) {\r
+ logger.error(getMarker(), "A cél nem elérhető.");\r
+ throw new NullPointerException("Internal error, missing 'targetUri'.");\r
+ }\r
+\r
+ }\r
+\r
+ private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
+ int reply = 0;\r
+ logger.info("Transfer clip {}", sourceFileName);\r
+ try {\r
+ sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect();\r
+ targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
+ if (!targetFtp.enterRemotePassiveMode())\r
+ throw new Exception("!PASV");\r
+\r
+ reply = sourceFtp.port(InetAddress.getByName(targetFtp.getPassiveHost()), targetFtp.getPassivePort());\r
+ if (!FTPReply.isPositiveCompletion(reply))\r
+ throw new Exception("PORT parancs válasza: " + sourceFtp.getReplyString());\r
+\r
+ if (!sourceFtp.setFileType(FTP.BINARY_FILE_TYPE))\r
+ throw new Exception("!SOURCE TYPE");\r
+\r
+ reply = sourceFtp.retr(sourceFileName);\r
+ if (!FTPReply.isPositivePreliminary(reply))\r
+ throw new Exception("RETR parancs válasza: " + sourceFtp.getReplyString());\r
+\r
+ if (!targetFtp.setFileType(FTP.BINARY_FILE_TYPE))\r
+ throw new Exception("!TARGET TYPE");\r
+\r
+ reply = targetFtp.stor(targetFileName);\r
+ if (!FTPReply.isPositivePreliminary(reply))\r
+ throw new Exception("STOR parancs válasza: " + sourceFtp.getReplyString());\r
+\r
+ while (true) {\r
+ reply = sourceFtp.stat();\r
+ if (!FTPReply.isPositiveCompletion(reply))\r
+ throw new Exception("STAT parancs válasza: " + sourceFtp.getReplyString());\r
+\r
+ logger.info("Status: {}", sourceFtp.getReplyString());\r
+ if (reply == 226) {\r
+ break;\r
+ }\r
+ Thread.sleep(1000);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ sourceUri.cleanUp();\r
+ targetUri.cleanUp();\r
+ }\r
+\r
+ }\r
+\r
+ private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception {\r
+ logger.info("Transfer metadata {}", fileName);\r
+ OutputStream outStream = null;\r
+ try {\r
+ targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
+ if (!targetFtp.changeWorkingDirectory(EscortFiles.STATUSFOLDER)) {\r
+ targetFtp.makeDirectory(EscortFiles.STATUSFOLDER);\r
+ if (!targetFtp.changeWorkingDirectory(EscortFiles.STATUSFOLDER))\r
+ throw new Exception("!STATUSFOLDER");\r
+ }\r
+\r
+ outStream = targetFtp.storeFileStream(fileName + JSON_EXT);\r
+ if (outStream == null) {\r
+ throw new NullPointerException("Can not open: " + fileName + JSON_EXT + " Reply:" + targetFtp.getReplyString());\r
+ }\r
+ outStream.write(metadata.toString().getBytes(UTF_8));\r
+ outStream.flush();\r
+ //targetFtp.changeToParentDirectory();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ if (outStream != null)\r
+ outStream.close();\r
+ targetUri.cleanUp();\r
+ }\r
+ }\r
+\r
+}\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
+import user.commons.MediaCubeMarker;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
\r
@StepEntry\r
public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws InterruptedException {\r
- // try {\r
- // logger.warn("| + | FakeNoParams step");\r
- // jobRuntime.incrementProgress(50);\r
- // Thread.sleep(15000);\r
- // jobRuntime.incrementProgress(100);\r
- // logger.warn("| - | FakeNoParams step");\r
- // } catch (Exception e) {\r
- // logger.error(e.getMessage());\r
- // }\r
+ MediaCubeMarker toMarker = new MediaCubeMarker("vasary@gmail.com");\r
+ logger.info(toMarker, "A folyamat elindult");\r
+ logger.warn(toMarker, "Egy WARN");\r
+ logger.error(toMarker, "Egy ERROR");\r
+ logger.warn(toMarker, "Egy WARN {}", "paraméterrel");\r
+ logger.error(toMarker, "Egy ERROR {}", "paraméterrel");\r
for (int i = 0; i < count; i++) {\r
if (!canContinue())\r
break;\r
jobRuntime.incrementProgress((i + 1) * count);\r
- Thread.sleep(5000);\r
- //logger.info(getMarker(), "Log markered");\r
+ Thread.sleep(100);\r
+ logger.info(getMarker(), "Log markered" + i);\r
//logger.info("Progress {}", jobRuntime.getProgress());\r
}\r
+ logger.info(toMarker, "A folyamat véget ért");\r
+ //logger.info(LogCollector.FINISH);\r
return null;\r
}\r
\r
\r
public class FakeStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
- int count = 10;\r
+ private int count = 10;\r
+ private StringBuilder sb = new StringBuilder();\r
\r
@StepEntry\r
public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- // throw new Exception("42");\r
Object[] result = { 1 };\r
try {\r
for (int i = 0; i < count; i++) {\r
+ //sb.append("Sikeres iteráció : ")\r
if (!canContinue())\r
break;\r
jobRuntime.incrementProgress((i + 1) * count);\r
Thread.sleep(500);\r
- //logger.info(getMarker(), "Log markered");\r
//logger.info("Progress {}", jobRuntime.getProgress());\r
}\r
} catch (Exception e) {\r
logger.error(e.getMessage());\r
}\r
+ //logger.info(getMarker(), "Log markered");\r
return result;\r
}\r
\r
\r
import java.io.File;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
import user.jobengine.db.IItemManager;\r
import user.jobengine.db.Item;\r
+import user.jobengine.db.ItemType;\r
import user.jobengine.db.Media;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
throw new NullPointerException(ITEM_MANAGER_IS_NULL);\r
Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId());\r
jobRuntime.incrementProgress(50);\r
+\r
if (mediaCubeItem == null)\r
mediaCubeItem = itemManager.createItem(ITEMTYPENAME, archiveItem.getItemTitle(), archiveItem.getItemDescription(),\r
archiveItem.getItemHouseId());\r
- mediaCubeMedia = itemManager.createMedia(ITEMTYPENAME, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
- archiveItem.getMediaHouseId());\r
+\r
+ String mediaTypeName = archiveItem.getMediaType();\r
+ if (StringUtils.isBlank(mediaTypeName)) {\r
+ mediaCubeMedia = itemManager.createMedia(ITEMTYPENAME, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
+ archiveItem.getMediaHouseId());\r
+ } else {\r
+ ItemType itemType = itemManager.getItemType(mediaTypeName);\r
+ if (itemType == null)\r
+ itemManager.createItemType(mediaTypeName, mediaTypeName).add();\r
+ mediaCubeMedia = itemManager.createMedia(mediaTypeName, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
+ archiveItem.getMediaHouseId());\r
+ }\r
+\r
mediaCubeMedia.setLength(archiveItem.getDuration());\r
mediaCubeItem.appendMedia(mediaCubeMedia);\r
\r
com.fasterxml.jackson.datatype.joda;version="2.4.5",
com.fasterxml.jackson.jaxrs.json;version="2.4.5",
org.apache.logging.log4j;version="2.8.2",
- org.apache.logging.log4j.core;version="2.8.2",
org.jboss.resteasy.client.jaxrs,
org.jboss.resteasy.plugins.providers,
org.jboss.resteasy.spi,
if (timePart == null) {\r
result = createCalendar(datePart);\r
} else {\r
- result = createCalendar(timePart.get(Calendar.HOUR), timePart.get(Calendar.MINUTE), timePart.get(Calendar.SECOND), datePart);\r
+ result = createCalendar(timePart.get(Calendar.HOUR_OF_DAY), timePart.get(Calendar.MINUTE), timePart.get(Calendar.SECOND), datePart);\r
}\r
return result;\r
}\r
import java.util.ArrayList;\r
import java.util.Collection;\r
import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.LinkedHashSet;\r
import java.util.List;\r
import java.util.Map;\r
+import java.util.Set;\r
import java.util.concurrent.ConcurrentHashMap;\r
\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
public class ListUtils {\r
- private final static Logger logger = LogManager.getLogger();\r
- private static final String METHOD_GETID = "getId";\r
-\r
public interface IMapKeyMaker<K, T> {\r
K getKey(T item);\r
}\r
\r
+ private final static Logger logger = LogManager.getLogger();\r
+\r
+ private static final String METHOD_GETID = "getId";\r
+\r
public static <T> List<T> addAll(List<T> target, Collection<T> source) {\r
List<T> result = target;\r
if (!isEmpty(source)) {\r
return result;\r
}\r
\r
+ public static Map<String, Object> asMap(Object... items) throws Exception {\r
+ Map<String, Object> result = new HashMap<>();\r
+ if (items.length % 2 != 0)\r
+ throw new Exception("Even number of parameters is required.");\r
+ for (int i = 0; i < items.length; i = i + 2) {\r
+ result.put(String.valueOf(items[i]), items[i + 1]);\r
+ }\r
+ return result;\r
+ }\r
+\r
@SuppressWarnings("unchecked")\r
\r
public static <T> List<T> cast(Collection<?> collection) {\r
return indexOf(collection, item) > -1;\r
}\r
\r
+ public static <T> List<T> distinctUnion(List<T> source, List<T> target) {\r
+ Set<T> temp = new LinkedHashSet<>(source);\r
+ temp.addAll(target);\r
+ return new ArrayList<>(temp);\r
+ }\r
+\r
public static <T> T get(Collection<T> collection, T item) {\r
T result = null;\r
try {\r
return result;\r
}\r
\r
- private static long getId(Object pojo) throws NoSuchMethodException, SecurityException, IllegalAccessException,\r
- IllegalArgumentException, InvocationTargetException {\r
+ private static long getId(Object pojo)\r
+ throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {\r
Method method = pojo.getClass().getMethod(METHOD_GETID);\r
long result = (long) method.invoke(pojo);\r
return result;\r
return result;\r
}\r
\r
+ public static <T> List<T> intersect(List<T> source, List<T> target) {\r
+ Set<T> s1 = new HashSet<T>(source);\r
+ Set<T> s2 = new HashSet<T>(target);\r
+ s1.retainAll(s2);\r
+ return new ArrayList<>(s1);\r
+ }\r
+\r
public static boolean isEmpty(Collection<?> collection) {\r
return collection == null || collection.isEmpty();\r
}\r
collection.add(index, item);\r
}\r
\r
- public static Map<String, Object> asMap(Object... items) throws Exception {\r
- Map<String, Object> result = new HashMap<>();\r
- if (items.length % 2 != 0)\r
- throw new Exception("Even number of parameters is required.");\r
- for (int i = 0; i < items.length; i = i + 2) {\r
- result.put(String.valueOf(items[i]), items[i + 1]);\r
- }\r
- return result;\r
- }\r
-\r
}\r
static final String STORYID = "storyId";\r
static final String FORMAT = "format";\r
\r
+ DBObject getRundown(Date scheduledDate);\r
+\r
List<DBObject> getRundownFullStories(long id);\r
\r
List<DBObject> getRundowns(Date scheduledDate);\r
return result;\r
}\r
\r
+ @Override\r
+ public DBObject getRundown(Date scheduledDate) {\r
+ DBObject result = null;\r
+ DBCollection collection = db.getCollection(RUNDOWN_COLLECTION);\r
+ DBCursor find = collection.find(new BasicDBObject(SCHEDULED_START, scheduledDate));\r
+ if (find.hasNext())\r
+ result = find.next();\r
+ return result;\r
+ }\r
+\r
@Override\r
public List<DBObject> getRundownFullStories(long id) {\r
List<DBObject> result = null;\r
--- /dev/null
+package user.commons;\r
+\r
+import org.apache.logging.log4j.Marker;\r
+import org.junit.Test;\r
+\r
+public class TestMediaCubeMarker {\r
+ @Test\r
+ public void test() throws Exception {\r
+ MediaCubeMarker sut = new MediaCubeMarker("valami");\r
+ Marker[] parents = sut.getParents();\r
+ }\r
+\r
+}\r
com.ibm.nosql;bundle-version="4.19.26";visibility:=reexport,
org.jmock.junit4;bundle-version="2.6.0",
org.junit;bundle-version="4.12.0",
- org.jmock;bundle-version="2.6.0",
- org.apache.logging.log4j.api;bundle-version="2.8.2"
+ org.jmock;bundle-version="2.6.0"
Service-Component: OSGI-INF/component.xml
Bundle-ActivationPolicy: lazy
-Import-Package: com.fasterxml.jackson.annotation;version="2.4.5"
+Import-Package: com.fasterxml.jackson.annotation;version="2.4.5",
+ org.apache.logging.log4j;version="2.8.2"
Export-Package: user.jobengine.db
// System.setProperty(ItemManager.DBPASSWORD, "password");\r
// System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
\r
- System.setProperty(ItemManager.DBURL,\r
- "jdbc:db2://10.10.1.26:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
System.setProperty(ItemManager.DBPASSWORD, "password");\r
System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
\r
@BeforeClass\r
public static void initialize() {\r
+ if (manager.getItemType("Visszarögzített") == null)\r
+ manager.createItemType("Visszarögzített", "Visszarögzített").add();\r
+\r
// TestDB.createStructure();\r
// TestDB.createItemTypes();\r
if (manager.getStaticItemType() == null)\r
eclipse.preferences.version=1\r
+encoding//pages/login.zul=UTF-8\r
encoding//src/user/jobengine/server/JobRuntime.java=UTF-8\r
Service-Component: OSGI-INF/component.xml
Import-Package: javax.servlet;version="3.1.0",
javax.servlet.http;version="3.1.0",
- org.apache.logging.log4j.core;version="2.8.2",
- org.apache.logging.log4j.core.appender;version="2.8.2",
- org.apache.logging.log4j.core.config;version="2.8.2",
- org.apache.logging.log4j.core.config.plugins;version="2.8.2",
- org.apache.logging.log4j.core.config.plugins.validation.constraints;version="2.8.2",
- org.apache.logging.log4j.core.filter;version="2.8.2",
- org.apache.logging.log4j.core.layout;version="2.8.2",
- org.apache.logging.log4j.core.net;version="2.8.2",
- org.apache.logging.log4j.core.util;version="2.8.2",
+ org.apache.logging.log4j;version="2.8.2",
+ org.apache.logging.log4j.message;version="2.8.2",
org.eclipse.core.runtime.adaptor,
org.eclipse.osgi.framework.console;version="1.1.0",
org.osgi.framework;version="1.5.0",
org.junit;bundle-version="4.12.0",
org.jmock;bundle-version="2.6.0",
org.jmock.junit4;bundle-version="2.6.0",
- org.apache.servicemix.bundles.quartz;bundle-version="2.2.2",
- org.apache.logging.log4j.api;bundle-version="2.8.2"
+ org.apache.servicemix.bundles.quartz;bundle-version="2.2.2"
Export-Package: user.jobengine.osgi.server,
user.jobengine.server,
user.jobengine.server.ast,
-<link rel="shortcut icon" href="img/mediacube_logo_small.ico">\r
+<%@ page import="java.util.*, java.io.*, java.net.*, user.jobengine.zk.util.SessionUtil"%>\r
+<link rel="shortcut icon" href="/img/mediacube_logo_small.ico">\r
<%\r
- pageContext.forward("/pages/login.jsp");\r
- //response.sendRedirect("/pages/login.jsp");\r
+ pageContext.forward("/pages/index.zul");\r
%>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>\r
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>\r
-<?init class="user.jobengine.zk.util.AuthInitiator"?>\r
+<?init class="user.jobengine.zk.util.AdminAuthInitiator"?>\r
<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute">\r
<style>\r
.z-progressmeter {\r
-<%@ page import="java.util.*, java.io.*, java.net.*"%><%\r
+<%@ page import="java.util.*, java.io.*, java.net.*, user.jobengine.zk.util.SessionUtil"%>\r
+<%\r
//do login ++++\r
- pageContext.forward("/pages/index.zul");\r
+ if (SessionUtil.isAuthenticated())\r
+ pageContext.forward("/pages/index.zul");\r
+ else\r
+ pageContext.forward("/pages/login.zul");\r
%>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<zk>\r
+<hbox self="@define(content)" vflex="1" hflex="1" align="center" pack="center" spacing="20px">\r
+ <vlayout>\r
+ <window id="loginWin" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.LoginModel')"\r
+ border="normal" hflex="min">\r
+ <caption>\r
+ \r
+ <toolbarbutton image="/img/mediacube_logo_v2_50x50.png" onClick='' />\r
+ </caption> \r
+ <vbox hflex="min" align="center">\r
+ <grid hflex="min">\r
+ <columns>\r
+ <column hflex="min" align="right" />\r
+ <column />\r
+ </columns>\r
+ <rows>\r
+ <row>\r
+ Tartomány\r
+ <label id="domain" width="200px" value="intra.echotv.hu" />\r
+ </row>\r
+ <row>\r
+ Felhasználó\r
+ <textbox value="@bind(jlm.account)" id="account" width="200px" forward="onOK=login.onClick" />\r
+ </row>\r
+ <row>\r
+ Jelszó\r
+ <textbox value="@bind(jlm.password)" id="password" type="password" width="200px" forward="onOK=login.onClick" />\r
+ </row>\r
+ </rows>\r
+ </grid>\r
+ <label id="message" sclass="warn" value="@bind(jlm.message)" />\r
+ <button id="login" label="Bejelentkezés" onClick="@command('authenticate')"/>\r
+ </vbox>\r
+ </window>\r
+ </vlayout>\r
+ </hbox>\r
+</zk>
\ No newline at end of file
<menu sclass="whitemenu" label="Archívum" >\r
<menupopup>\r
<menuitem sclass="rozsda" label="Keresés" onClick='includeContent.src="/pages/search_items.zul"' disabled="false" />\r
-<!-- <menuitem sclass="rozsda" label="Statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="false" /> -->\r
-<!-- <menuitem sclass="rozsda" label="Folyamatok" onClick='includeContent.src="/pages/joblist.zul"' disabled="false" /> -->\r
+ <menuitem sclass="rozsda" label="Statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin}" />\r
+ <menuitem sclass="rozsda" label="Folyamatok" onClick='includeContent.src="/pages/joblist.zul"' disabled="${not sessionScope.userPrincipal.admin}" />\r
+ <menuitem sclass="rozsda" label="Hiányzó anyagok" onClick='includeContent.src="/pages/missingmaterials.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter}" />\r
</menupopup>\r
</menu>\r
\r
<west border="none" size="25%" splittable="true" minsize="250">\r
<div height="100%" width="100%">\r
<groupbox vflex="min" closable="false">\r
-<!-- <caption sclass="boldfont" label="Kereső" /> -->\r
- <textbox style="border:none" instant="true" value="@bind(svm.searchValue)" width="100%" tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t."\r
- onOK="@command('doSearch')" />\r
+ <!-- <caption sclass="boldfont" label="Kereső" /> -->\r
+ <textbox style="border:none" instant="true" value="@bind(svm.searchValue)" width="100%"\r
+ tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')" />\r
<!-- <button sclass="buttonboldfont" label="${labels.button_search}" onClick="@command('doSearch')" autodisable="self" /> -->\r
</groupbox>\r
\r
<groupbox vflex="true" closable="false">\r
<caption sclass="boldfont" label="Gyűjtők" />\r
+\r
+<!-- <grid id="itemResults" sizedByContent="false" span="true" model="@load(svm.searchResult)" autopaging="true" -->\r
+<!-- mold="paging" vflex="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" -->\r
+<!-- sclass="listbox-normal-style"> -->\r
+<!-- <columns> -->\r
+<!-- <column label="ID" hflex="1" align="left" /> -->\r
+<!-- <column label="Cím" hflex="6" align="left" /> -->\r
+<!-- </columns> -->\r
+<!-- <rows> -->\r
+<!-- <template name="model"> -->\r
+<!-- <row> -->\r
+<!-- <label value="@load(each.houseId)" /> -->\r
+<!-- <label value="@load(each.title)" /> -->\r
+<!-- </row> -->\r
+<!-- </template> -->\r
+<!-- </rows> -->\r
+<!-- </grid> -->\r
+ \r
<listbox id="itemResults" sizedByContent="false" span="true" model="@load(svm.searchResult)" multiple="false" autopaging="true"\r
mold="paging" vflex="true" selectedItem="@bind(svm.selectedItem)" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style"\r
sclass="listbox-normal-style">\r
<div>\r
<label style="font-size:8pt; color: gray" value="Média leírása" />\r
<div style="margin: 4px">\r
- <label value="@load(svm.selectedMedia.description)" />\r
+ <label multiline="true" value="@load(svm.selectedMedia.description)" />\r
</div>\r
</div>\r
</div>\r
<?xml version="1.0" encoding="UTF-8"?>\r
+<?init class="user.jobengine.zk.util.AdminAuthInitiator"?>\r
<window apply="user.jobengine.zk.model.StatisticsComposer"\r
contentStyle="overflow:auto;" width="100%" height="100%"> <vlayout>\r
\r
private String mediaHouseId;\r
private String mediaTitle;\r
private String mediaDescription;\r
- private String mediaFile = null;\r
- private String catchedFile = null;\r
+ private String mediaFile;\r
+ private String catchedFile;\r
+ private String mediaType;\r
private long duration;\r
\r
public String getCatchedFile() {\r
return mediaTitle;\r
}\r
\r
+ public String getMediaType() {\r
+ return mediaType;\r
+ }\r
+\r
public boolean removeCatchedFile() {\r
boolean result = false;\r
if (catchedFile != null) {\r
public void setMediaTitle(String mediaTitle) {\r
this.mediaTitle = mediaTitle;\r
}\r
+\r
+ public void setMediaType(String mediaType) {\r
+ this.mediaType = mediaType;\r
+ }\r
}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+public class LogCollector {\r
+}\r
+//public class LogCollector extends Logger {\r
+//\r
+// class CollectedMessage {\r
+// private String message;\r
+// private Level level;\r
+//\r
+// CollectedMessage(Level level, Message message) {\r
+// this.level = level;\r
+// this.message = message.getFormattedMessage();\r
+// }\r
+//\r
+// @Override\r
+// public String toString() {\r
+// return String.format("%s %s\r\n", level, message);\r
+// }\r
+// }\r
+//\r
+// private static final String LOGCOLLECTOR_FINISH = "LOGCOLLECTOR_FINISH";\r
+// public static Marker FINISH = MarkerManager.getMarker(LOGCOLLECTOR_FINISH);\r
+//\r
+// public static org.apache.logging.log4j.Logger getLogger() {\r
+// Logger logger = (Logger) LogManager.getLogger(ReflectionUtil.getCallerClass(2));\r
+// LogCollector result = new LogCollector(logger.getContext(), logger.getName(), logger.getMessageFactory());\r
+// return result;\r
+// }\r
+//\r
+// private Map<Marker, List<CollectedMessage>> messages = new HashMap<>();\r
+//\r
+// protected LogCollector(LoggerContext context, String name, MessageFactory messageFactory) {\r
+// super(context, name, messageFactory);\r
+// //Map<String, Appender> appenders = super.getAppenders();\r
+// }\r
+//\r
+// private void collect(Marker marker, Level level, Message message) {\r
+// //LogEvent event = Log4jLogEvent.newBuilder().setMessage(message).setMarker(marker).setLevel(level).setLoggerName(super.getName()).build();\r
+// List<CollectedMessage> msgList = messages.get(marker);\r
+// if (msgList == null) {\r
+// msgList = new ArrayList<>();\r
+// messages.put(marker, msgList);\r
+// }\r
+// msgList.add(new CollectedMessage(level, message));\r
+// }\r
+//\r
+// @Override\r
+// public void error(Marker marker, String message) {\r
+// Message msg = getMessageFactory().newMessage(message);\r
+// collect(marker, Level.ERROR, msg);\r
+// super.error(marker, message);\r
+// }\r
+//\r
+// @Override\r
+// public void error(Marker marker, String message, Object... params) {\r
+// Message msg = getMessageFactory().newMessage(message, params);\r
+// collect(marker, Level.ERROR, msg);\r
+// super.error(marker, message, params);\r
+// }\r
+//\r
+// private void finish() {\r
+// Set<Marker> markers = messages.keySet();\r
+// for (Marker marker : markers) {\r
+// List<CollectedMessage> msgList = messages.get(marker);\r
+// StringBuilder sb = new StringBuilder();\r
+// for (CollectedMessage msg : msgList) {\r
+// sb.append(msg.toString());\r
+// }\r
+// super.info(marker, sb.toString());\r
+// }\r
+// messages.clear();\r
+// }\r
+//\r
+// @Override\r
+// public void info(Marker marker, String message) {\r
+// Message msg = getMessageFactory().newMessage(message);\r
+// collect(marker, Level.INFO, msg);\r
+// }\r
+//\r
+// @Override\r
+// public void info(Marker marker, String message, Object... params) {\r
+// Message msg = getMessageFactory().newMessage(message, params);\r
+// collect(marker, Level.INFO, msg);\r
+// }\r
+//\r
+// @Override\r
+// public void info(Object message) {\r
+// if (message instanceof Marker && LOGCOLLECTOR_FINISH.equals(((Marker) message).getName())) {\r
+// finish();\r
+// return;\r
+// }\r
+// }\r
+//\r
+// @Override\r
+// public void warn(Marker marker, String message) {\r
+// Message msg = getMessageFactory().newMessage(message);\r
+// collect(marker, Level.WARN, msg);\r
+// }\r
+//\r
+// @Override\r
+// public void warn(Marker marker, String message, Object... params) {\r
+// Message msg = getMessageFactory().newMessage(message, params);\r
+// collect(marker, Level.WARN, msg);\r
+// }\r
+//}\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import org.zkoss.bind.BindContext;\r
+import org.zkoss.bind.Converter;\r
+import org.zkoss.zk.ui.Component;\r
+\r
+public class LineFeedConverter implements Converter {\r
+\r
+ @Override\r
+ public Object coerceToBean(Object val, Component comp, BindContext ctx) {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public Object coerceToUi(Object val, Component comp, BindContext ctx) {\r
+ return String.valueOf(val).replace("\r\n", "</br>");\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import java.io.IOException;\r
+\r
+import org.zkoss.bind.annotation.AfterCompose;\r
+import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.ContextParam;\r
+import org.zkoss.bind.annotation.ContextType;\r
+import org.zkoss.bind.annotation.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zk.ui.Component;\r
+import org.zkoss.zk.ui.Executions;\r
+\r
+import user.jobengine.zk.util.SessionUtil;\r
+\r
+public class LoginModel extends BaseModel {\r
+ private String account;\r
+ private String password;\r
+ private String message;\r
+\r
+ @AfterCompose\r
+ public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+ }\r
+\r
+ @Command\r
+ @NotifyChange({ "message" })\r
+ public void authenticate() throws IOException {\r
+ if (!SessionUtil.authenticate(account, password)) {\r
+ setMessage("Hibás fiókadatok!");\r
+ return;\r
+ }\r
+ Executions.sendRedirect("/");\r
+ }\r
+\r
+ public String getAccount() {\r
+ return account;\r
+ }\r
+\r
+ public String getMessage() {\r
+ return message;\r
+ }\r
+\r
+ public String getPassword() {\r
+ return password;\r
+ }\r
+\r
+ @Init\r
+ public void init() {\r
+ setMessage("Kérem adja meg fiókadatait.");\r
+ }\r
+\r
+ public void setAccount(String account) {\r
+ this.account = account;\r
+ }\r
+\r
+ public void setMessage(String message) {\r
+ this.message = message;\r
+ }\r
+\r
+ public void setPassword(String password) {\r
+ this.password = password;\r
+ }\r
+\r
+}
\ No newline at end of file
import org.zkoss.zul.Include;\r
import org.zkoss.zul.Window;\r
\r
+import user.jobengine.zk.util.SessionUtil;\r
+\r
public class MenuModel extends BaseModel {\r
\r
@Wire\r
\r
@Command\r
public void doLogout(@BindingParam("window") Window window) {\r
- // SessionUtil.setAttribute(SessionUtil.PRINCIPALNAME, null);\r
+ SessionUtil.logout();\r
// SessionUtil.setAttribute(SessionUtil.USERPROFILE, null);\r
- window.detach();\r
- //Executions.sendRedirect("/ready.zul");\r
+ //window.detach();\r
+ Executions.sendRedirect("/");\r
//includeContent.setSrc("/pages/joblist.zul");\r
}\r
\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.Converter;\r
import org.zkoss.bind.annotation.BindingParam;\r
import org.zkoss.bind.annotation.Command;\r
import org.zkoss.bind.annotation.NotifyChange;\r
protected CachedListModel searchResult = null;\r
private Item selectedItem = null;\r
private Media selectedMedia = null;\r
+ private Converter lfConverter = new LineFeedConverter();\r
\r
@Command\r
@NotifyChange({ "mold", "paging", "searchResult", "selectedItem", "selectedMedia", "hasLowresMediaFile" })\r
return ret;\r
}\r
\r
+ public Converter getLfConverter() {\r
+ return lfConverter;\r
+ }\r
+\r
public String getLowresMediaFilePath() throws Exception {\r
String ret = "";\r
if (this.selectedMedia != null) {\r
}\r
return ret;\r
}\r
-\r
+ \r
public boolean getHasSelectedMediaFile(){\r
String mediaFilePath =getMediaFilePath();\r
return (mediaFilePath != null && !"".equals(mediaFilePath));\r
--- /dev/null
+package user.jobengine.zk.util;\r
+\r
+import java.util.Hashtable;\r
+import java.util.Properties;\r
+import java.util.Vector;\r
+\r
+import javax.naming.Context;\r
+import javax.naming.NamingEnumeration;\r
+import javax.naming.directory.Attribute;\r
+import javax.naming.directory.Attributes;\r
+import javax.naming.directory.SearchControls;\r
+import javax.naming.directory.SearchResult;\r
+import javax.naming.ldap.InitialLdapContext;\r
+import javax.naming.ldap.LdapContext;\r
+\r
+public class ADHandler {\r
+ static private Properties cfg = null;\r
+\r
+ synchronized static public void get(String cn, Vector<String> ret) throws Exception {\r
+ LdapContext ctx = null;\r
+ NamingEnumeration<SearchResult> answer = null;\r
+ try {\r
+ ctx = getContext();\r
+ SearchControls searchCtls = new SearchControls();\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+ String searchFilter = "(&(CN=" + cn + "))";\r
+ String searchBase = cfg.getProperty("ad_base_dn");\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+ if (answer.hasMoreElements()) {\r
+ SearchResult sr = answer.next();\r
+ Attributes srAttrs = sr.getAttributes();\r
+ Attribute groupMembers = srAttrs.get("memberOf");\r
+ if (groupMembers != null) {\r
+ for (int i = 0; i < groupMembers.size(); i++) {\r
+ String groupName = groupMembers.get(i).toString();\r
+ String[] parts = groupName.split(",");\r
+ groupName = parts[0];\r
+ if (groupName.indexOf("=") > 0) {\r
+ groupName = groupName.substring(groupName.indexOf("=") + 1); //CN=icmadmin,CN=Users,DC=dev2003,DC=user,DC=hu\r
+ }\r
+ if (!ret.contains(groupName) && groupName.matches(cfg.getProperty("ad_groupname_regexp"))) {\r
+ ret.add(groupName);\r
+\r
+ //RECURSIVE CALL\r
+ getADGroupsForCN(groupName, ret);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ }\r
+\r
+ synchronized static public void getADGroupsForCN(String cn, Vector<String> ret) throws Exception {\r
+ LdapContext ctx = null;\r
+ NamingEnumeration<SearchResult> answer = null;\r
+ try {\r
+ ctx = getContext();\r
+ SearchControls searchCtls = new SearchControls();\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+ String searchFilter = "(&(CN=" + cn + "))";\r
+ String searchBase = cfg.getProperty("ad_base_dn");\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+ if (answer.hasMoreElements()) {\r
+ SearchResult sr = answer.next();\r
+ Attributes srAttrs = sr.getAttributes();\r
+ Attribute groupMembers = srAttrs.get("memberOf");\r
+ if (groupMembers != null) {\r
+ for (int i = 0; i < groupMembers.size(); i++) {\r
+ String groupName = groupMembers.get(i).toString();\r
+ String[] parts = groupName.split(",");\r
+ groupName = parts[0];\r
+ if (groupName.indexOf("=") > 0) {\r
+ groupName = groupName.substring(groupName.indexOf("=") + 1); //CN=icmadmin,CN=Users,DC=dev2003,DC=user,DC=hu\r
+ }\r
+ if (!ret.contains(groupName) && groupName.matches(cfg.getProperty("ad_groupname_regexp"))) {\r
+ ret.add(groupName);\r
+\r
+ //RECURSIVE CALL\r
+ getADGroupsForCN(groupName, ret);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Minden AD csoport els� CN nev�t adja vissza.\r
+ */\r
+\r
+ static public void getAllADGroupName(Vector ret) throws Exception {\r
+\r
+ LdapContext ctx = null;\r
+ NamingEnumeration answer = null;\r
+ try {\r
+ //Create the initial directory context\r
+ ctx = getContext();\r
+\r
+ //Create the search controls\r
+ SearchControls searchCtls = new SearchControls();\r
+\r
+ //Specify the search scope\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+\r
+ //specify the LDAP search filter\r
+ String searchFilter = "(&(objectClass=group))"; //(CN=All Research)\r
+\r
+ //Specify the Base for the search\r
+ String searchBase = cfg.getProperty("ad_base_dn");\r
+\r
+ //initialize counter to total the group members\r
+ int totalResults = 0;\r
+\r
+ //Specify the attributes to return\r
+ String returnedAtts[] = { "member" };\r
+ searchCtls.setReturningAttributes(returnedAtts);\r
+\r
+ //Search for objects using the filter\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+\r
+ //Loop through the search results\r
+ while (answer.hasMoreElements()) {\r
+ SearchResult sr = (SearchResult) answer.next();\r
+ String grpname = sr.getName();\r
+ String[] parts = grpname.split(",");\r
+ String[] firstCn = parts[0].split("=");\r
+ ret.add(firstCn[1]);\r
+ }\r
+\r
+ } catch (Exception e) {\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ }\r
+\r
+ synchronized static public String getAllFromAD(String name) throws Exception {\r
+\r
+ //if(1==1) return "-";\r
+\r
+ String fullName = "";\r
+ LdapContext ctx = null;\r
+ NamingEnumeration answer = null;\r
+ try {\r
+ //Create the initial directory context\r
+ ctx = getContext();\r
+\r
+ //Create the search controls\r
+ SearchControls searchCtls = new SearchControls();\r
+\r
+ //Specify the search scope\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+\r
+ //Specify the LDAP search filter\r
+ String searchFilter = "(&(objectClass=person)(objectCategory=Person)(CN=" + name + "))"; //p�ld�k: "(&(objectClass=person)(objectCategory=Person)(CN=y011216s))"; "(&(objectClass=group)(objectCategory=Group)(CN=Users))";\r
+\r
+ //Specify the Base for the search\r
+ String searchBase = cfg.getProperty("ad_base_dn");\r
+\r
+ //Specify the attributes to return\r
+ //String returnedAtts[]={"memberOf"}; //"member"\r
+ //searchCtls.setReturningAttributes(returnedAtts);\r
+\r
+ //Search for objects using the filter\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+\r
+ //Loop through the search results\r
+ if (answer.hasMoreElements()) {\r
+ SearchResult sr = (SearchResult) answer.next();\r
+ Attributes srAttrs = sr.getAttributes();\r
+\r
+ for (NamingEnumeration<?> enu = srAttrs.getAll(); enu.hasMore();) {\r
+ Attribute attr = (Attribute) enu.next();\r
+ //System.out.println(attr);\r
+ if (attr != null) {\r
+ System.out.println("attrib: " + attr.getID() + " : " + attr.get(0).toString());\r
+ }\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ System.out.println(e.getMessage());\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ return fullName;\r
+ }\r
+\r
+ synchronized static public LdapContext getContext() throws Exception {\r
+\r
+ String adminName = cfg.getProperty("ad_nonsecure_user_dn") + "," + cfg.getProperty("ad_base_dn");\r
+ String adminPassword = cfg.getProperty("ad_nonsecure_user_password");\r
+ String ldapURL = "ldap://" + cfg.getProperty("ad_host") + ":" + cfg.getProperty("ad_nonsecureport");\r
+\r
+ Hashtable env = new Hashtable();\r
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");\r
+ //set security credentials, note using simple cleartext authentication\r
+ env.put(Context.SECURITY_AUTHENTICATION, "simple");\r
+ //env.put(Context.SECURITY_PRINCIPAL, adminName);\r
+ env.put(Context.SECURITY_PRINCIPAL, "echotest@intra.echotv.hu");\r
+ env.put(Context.SECURITY_CREDENTIALS, adminPassword);\r
+ //connect to my domain controller\r
+ env.put(Context.PROVIDER_URL, ldapURL);\r
+\r
+ //Create the initial directory context\r
+ LdapContext ctx = new InitialLdapContext(env, null);\r
+ return ctx;\r
+ }\r
+\r
+ synchronized static public String getDisplayName(String name) throws Exception {\r
+ String fullName = "";\r
+ LdapContext ctx = null;\r
+ NamingEnumeration<SearchResult> answer = null;\r
+ try {\r
+ ctx = getContext();\r
+ SearchControls searchCtls = new SearchControls();\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+ String searchFilter = "(&(objectClass=person)(objectCategory=Person)(CN=" + name + "))";\r
+ String searchBase = cfg.getProperty("ad_base_dn");\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+ if (answer.hasMoreElements()) {\r
+ SearchResult sr = answer.next();\r
+ Attribute attr = sr.getAttributes().get("displayName");\r
+ if (attr != null) {\r
+ return attr.get(0).toString();\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ System.out.println(e.getMessage());\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ return fullName;\r
+ }\r
+\r
+ synchronized static public String getMail(String name) throws Exception {\r
+ String fullName = "";\r
+ LdapContext ctx = null;\r
+ NamingEnumeration<SearchResult> answer = null;\r
+ try {\r
+ ctx = getContext();\r
+ SearchControls searchCtls = new SearchControls();\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+ String searchFilter = "(&(objectClass=person)(objectCategory=Person)(CN=" + name + "))";\r
+ String searchBase = cfg.getProperty("ad_base_dn");\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+ if (answer.hasMoreElements()) {\r
+ SearchResult sr = answer.next();\r
+ Attribute attr = sr.getAttributes().get("userPrincipalName");\r
+ if (attr != null) {\r
+ return attr.get(0).toString();\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ System.out.println(e.getMessage());\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ return fullName;\r
+ }\r
+\r
+ //TEST CODE\r
+ public static void main(String[] args) {\r
+ try {\r
+ Properties config = new Properties();\r
+ config.setProperty("ad_host", "10.10.254.11");\r
+ config.setProperty("ad_nonsecureport", "389");\r
+ config.setProperty("ad_base_dn", "DC=intra,DC=echotv,DC=hu");\r
+ config.setProperty("ad_nonsecure_user_dn", "CN=echotest,CN=Users");\r
+ config.setProperty("ad_nonsecure_user_password", "aA123456+");\r
+ ADHandler.setConfig(config);\r
+\r
+ ADHandler.getMail("echotest");\r
+ System.out.println("Display name: " + ADHandler.getDisplayName("echotest"));\r
+ Vector groups = new Vector();\r
+ ADHandler.getADGroupsForCN("echotest", groups);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ static public void setConfig(Properties _cfg) {\r
+ ADHandler.cfg = _cfg;\r
+ }\r
+\r
+}
\ No newline at end of file
--- /dev/null
+package user.jobengine.zk.util;\r
+\r
+import java.util.Map;\r
+\r
+import org.zkoss.zk.ui.Executions;\r
+import org.zkoss.zk.ui.Page;\r
+import org.zkoss.zk.ui.util.Initiator;\r
+\r
+public class AdminAuthInitiator implements Initiator {\r
+\r
+ @Override\r
+ public void doInit(Page page, Map<String, Object> args) throws Exception {\r
+ if (!SessionUtil.isAuthenticated())\r
+ Executions.sendRedirect("/pages/login.jsp");\r
+\r
+ if (!SessionUtil.isAdmin())\r
+ Executions.sendRedirect("/");\r
+ }\r
+\r
+}
\ No newline at end of file
\r
import java.util.Map;\r
\r
+import org.zkoss.zk.ui.Executions;\r
import org.zkoss.zk.ui.Page;\r
import org.zkoss.zk.ui.util.Initiator;\r
\r
* Ellenorzi, hogy van e beloginelt user, ha nincs, akkor -> login.zul Minden oldal belinkeli ezt az ellenorzest.\r
*/\r
public class AuthInitiator implements Initiator {\r
-\r
@Override\r
public void doInit(Page page, Map<String, Object> args) throws Exception {\r
- //nincs beloginelt felhasznalo\r
- // if(SessionUtil.getAttribute(SessionUtil.PRINCIPALNAME) == null){\r
- // Executions.sendRedirect("/index.jsp");\r
- // return;\r
- // }\r
+ if (!SessionUtil.isAuthenticated())\r
+ Executions.sendRedirect("/pages/login.jsp");\r
}\r
\r
}
\ No newline at end of file
--- /dev/null
+package user.jobengine.zk.util;\r
+\r
+import java.io.FileInputStream;\r
+import java.lang.invoke.MethodHandles;\r
+import java.net.URL;\r
+import java.util.ArrayList;\r
+import java.util.Hashtable;\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+import javax.naming.Context;\r
+import javax.naming.NamingEnumeration;\r
+import javax.naming.NamingException;\r
+import javax.naming.directory.Attribute;\r
+import javax.naming.directory.Attributes;\r
+import javax.naming.directory.SearchControls;\r
+import javax.naming.directory.SearchResult;\r
+import javax.naming.ldap.InitialLdapContext;\r
+import javax.naming.ldap.LdapContext;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.ListUtils;\r
+\r
+public class LDAPHandler {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String LDAP_ADDRESS = "ldap://%s:%s";\r
+ private static final String AD_NONSECUREPORT = "ad_nonsecureport";\r
+ private static final String AD_HOST = "ad_host";\r
+ private static final String SIMPLE_AUTH = "simple";\r
+ private static final String CTX_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";\r
+ private static final String DOMAIN_ACCOUNT = "%s@%s";\r
+ private static final String MAIL = "mail";\r
+ private static final String DISPLAY_NAME = "displayName";\r
+ private static final String MEMBER_OF = "memberOf";\r
+ private static final String AD_BASE_DN = "ad_base_dn";\r
+\r
+ public static void main(String[] args) throws Exception {\r
+ // Properties cfg = new Properties();\r
+ // cfg.setProperty("ad_host", "10.10.254.11");\r
+ // cfg.setProperty("ad_nonsecureport", "389");\r
+ // cfg.setProperty("ad_base_dn", "DC=intra,DC=echotv,DC=hu");\r
+\r
+ Properties cfg = new Properties();\r
+ URL srcLocation = MethodHandles.lookup().lookupClass().getProtectionDomain().getCodeSource().getLocation();\r
+ URL location = new URL(srcLocation, "../../-configuration/mediacube-auth.properties");\r
+ cfg.load(new FileInputStream(location.toURI().getPath().toString()));\r
+\r
+ //LDAPHandler h = new LDAPHandler("echotest", "aA123456+", cfg);\r
+ //LDAPHandler h = new LDAPHandler("stibor.adm", "Qwer1234", cfg);\r
+ LDAPHandler h = new LDAPHandler("nagy.ilona", "k0rianDER", cfg);\r
+\r
+ UserPrincipal user = h.getUserPrincipal();\r
+ System.out.println(user);\r
+ //List<String> allGroups = h.getAllGroups();\r
+ }\r
+\r
+ private Properties cfg = null;\r
+ private String account;\r
+ private String password;\r
+ private String domain;\r
+\r
+ public LDAPHandler(String account, String password, Properties cfg) {\r
+ this.account = account;\r
+ this.password = password;\r
+ this.domain = cfg.getProperty(AD_BASE_DN);\r
+ if (domain != null)\r
+ domain = domain.toLowerCase().replace("dc=", "").replace(",", ".");\r
+ this.cfg = cfg;\r
+ }\r
+\r
+ public List<String> getAllGroups() {\r
+ List<String> result = new ArrayList<>();\r
+ LdapContext ctx = null;\r
+ NamingEnumeration<SearchResult> answer = null;\r
+ try {\r
+ ctx = getContext();\r
+ SearchControls searchCtls = new SearchControls();\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+ String searchFilter = "(&(objectClass=group))";\r
+ String searchBase = cfg.getProperty(AD_BASE_DN);\r
+ String returnedAtts[] = { "member" };\r
+ searchCtls.setReturningAttributes(returnedAtts);\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+ while (answer.hasMoreElements()) {\r
+ SearchResult sr = answer.next();\r
+ String grpname = sr.getName();\r
+ String[] parts = grpname.split(",");\r
+ String[] firstCn = parts[0].split("=");\r
+ String groupName = firstCn[1];\r
+ result.add(groupName);\r
+ System.out.println(groupName);\r
+\r
+ // List<String> parentGroups = getMemberOf(ctx, groupName);\r
+ // for (String group : parentGroups)\r
+ // System.out.println("\t" + group);\r
+\r
+ }\r
+\r
+ } catch (Exception e) {\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private LdapContext getContext() throws Exception {\r
+ Hashtable<String, String> env = new Hashtable<>();\r
+ String ldapURL = String.format(LDAP_ADDRESS, cfg.getProperty(AD_HOST), cfg.getProperty(AD_NONSECUREPORT));\r
+ env.put(Context.PROVIDER_URL, ldapURL);\r
+ env.put(Context.INITIAL_CONTEXT_FACTORY, CTX_FACTORY);\r
+ env.put(Context.SECURITY_AUTHENTICATION, SIMPLE_AUTH);\r
+ env.put(Context.SECURITY_PRINCIPAL, String.format(DOMAIN_ACCOUNT, account, domain));\r
+ env.put(Context.SECURITY_CREDENTIALS, password);\r
+\r
+ return new InitialLdapContext(env, null);\r
+ }\r
+\r
+ private List<String> getMemberOf(LdapContext ctx, String cn) {\r
+ List<String> result = new ArrayList<>();\r
+ NamingEnumeration<SearchResult> answer = null;\r
+ try {\r
+ SearchControls searchCtls = new SearchControls();\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+ String searchFilter = "(&(CN=" + cn + "))";\r
+ String searchBase = cfg.getProperty("ad_base_dn");\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+ if (answer.hasMoreElements()) {\r
+ SearchResult sr = answer.next();\r
+ Attributes srAttrs = sr.getAttributes();\r
+ Attribute groupMembers = srAttrs.get("memberOf");\r
+ if (groupMembers != null) {\r
+ for (int i = 0; i < groupMembers.size(); i++) {\r
+ String groupName = groupMembers.get(i).toString();\r
+ String[] parts = groupName.split(",");\r
+ groupName = parts[0];\r
+ if (groupName.indexOf("=") > 0) {\r
+ groupName = groupName.substring(groupName.indexOf("=") + 1);\r
+ if (!result.contains(groupName)) {\r
+ result.add(groupName);\r
+ List<String> parentGroups = getMemberOf(ctx, groupName);\r
+ Set<String> parentSet = new LinkedHashSet<>(parentGroups);\r
+ parentSet.addAll(result);\r
+ result = new ArrayList<>(parentSet);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public UserPrincipal getUserPrincipal() {\r
+ UserPrincipal result = null;\r
+ LdapContext ctx = null;\r
+ NamingEnumeration<SearchResult> answer = null;\r
+ try {\r
+ ctx = getContext();\r
+ SearchControls searchCtls = new SearchControls();\r
+ searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);\r
+ String searchFilter = "(&(CN=" + account + "))";\r
+ String searchBase = cfg.getProperty(AD_BASE_DN);\r
+ answer = ctx.search(searchBase, searchFilter, searchCtls);\r
+ if (answer.hasMoreElements()) {\r
+ result = new UserPrincipal(account);\r
+ SearchResult sr = answer.next();\r
+ Attributes srAttrs = sr.getAttributes();\r
+ Attribute groupMembers = srAttrs.get(MEMBER_OF);\r
+ if (groupMembers != null)\r
+ setMemberOf(result, groupMembers, ctx);\r
+\r
+ Attribute displayName = srAttrs.get(DISPLAY_NAME);\r
+ if (displayName != null)\r
+ result.setDisplayName(String.valueOf(displayName.get(0)));\r
+\r
+ Attribute email = srAttrs.get(MAIL);\r
+ if (email != null)\r
+ result.setEmail(String.valueOf(email.get(0)));\r
+\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ } finally {\r
+ try {\r
+ if (answer != null)\r
+ answer.close();\r
+ if (ctx != null)\r
+ ctx.close();\r
+ } catch (Exception exc) {\r
+ }\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
+ private void setMemberOf(UserPrincipal userPrincipal, Attribute groupMembers, LdapContext ctx) throws NamingException {\r
+ List<String> memberOf = new ArrayList<>();\r
+ for (int i = 0; i < groupMembers.size(); i++) {\r
+ String groupName = groupMembers.get(i).toString();\r
+ String[] parts = groupName.split(",");\r
+ groupName = parts[0];\r
+ if (groupName.indexOf("=") > 0) {\r
+ groupName = groupName.substring(groupName.indexOf("=") + 1);\r
+ memberOf.add(groupName);\r
+\r
+ List<String> parentGroups = getMemberOf(ctx, groupName);\r
+ memberOf = ListUtils.distinctUnion(memberOf, parentGroups);\r
+ }\r
+ }\r
+ userPrincipal.setMemberOf(memberOf, cfg);\r
+ }\r
+\r
+}
\ No newline at end of file
--- /dev/null
+package user.jobengine.zk.util;\r
+\r
+import java.io.FileInputStream;\r
+import java.io.InputStream;\r
+import java.util.Properties;\r
+\r
+import javax.servlet.http.HttpSession;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.zk.ui.Session;\r
+import org.zkoss.zk.ui.Sessions;\r
+\r
+public class SessionUtil {\r
+ private static Logger logger = LogManager.getLogger();\r
+ private static final String AUTH_ENABLED = "auth_enabled";\r
+ private static final String LOCAL_USERS = "local_users";\r
+ private static final String LOCAL_ADMINS = "local_admins";\r
+ private static final String LOCAL_JOBSUBMITTERS = "local_jobsubmitters";\r
+ private static final String USERPRINCIPAL = "userPrincipal";\r
+ private static final String AUTH_LOCATION = "mediacube.auth.location";\r
+\r
+ public static boolean authenticate(String account, String password) {\r
+ Properties cfg = getConfiguration();\r
+ UserPrincipal userPrincipal = null;\r
+ if (authenticateLocal(account, password, cfg, LOCAL_ADMINS)) {\r
+ userPrincipal = new UserPrincipal(account, true, true);\r
+ } else {\r
+ if (authenticateLocal(account, password, cfg, LOCAL_JOBSUBMITTERS)) {\r
+ userPrincipal = new UserPrincipal(account, false, true);\r
+ } else {\r
+ if (authenticateLocal(account, password, cfg, LOCAL_USERS)) {\r
+ userPrincipal = new UserPrincipal(account, false, false);\r
+ } else {\r
+ LDAPHandler h = new LDAPHandler(account, password, cfg);\r
+ userPrincipal = h.getUserPrincipal();\r
+ }\r
+ }\r
+ }\r
+\r
+ if (userPrincipal == null)\r
+ return false;\r
+\r
+ setAttribute(USERPRINCIPAL, userPrincipal);\r
+ return true;\r
+ }\r
+\r
+ private static boolean authenticateLocal(String account, String password, Properties cfg, String usersKey) {\r
+ if (StringUtils.isBlank(account) || account.length() < 3)\r
+ return false;\r
+ if (StringUtils.isBlank(password) || password.length() < 3)\r
+ return false;\r
+\r
+ String users = cfg.getProperty(usersKey);\r
+ if (StringUtils.isBlank(users) || users.length() < 7)\r
+ return false;\r
+\r
+ return users.contains(String.format("%s:%s", account, password));\r
+ }\r
+\r
+ static public Object getAttribute(String name) {\r
+ //HttpSession session = (HttpSession) (Executions.getCurrent()).getDesktop().getSession().getNativeSession();\r
+ Session zkSession = Sessions.getCurrent();\r
+ if (zkSession == null)\r
+ return null;\r
+ HttpSession session = (HttpSession) zkSession.getNativeSession();\r
+ if (session == null)\r
+ return null;\r
+ return session.getAttribute(name);\r
+ }\r
+\r
+ private static Properties getConfiguration() {\r
+ Properties cfg = new Properties();\r
+ try (InputStream is = new FileInputStream(System.getProperty(AUTH_LOCATION))) {\r
+ cfg.load(is);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ return cfg;\r
+ }\r
+\r
+ static public UserPrincipal getUserPrincipal() {\r
+ return (UserPrincipal) getAttribute(USERPRINCIPAL);\r
+ }\r
+\r
+ static public boolean isAdmin() {\r
+ UserPrincipal userPrincipal = getUserPrincipal();\r
+ return userPrincipal != null && userPrincipal.isAdmin();\r
+ }\r
+\r
+ static public boolean isAuthenticated() {\r
+ return !isAuthenticationEnabled() || getUserPrincipal() != null;\r
+ }\r
+\r
+ private static boolean isAuthenticationEnabled() {\r
+ boolean result = false;\r
+ try {\r
+ Properties cfg = getConfiguration();\r
+ result = Boolean.parseBoolean(cfg.getProperty(AUTH_ENABLED, "false"));\r
+ if (!result)\r
+ setAttribute(USERPRINCIPAL, new UserPrincipal("admin", true, true));\r
+ } finally {\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public static void logout() {\r
+ setAttribute(SessionUtil.USERPRINCIPAL, null);\r
+ }\r
+\r
+ static public void setAttribute(String name, Object obj) {\r
+ //HttpSession session = (HttpSession) (Executions.getCurrent()).getDesktop().getSession().getNativeSession();\r
+ Session zkSession = Sessions.getCurrent();\r
+ if (zkSession == null)\r
+ return;\r
+ HttpSession session = (HttpSession) zkSession.getNativeSession();\r
+ if (session == null)\r
+ return;\r
+ if (session != null)\r
+ session.setAttribute(name, obj);\r
+ }\r
+\r
+}
\ No newline at end of file
--- /dev/null
+package user.jobengine.zk.util;\r
+\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+import user.commons.ListUtils;\r
+\r
+public class UserPrincipal implements java.io.Serializable {\r
+\r
+ private static final String AD_ADMIN_MAP = "ad_admin_map";\r
+ public final static String unknownUser = "";\r
+\r
+ public static boolean isValid(UserPrincipal userPrincipal) {\r
+ return (userPrincipal != null && !UserPrincipal.unknownUser.equals(userPrincipal.getAccount()));\r
+ }\r
+\r
+ private List<String> memberOf;\r
+ private boolean admin;\r
+ private boolean jobSubmitter;\r
+ private String account;\r
+ private String displayName;\r
+ private String email;\r
+\r
+ public UserPrincipal(String account) {\r
+ this.account = account;\r
+ }\r
+\r
+ public UserPrincipal(String account, boolean isAdmin, boolean isJobSubmitter) {\r
+ this.account = account;\r
+ setAdmin(isAdmin);\r
+ setJobSubmitter(isJobSubmitter);\r
+ }\r
+\r
+ public String getAccount() {\r
+ return account;\r
+ }\r
+\r
+ public String getDisplayName() {\r
+ return displayName;\r
+ }\r
+\r
+ public String getEmail() {\r
+ return email;\r
+ }\r
+\r
+ public boolean isAdmin() {\r
+ return admin;\r
+ }\r
+\r
+ public boolean isJobSubmitter() {\r
+ return jobSubmitter;\r
+ }\r
+\r
+ public void setAdmin(boolean admin) {\r
+ this.admin = admin;\r
+ }\r
+\r
+ public void setDisplayName(String displayName) {\r
+ this.displayName = displayName;\r
+ }\r
+\r
+ public void setEmail(String email) {\r
+ this.email = email;\r
+ }\r
+\r
+ public void setJobSubmitter(boolean jobSubmitter) {\r
+ this.jobSubmitter = jobSubmitter;\r
+ }\r
+\r
+ public void setMemberOf(List<String> memberOf, Properties cfg) {\r
+ this.memberOf = memberOf;\r
+ if (memberOf == null)\r
+ return;\r
+ String adminMap = cfg.getProperty(AD_ADMIN_MAP);\r
+ if (adminMap == null)\r
+ return;\r
+ List<String> remains = ListUtils.intersect(Arrays.asList(adminMap.split(",")), memberOf);\r
+ if (remains.size() > 0) {\r
+ setAdmin(true);\r
+ setJobSubmitter(true);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ StringBuilder membership = new StringBuilder();\r
+ if (memberOf != null) {\r
+ for (String group : memberOf)\r
+ membership.append(group + " ");\r
+\r
+ }\r
+ return String.format("Display name: %s, email: %s, membership: %s", String.valueOf(displayName), String.valueOf(email), membership.toString());\r
+ }\r
+}\r
Export-Package: user.jobengine.osgi.rest,
user.jobengine.osgi.rest.octopus,
user.jobengine.osgi.ws.nexio
-Require-Bundle: org.jboss.resteasy.jaxrs;bundle-version="3.0.11",
- org.apache.logging.log4j.core
+Require-Bundle: org.jboss.resteasy.jaxrs;bundle-version="3.0.11"