Implemented authorization code request, simplified client
authentication, and added tests.
Change-Id: Id6695cacc6da75da64588499ea3a7c7b1ad64591
diff --git a/full/Changes b/full/Changes
index 6b13254..85c1dd7 100644
--- a/full/Changes
+++ b/full/Changes
@@ -1,5 +1,5 @@
version 0.60.2
-17/04/2018
+23/04/2018
- implemented OAuth2 client registration (margaretha)
- implemented OAuth2 client authentication (margaretha)
- changed virtual corpus search to retrieval (margaretha)
@@ -10,6 +10,7 @@
- implemented OAuth2 exception handler (margaretha)
- implemented OAuth2 request access token with client credentials grant (margaretha)
- implemented OAuth2 request access token with resource owner password grant (margaretha)
+ - implemented OAuth2 authorization code request (margaretha)
version 0.60.1
28/03/2018
diff --git a/full/hs_err_pid31138.log b/full/hs_err_pid31138.log
new file mode 100644
index 0000000..c989a1f
--- /dev/null
+++ b/full/hs_err_pid31138.log
@@ -0,0 +1,919 @@
+#
+# There is insufficient memory for the Java Runtime Environment to continue.
+# Native memory allocation (mmap) failed to map 91226112 bytes for committing reserved memory.
+# Possible reasons:
+# The system is out of physical RAM or swap space
+# In 32 bit mode, the process size limit was hit
+# Possible solutions:
+# Reduce memory load on the system
+# Increase physical memory or swap space
+# Check if swap backing store is full
+# Use 64 bit Java on a 64 bit OS
+# Decrease Java heap size (-Xmx/-Xms)
+# Decrease number of Java threads
+# Decrease Java thread stack sizes (-Xss)
+# Set larger code cache with -XX:ReservedCodeCacheSize=
+# This output file may be truncated or incomplete.
+#
+# Out of Memory Error (os_linux.cpp:2627), pid=31138, tid=0x00007f0cd38f8700
+#
+# JRE version: Java(TM) SE Runtime Environment (8.0_112-b15) (build 1.8.0_112-b15)
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.112-b15 mixed mode linux-amd64 compressed oops)
+# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
+#
+
+--------------- T H R E A D ---------------
+
+Current thread (0x00007f0cf0084800): VMThread [stack: 0x00007f0cd37f8000,0x00007f0cd38f9000] [id=31151]
+
+Stack: [0x00007f0cd37f8000,0x00007f0cd38f9000], sp=0x00007f0cd38f7020, free space=1020k
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
+V [libjvm.so+0xac6f7a] VMError::report_and_die()+0x2ba
+V [libjvm.so+0x4fc71b] report_vm_out_of_memory(char const*, int, unsigned long, VMErrorType, char const*)+0x8b
+V [libjvm.so+0x923b13] os::Linux::commit_memory_impl(char*, unsigned long, bool)+0x103
+V [libjvm.so+0x924069] os::pd_commit_memory(char*, unsigned long, unsigned long, bool)+0x29
+V [libjvm.so+0x91e37a] os::commit_memory(char*, unsigned long, unsigned long, bool)+0x2a
+V [libjvm.so+0x992da3] PSVirtualSpace::expand_by(unsigned long)+0x53
+V [libjvm.so+0x9941a8] PSYoungGen::resize_generation(unsigned long, unsigned long)+0xf8
+V [libjvm.so+0x993302] PSYoungGen::resize(unsigned long, unsigned long)+0x22
+V [libjvm.so+0x9905db] PSScavenge::invoke_no_policy()+0xf3b
+V [libjvm.so+0x990d61] PSScavenge::invoke()+0x41
+V [libjvm.so+0x947ac0] ParallelScavengeHeap::failed_mem_allocate(unsigned long)+0x70
+V [libjvm.so+0xac8997] VM_ParallelGCFailedAllocation::doit()+0x97
+V [libjvm.so+0xad0475] VM_Operation::evaluate()+0x55
+V [libjvm.so+0xace84a] VMThread::evaluate_operation(VM_Operation*)+0xba
+V [libjvm.so+0xacebce] VMThread::loop()+0x1ce
+V [libjvm.so+0xacf040] VMThread::run()+0x70
+V [libjvm.so+0x926138] java_start(Thread*)+0x108
+
+VM_Operation (0x00007f0cf985a7f0): ParallelGCFailedAllocation, mode: safepoint, requested by thread 0x00007f0cf0017000
+
+
+--------------- P R O C E S S ---------------
+
+Java Threads: ( => current thread )
+ 0x00007f0cf2522800 JavaThread "pool-3-thread-1" [_thread_blocked, id=31264, stack(0x00007f0c940fc000,0x00007f0c941fd000)]
+ 0x00007f0cf2cee800 JavaThread "pool-2-thread-1" [_thread_blocked, id=31229, stack(0x00007f0c949fd000,0x00007f0c94afe000)]
+ 0x00007f0cf2c9f800 JavaThread "id_tokens.data" [_thread_blocked, id=31227, stack(0x00007f0c94afe000,0x00007f0c94bff000)]
+ 0x00007f0cf2c89800 JavaThread "Statistics Thread-__DEFAULT__-1" daemon [_thread_blocked, id=31226, stack(0x00007f0cc409f000,0x00007f0cc41a0000)]
+ 0x00007f0cf2c72000 JavaThread "id_tokens_inv.data" [_thread_blocked, id=31221, stack(0x00007f0cd00d1000,0x00007f0cd01d2000)]
+ 0x00007f0cf2c63000 JavaThread "__DEFAULT__" daemon [_thread_blocked, id=31220, stack(0x00007f0cd0e83000,0x00007f0cd0f84000)]
+ 0x00007f0cf1aeb000 JavaThread "Abandoned connection cleanup thread" daemon [_thread_blocked, id=31196, stack(0x00007f0cd06bc000,0x00007f0cd07bd000)]
+ 0x00007f0cf0a32800 JavaThread "ReaderThread" [_thread_in_native, id=31177, stack(0x00007f0cd2200000,0x00007f0cd2301000)]
+ 0x00007f0cf00ea800 JavaThread "Service Thread" daemon [_thread_blocked, id=31167, stack(0x00007f0cd2bea000,0x00007f0cd2ceb000)]
+ 0x00007f0cf00df000 JavaThread "C1 CompilerThread2" daemon [_thread_blocked, id=31165, stack(0x00007f0cd2ceb000,0x00007f0cd2dec000)]
+ 0x00007f0cf00dd800 JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=31164, stack(0x00007f0cd2dec000,0x00007f0cd2eed000)]
+ 0x00007f0cf00da800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=31163, stack(0x00007f0cd2eed000,0x00007f0cd2fee000)]
+ 0x00007f0cb4001000 JavaThread "JDWP Command Reader" daemon [_thread_blocked, id=31160, stack(0x00007f0cd2fee000,0x00007f0cd30ef000)]
+ 0x00007f0cf00d8800 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=31159, stack(0x00007f0cd30ef000,0x00007f0cd31f0000)]
+ 0x00007f0cf00d4800 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=31156, stack(0x00007f0cd31f0000,0x00007f0cd32f1000)]
+ 0x00007f0cf00c3000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=31154, stack(0x00007f0cd34f5000,0x00007f0cd35f6000)]
+ 0x00007f0cf0091000 JavaThread "Finalizer" daemon [_thread_blocked, id=31153, stack(0x00007f0cd35f6000,0x00007f0cd36f7000)]
+ 0x00007f0cf008c800 JavaThread "Reference Handler" daemon [_thread_blocked, id=31152, stack(0x00007f0cd36f7000,0x00007f0cd37f8000)]
+ 0x00007f0cf0017000 JavaThread "main" [_thread_blocked, id=31146, stack(0x00007f0cf9760000,0x00007f0cf9861000)]
+
+Other Threads:
+=>0x00007f0cf0084800 VMThread [stack: 0x00007f0cd37f8000,0x00007f0cd38f9000] [id=31151]
+ 0x00007f0cf00ee000 WatcherThread [stack: 0x00007f0cd2ae9000,0x00007f0cd2bea000] [id=31168]
+
+VM state:at safepoint (normal execution)
+
+VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event])
+[0x00007f0cf00130a0] Threads_lock - owner thread: 0x00007f0cf0084800
+[0x00007f0cf00135a0] Heap_lock - owner thread: 0x00007f0cf0017000
+
+Heap:
+ PSYoungGen total 324608K, used 11247K [0x000000076d180000, 0x0000000782e80000, 0x00000007c0000000)
+ eden space 313344K, 0% used [0x000000076d180000,0x000000076d180000,0x0000000780380000)
+ from space 11264K, 99% used [0x0000000781880000,0x000000078237be48,0x0000000782380000)
+ to space 10240K, 0% used [0x0000000782480000,0x0000000782480000,0x0000000782e80000)
+ ParOldGen total 140800K, used 20496K [0x00000006c7400000, 0x00000006cfd80000, 0x000000076d180000)
+ object space 140800K, 14% used [0x00000006c7400000,0x00000006c88042d8,0x00000006cfd80000)
+ Metaspace used 48837K, capacity 49506K, committed 49792K, reserved 1093632K
+ class space used 6068K, capacity 6238K, committed 6272K, reserved 1048576K
+
+Card table byte_map: [0x00007f0cf54ad000,0x00007f0cf5c74000] byte_map_base: 0x00007f0cf1e73000
+
+Marking Bits: (ParMarkBitMap*) 0x00007f0cf8c32c80
+ Begin Bits: [0x00007f0cc43a0000, 0x00007f0cc81d0000)
+ End Bits: [0x00007f0cc81d0000, 0x00007f0ccc000000)
+
+Polling page: 0x00007f0cf9885000
+
+CodeCache: size=245760Kb used=16772Kb max_used=16772Kb free=228987Kb
+ bounds [0x00007f0ce1000000, 0x00007f0ce2070000, 0x00007f0cf0000000]
+ total_blobs=5214 nmethods=4705 adapters=429
+ compilation: enabled
+
+Compilation events (10 events):
+Event: 11,826 Thread 0x00007f0cf00df000 5245 2 org.terracotta.context.extractor.ObjectContextExtractor::extractInstanceAttribute (40 bytes)
+Event: 11,826 Thread 0x00007f0cf00df000 nmethod 5245 0x00007f0ce206b650 code [0x00007f0ce206b840, 0x00007f0ce206be68]
+Event: 11,827 Thread 0x00007f0cf00df000 5246 2 org.terracotta.context.extractor.LazyContextElement::<init> (22 bytes)
+Event: 11,827 Thread 0x00007f0cf00df000 nmethod 5246 0x00007f0ce206c350 code [0x00007f0ce206c4c0, 0x00007f0ce206c708]
+Event: 11,827 Thread 0x00007f0cf00df000 5247 2 org.terracotta.statistics.StatisticsManager$1::contextCreated (5 bytes)
+Event: 11,827 Thread 0x00007f0cf00df000 nmethod 5247 0x00007f0ce206c810 code [0x00007f0ce206c980, 0x00007f0ce206cb08]
+Event: 11,835 Thread 0x00007f0cf00df000 5248 ! 2 sun.reflect.GeneratedMethodAccessor6::invoke (63 bytes)
+Event: 11,836 Thread 0x00007f0cf00df000 nmethod 5248 0x00007f0ce206cbd0 code [0x00007f0ce206cdc0, 0x00007f0ce206d2d8]
+Event: 11,849 Thread 0x00007f0cf00df000 5249 2 org.springframework.beans.factory.support.AbstractBeanFactory::getBean (9 bytes)
+Event: 11,850 Thread 0x00007f0cf00df000 nmethod 5249 0x00007f0ce206d710 code [0x00007f0ce206d880, 0x00007f0ce206da28]
+
+GC Heap History (10 events):
+Event: 3,746 GC heap after
+Heap after GC invocations=6 (full 1):
+ PSYoungGen total 139264K, used 6268K [0x000000076d180000, 0x000000077a800000, 0x00000007c0000000)
+ eden space 129024K, 0% used [0x000000076d180000,0x000000076d180000,0x0000000774f80000)
+ from space 10240K, 61% used [0x0000000774f80000,0x000000077559f090,0x0000000775980000)
+ to space 9216K, 0% used [0x0000000779f00000,0x0000000779f00000,0x000000077a800000)
+ ParOldGen total 99328K, used 7934K [0x00000006c7400000, 0x00000006cd500000, 0x000000076d180000)
+ object space 99328K, 7% used [0x00000006c7400000,0x00000006c7bbf858,0x00000006cd500000)
+ Metaspace used 25855K, capacity 26242K, committed 26624K, reserved 1073152K
+ class space used 3109K, capacity 3220K, committed 3328K, reserved 1048576K
+}
+Event: 4,837 GC heap before
+{Heap before GC invocations=7 (full 1):
+ PSYoungGen total 139264K, used 135292K [0x000000076d180000, 0x000000077a800000, 0x00000007c0000000)
+ eden space 129024K, 100% used [0x000000076d180000,0x0000000774f80000,0x0000000774f80000)
+ from space 10240K, 61% used [0x0000000774f80000,0x000000077559f090,0x0000000775980000)
+ to space 9216K, 0% used [0x0000000779f00000,0x0000000779f00000,0x000000077a800000)
+ ParOldGen total 99328K, used 7934K [0x00000006c7400000, 0x00000006cd500000, 0x000000076d180000)
+ object space 99328K, 7% used [0x00000006c7400000,0x00000006c7bbf858,0x00000006cd500000)
+ Metaspace used 32832K, capacity 33212K, committed 33536K, reserved 1079296K
+ class space used 4151K, capacity 4261K, committed 4352K, reserved 1048576K
+Event: 4,851 GC heap after
+Heap after GC invocations=7 (full 1):
+ PSYoungGen total 208384K, used 8882K [0x000000076d180000, 0x000000077a800000, 0x00000007c0000000)
+ eden space 199168K, 0% used [0x000000076d180000,0x000000076d180000,0x0000000779400000)
+ from space 9216K, 96% used [0x0000000779f00000,0x000000077a7aca40,0x000000077a800000)
+ to space 10240K, 0% used [0x0000000779400000,0x0000000779400000,0x0000000779e00000)
+ ParOldGen total 99328K, used 7942K [0x00000006c7400000, 0x00000006cd500000, 0x000000076d180000)
+ object space 99328K, 7% used [0x00000006c7400000,0x00000006c7bc1858,0x00000006cd500000)
+ Metaspace used 32832K, capacity 33212K, committed 33536K, reserved 1079296K
+ class space used 4151K, capacity 4261K, committed 4352K, reserved 1048576K
+}
+Event: 5,331 GC heap before
+{Heap before GC invocations=8 (full 1):
+ PSYoungGen total 208384K, used 59835K [0x000000076d180000, 0x000000077a800000, 0x00000007c0000000)
+ eden space 199168K, 25% used [0x000000076d180000,0x0000000770342228,0x0000000779400000)
+ from space 9216K, 96% used [0x0000000779f00000,0x000000077a7aca40,0x000000077a800000)
+ to space 10240K, 0% used [0x0000000779400000,0x0000000779400000,0x0000000779e00000)
+ ParOldGen total 99328K, used 7942K [0x00000006c7400000, 0x00000006cd500000, 0x000000076d180000)
+ object space 99328K, 7% used [0x00000006c7400000,0x00000006c7bc1858,0x00000006cd500000)
+ Metaspace used 34813K, capacity 35202K, committed 35496K, reserved 1081344K
+ class space used 4420K, capacity 4518K, committed 4608K, reserved 1048576K
+Event: 5,367 GC heap after
+Heap after GC invocations=8 (full 1):
+ PSYoungGen total 209408K, used 6042K [0x000000076d180000, 0x0000000782e80000, 0x00000007c0000000)
+ eden space 199168K, 0% used [0x000000076d180000,0x000000076d180000,0x0000000779400000)
+ from space 10240K, 59% used [0x0000000779400000,0x00000007799e69c0,0x0000000779e00000)
+ to space 10240K, 0% used [0x0000000782480000,0x0000000782480000,0x0000000782e80000)
+ ParOldGen total 99328K, used 7950K [0x00000006c7400000, 0x00000006cd500000, 0x000000076d180000)
+ object space 99328K, 8% used [0x00000006c7400000,0x00000006c7bc3858,0x00000006cd500000)
+ Metaspace used 34813K, capacity 35202K, committed 35496K, reserved 1081344K
+ class space used 4420K, capacity 4518K, committed 4608K, reserved 1048576K
+}
+Event: 5,368 GC heap before
+{Heap before GC invocations=9 (full 2):
+ PSYoungGen total 209408K, used 6042K [0x000000076d180000, 0x0000000782e80000, 0x00000007c0000000)
+ eden space 199168K, 0% used [0x000000076d180000,0x000000076d180000,0x0000000779400000)
+ from space 10240K, 59% used [0x0000000779400000,0x00000007799e69c0,0x0000000779e00000)
+ to space 10240K, 0% used [0x0000000782480000,0x0000000782480000,0x0000000782e80000)
+ ParOldGen total 99328K, used 7950K [0x00000006c7400000, 0x00000006cd500000, 0x000000076d180000)
+ object space 99328K, 8% used [0x00000006c7400000,0x00000006c7bc3858,0x00000006cd500000)
+ Metaspace used 34813K, capacity 35202K, committed 35496K, reserved 1081344K
+ class space used 4420K, capacity 4518K, committed 4608K, reserved 1048576K
+Event: 5,431 GC heap after
+Heap after GC invocations=9 (full 2):
+ PSYoungGen total 209408K, used 0K [0x000000076d180000, 0x0000000782e80000, 0x00000007c0000000)
+ eden space 199168K, 0% used [0x000000076d180000,0x000000076d180000,0x0000000779400000)
+ from space 10240K, 0% used [0x0000000779400000,0x0000000779400000,0x0000000779e00000)
+ to space 10240K, 0% used [0x0000000782480000,0x0000000782480000,0x0000000782e80000)
+ ParOldGen total 140800K, used 12864K [0x00000006c7400000, 0x00000006cfd80000, 0x000000076d180000)
+ object space 140800K, 9% used [0x00000006c7400000,0x00000006c80900b8,0x00000006cfd80000)
+ Metaspace used 34813K, capacity 35202K, committed 35496K, reserved 1081344K
+ class space used 4420K, capacity 4518K, committed 4608K, reserved 1048576K
+}
+Event: 8,014 GC heap before
+{Heap before GC invocations=10 (full 2):
+ PSYoungGen total 209408K, used 199168K [0x000000076d180000, 0x0000000782e80000, 0x00000007c0000000)
+ eden space 199168K, 100% used [0x000000076d180000,0x0000000779400000,0x0000000779400000)
+ from space 10240K, 0% used [0x0000000779400000,0x0000000779400000,0x0000000779e00000)
+ to space 10240K, 0% used [0x0000000782480000,0x0000000782480000,0x0000000782e80000)
+ ParOldGen total 140800K, used 12864K [0x00000006c7400000, 0x00000006cfd80000, 0x000000076d180000)
+ object space 140800K, 9% used [0x00000006c7400000,0x00000006c80900b8,0x00000006cfd80000)
+ Metaspace used 42274K, capacity 42808K, committed 43264K, reserved 1087488K
+ class space used 5372K, capacity 5515K, committed 5632K, reserved 1048576K
+Event: 8,055 GC heap after
+Heap after GC invocations=10 (full 2):
+ PSYoungGen total 323584K, used 10221K [0x000000076d180000, 0x0000000782e80000, 0x00000007c0000000)
+ eden space 313344K, 0% used [0x000000076d180000,0x000000076d180000,0x0000000780380000)
+ from space 10240K, 99% used [0x0000000782480000,0x0000000782e7b728,0x0000000782e80000)
+ to space 11264K, 0% used [0x0000000781880000,0x0000000781880000,0x0000000782380000)
+ ParOldGen total 140800K, used 13343K [0x00000006c7400000, 0x00000006cfd80000, 0x000000076d180000)
+ object space 140800K, 9% used [0x00000006c7400000,0x00000006c8107da8,0x00000006cfd80000)
+ Metaspace used 42274K, capacity 42808K, committed 43264K, reserved 1087488K
+ class space used 5372K, capacity 5515K, committed 5632K, reserved 1048576K
+}
+Event: 11,876 GC heap before
+{Heap before GC invocations=11 (full 2):
+ PSYoungGen total 323584K, used 323565K [0x000000076d180000, 0x0000000782e80000, 0x00000007c0000000)
+ eden space 313344K, 100% used [0x000000076d180000,0x0000000780380000,0x0000000780380000)
+ from space 10240K, 99% used [0x0000000782480000,0x0000000782e7b728,0x0000000782e80000)
+ to space 11264K, 0% used [0x0000000781880000,0x0000000781880000,0x0000000782380000)
+ ParOldGen total 140800K, used 13343K [0x00000006c7400000, 0x00000006cfd80000, 0x000000076d180000)
+ object space 140800K, 9% used [0x00000006c7400000,0x00000006c8107da8,0x00000006cfd80000)
+ Metaspace used 48837K, capacity 49506K, committed 49792K, reserved 1093632K
+ class space used 6068K, capacity 6238K, committed 6272K, reserved 1048576K
+
+Deoptimization events (10 events):
+Event: 11,846 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,846 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,847 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,847 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,848 Thread 0x00007f0cf0017000 Uncommon trap: reason=range_check action=none pc=0x00007f0ce12e4f6c method=sun.reflect.generics.parser.SignatureParser.current()C @ 34
+Event: 11,862 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,863 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,863 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,864 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+Event: 11,864 Thread 0x00007f0cf0017000 Uncommon trap: reason=unhandled action=none pc=0x00007f0ce198005c method=java.net.URLClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class; @ 44
+
+Internal exceptions (10 events):
+Event: 11,816 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 39> (0x0000000780154818) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp, line 366]
+Event: 11,817 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 38> (0x00000007801627f0) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp, line 366]
+Event: 11,823 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 282> (0x00000007801d5e50) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp, line 366]
+Event: 11,839 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ClassNotFoundException': de/ids_mannheim/korap/interfaces/AuthenticationIfaceCustomizer> (0x0000000780276238) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/classfile/systemDictionary.cpp, li
+Event: 11,839 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 141> (0x00000007802798f0) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp, line 366]
+Event: 11,842 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 141> (0x000000078029b058) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp, line 366]
+Event: 11,842 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 141> (0x000000078029dab0) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp, line 366]
+Event: 11,847 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ClassNotFoundException': de/ids_mannheim/korap/interfaces/AuthenticationIfaceCustomizer> (0x00000007802fb7c8) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/classfile/systemDictionary.cpp, li
+Event: 11,848 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 141> (0x00000007803135f0) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp, line 366]
+Event: 11,864 Thread 0x00007f0cf0017000 Exception <a 'java/lang/ClassNotFoundException': de/ids_mannheim/korap/interfaces/AuthenticationIfaceCustomizer> (0x00000007803783d0) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u112/7884/hotspot/src/share/vm/classfile/systemDictionary.cpp, li
+
+Events (10 events):
+Event: 11,864 Thread 0x00007f0cf0017000 DEOPT UNPACKING pc=0x00007f0ce1047633 sp=0x00007f0cf985a2a0 mode 1
+Event: 11,864 Thread 0x00007f0cf0017000 DEOPT PACKING pc=0x00007f0ce13166cc sp=0x00007f0cf985ad10
+Event: 11,864 Thread 0x00007f0cf0017000 DEOPT UNPACKING pc=0x00007f0ce1047633 sp=0x00007f0cf985aa90 mode 1
+Event: 11,864 Thread 0x00007f0cf0017000 DEOPT PACKING pc=0x00007f0ce1936ee4 sp=0x00007f0cf985adb0
+Event: 11,864 Thread 0x00007f0cf0017000 DEOPT UNPACKING pc=0x00007f0ce1047633 sp=0x00007f0cf985abd8 mode 1
+Event: 11,864 loading class de/ids_mannheim/korap/interfaces/AuthenticationIfaceCustomizer
+Event: 11,864 loading class de/ids_mannheim/korap/interfaces/AuthenticationIfaceCustomizer done
+Event: 11,864 Thread 0x00007f0cf0017000 DEOPT PACKING pc=0x00007f0ce1451e5c sp=0x00007f0cf985adf0
+Event: 11,864 Thread 0x00007f0cf0017000 DEOPT UNPACKING pc=0x00007f0ce1047633 sp=0x00007f0cf985ab68 mode 1
+Event: 11,868 Executing VM operation: ParallelGCFailedAllocation
+
+
+Dynamic libraries:
+00400000-00401000 r-xp 00000000 08:06 6952826 /usr/local/java/jdk1.8.0_112/bin/java
+00600000-00601000 rw-p 00000000 08:06 6952826 /usr/local/java/jdk1.8.0_112/bin/java
+01119000-0113a000 rw-p 00000000 00:00 0 [heap]
+6c7400000-6cfd80000 rw-p 00000000 00:00 0
+6cfd80000-76d180000 ---p 00000000 00:00 0
+76d180000-782e80000 rw-p 00000000 00:00 0
+788580000-7c0000000 ---p 00000000 00:00 0
+7c0000000-7c0620000 rw-p 00000000 00:00 0
+7c0620000-800000000 ---p 00000000 00:00 0
+7f0c64000000-7f0c64021000 rw-p 00000000 00:00 0
+7f0c64021000-7f0c68000000 ---p 00000000 00:00 0
+7f0c6c000000-7f0c6d36b000 rw-p 00000000 00:00 0
+7f0c6d36b000-7f0c70000000 ---p 00000000 00:00 0
+7f0c7390a000-7f0c74000000 rw-p 00000000 00:00 0
+7f0c74000000-7f0c74021000 rw-p 00000000 00:00 0
+7f0c74021000-7f0c78000000 ---p 00000000 00:00 0
+7f0c78000000-7f0c78021000 rw-p 00000000 00:00 0
+7f0c78021000-7f0c7c000000 ---p 00000000 00:00 0
+7f0c7c000000-7f0c7c021000 rw-p 00000000 00:00 0
+7f0c7c021000-7f0c80000000 ---p 00000000 00:00 0
+7f0c80000000-7f0c80021000 rw-p 00000000 00:00 0
+7f0c80021000-7f0c84000000 ---p 00000000 00:00 0
+7f0c84000000-7f0c84021000 rw-p 00000000 00:00 0
+7f0c84021000-7f0c88000000 ---p 00000000 00:00 0
+7f0c88000000-7f0c88021000 rw-p 00000000 00:00 0
+7f0c88021000-7f0c8c000000 ---p 00000000 00:00 0
+7f0c8c000000-7f0c8c021000 rw-p 00000000 00:00 0
+7f0c8c021000-7f0c90000000 ---p 00000000 00:00 0
+7f0c90000000-7f0c90021000 rw-p 00000000 00:00 0
+7f0c90021000-7f0c94000000 ---p 00000000 00:00 0
+7f0c940fc000-7f0c940ff000 ---p 00000000 00:00 0
+7f0c940ff000-7f0c9427d000 rw-p 00000000 00:00 0
+7f0c9427d000-7f0c943fd000 ---p 00000000 00:00 0
+7f0c943fd000-7f0c945fd000 rw-p 00000000 00:00 0
+7f0c945fd000-7f0c947fd000 rw-p 00000000 00:00 0
+7f0c947fd000-7f0c949fd000 rw-p 00000000 00:00 0
+7f0c949fd000-7f0c94a00000 ---p 00000000 00:00 0
+7f0c94a00000-7f0c94afe000 rw-p 00000000 00:00 0
+7f0c94afe000-7f0c94b01000 ---p 00000000 00:00 0
+7f0c94b01000-7f0c94dff000 rw-p 00000000 00:00 0
+7f0c94dff000-7f0c94fff000 rw-p 00000000 00:00 0
+7f0c94fff000-7f0c98000000 rw-p 00000000 00:00 0
+7f0c98000000-7f0c996c5000 rw-p 00000000 00:00 0
+7f0c996c5000-7f0c9c000000 ---p 00000000 00:00 0
+7f0c9c000000-7f0c9c021000 rw-p 00000000 00:00 0
+7f0c9c021000-7f0ca0000000 ---p 00000000 00:00 0
+7f0ca0000000-7f0ca3e49000 rw-p 00000000 00:00 0
+7f0ca3e49000-7f0ca4000000 ---p 00000000 00:00 0
+7f0ca4000000-7f0ca7ffc000 rw-p 00000000 00:00 0
+7f0ca7ffc000-7f0ca8000000 ---p 00000000 00:00 0
+7f0ca8000000-7f0ca8021000 rw-p 00000000 00:00 0
+7f0ca8021000-7f0cac000000 ---p 00000000 00:00 0
+7f0cac000000-7f0cac021000 rw-p 00000000 00:00 0
+7f0cac021000-7f0cb0000000 ---p 00000000 00:00 0
+7f0cb0000000-7f0cb0021000 rw-p 00000000 00:00 0
+7f0cb0021000-7f0cb4000000 ---p 00000000 00:00 0
+7f0cb4000000-7f0cb4021000 rw-p 00000000 00:00 0
+7f0cb4021000-7f0cb8000000 ---p 00000000 00:00 0
+7f0cb8000000-7f0cb8021000 rw-p 00000000 00:00 0
+7f0cb8021000-7f0cbc000000 ---p 00000000 00:00 0
+7f0cbc000000-7f0cbc021000 rw-p 00000000 00:00 0
+7f0cbc021000-7f0cc0000000 ---p 00000000 00:00 0
+7f0cc0000000-7f0cc02f1000 rw-p 00000000 00:00 0
+7f0cc02f1000-7f0cc4000000 ---p 00000000 00:00 0
+7f0cc409f000-7f0cc40a2000 ---p 00000000 00:00 0
+7f0cc40a2000-7f0cc43a0000 rw-p 00000000 00:00 0
+7f0cc43a0000-7f0ccc000000 rw-p 00000000 00:00 0
+7f0ccc000000-7f0ccc021000 rw-p 00000000 00:00 0
+7f0ccc021000-7f0cd0000000 ---p 00000000 00:00 0
+7f0cd00d1000-7f0cd00d4000 ---p 00000000 00:00 0
+7f0cd00d4000-7f0cd03d2000 rw-p 00000000 00:00 0
+7f0cd03d2000-7f0cd04b7000 r-xp 00000000 08:06 8127346 /tmp/sqlite-3.21.0-a3330d00-6c5e-45c0-9946-d79b9e83fefc-libsqlitejdbc.so
+7f0cd04b7000-7f0cd06b6000 ---p 000e5000 08:06 8127346 /tmp/sqlite-3.21.0-a3330d00-6c5e-45c0-9946-d79b9e83fefc-libsqlitejdbc.so
+7f0cd06b6000-7f0cd06bb000 rw-p 000e4000 08:06 8127346 /tmp/sqlite-3.21.0-a3330d00-6c5e-45c0-9946-d79b9e83fefc-libsqlitejdbc.so
+7f0cd06bb000-7f0cd06bc000 rw-p 00000000 00:00 0
+7f0cd06bc000-7f0cd06bf000 ---p 00000000 00:00 0
+7f0cd06bf000-7f0cd09bd000 rw-p 00000000 00:00 0
+7f0cd09bd000-7f0cd0bbd000 rw-p 00000000 00:00 0
+7f0cd0bbd000-7f0cd0dbd000 rw-p 00000000 00:00 0
+7f0cd0e83000-7f0cd0e86000 ---p 00000000 00:00 0
+7f0cd0e86000-7f0cd1184000 rw-p 00000000 00:00 0
+7f0cd1184000-7f0cd1384000 rw-p 00000000 00:00 0
+7f0cd138d000-7f0cd1392000 r--s 00098000 08:06 7223515 /usr/local/java/jdk1.8.0_112/jre/lib/jsse.jar
+7f0cd1392000-7f0cd1592000 rw-p 00000000 00:00 0
+7f0cd1592000-7f0cd15a5000 r--s 00345000 08:06 7223540 /usr/local/java/jdk1.8.0_112/jre/lib/resources.jar
+7f0cd15a5000-7f0cd17a5000 rw-p 00000000 00:00 0
+7f0cd17a5000-7f0cd17af000 r--s 00116000 08:06 9177035 /usr/local/java/jdk1.8.0_112/jre/lib/ext/localedata.jar
+7f0cd17af000-7f0cd17cb000 r--s 00393000 08:06 9177038 /usr/local/java/jdk1.8.0_112/jre/lib/ext/cldrdata.jar
+7f0cd17cb000-7f0cd19cb000 rw-p 00000000 00:00 0
+7f0cd19cb000-7f0cd1bcb000 rw-p 00000000 00:00 0
+7f0cd1bcb000-7f0cd1bdc000 r-xp 00000000 08:06 9176986 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnio.so
+7f0cd1bdc000-7f0cd1ddb000 ---p 00011000 08:06 9176986 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnio.so
+7f0cd1ddb000-7f0cd1ddc000 rw-p 00010000 08:06 9176986 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnio.so
+7f0cd1ddc000-7f0cd1fdc000 rw-p 00000000 00:00 0
+7f0cd1fdc000-7f0cd1ff7000 r--s 001d3000 08:06 9177034 /usr/local/java/jdk1.8.0_112/jre/lib/ext/nashorn.jar
+7f0cd1ff7000-7f0cd2000000 r-xp 00000000 08:06 9176997 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libmanagement.so
+7f0cd2000000-7f0cd21ff000 ---p 00009000 08:06 9176997 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libmanagement.so
+7f0cd21ff000-7f0cd2200000 rw-p 00008000 08:06 9176997 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libmanagement.so
+7f0cd2200000-7f0cd2203000 ---p 00000000 00:00 0
+7f0cd2203000-7f0cd2301000 rw-p 00000000 00:00 0
+7f0cd2301000-7f0cd2317000 r-xp 00000000 08:06 9176961 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnet.so
+7f0cd2317000-7f0cd2517000 ---p 00016000 08:06 9176961 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnet.so
+7f0cd2517000-7f0cd2518000 rw-p 00016000 08:06 9176961 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnet.so
+7f0cd2518000-7f0cd2519000 r--s 0000f000 08:06 4719416 /home/elma/.m2/repository/org/json/json/20131018/json-20131018.jar
+7f0cd2519000-7f0cd251b000 r--s 0000b000 08:06 4719413 /home/elma/.m2/repository/org/apache/oltu/oauth2/org.apache.oltu.oauth2.common/1.0.0/org.apache.oltu.oauth2.common-1.0.0.jar
+7f0cd251b000-7f0cd251d000 r--s 00006000 08:06 4719411 /home/elma/.m2/repository/org/apache/oltu/oauth2/org.apache.oltu.oauth2.authzserver/1.0.0/org.apache.oltu.oauth2.authzserver-1.0.0.jar
+7f0cd251d000-7f0cd2526000 r--s 0004d000 08:06 4718941 /home/elma/.m2/repository/org/flywaydb/flyway-core/4.0/flyway-core-4.0.jar
+7f0cd2526000-7f0cd252a000 r--s 00016000 08:06 4718939 /home/elma/.m2/repository/javax/servlet/javax.servlet-api/4.0.0/javax.servlet-api-4.0.0.jar
+7f0cd252a000-7f0cd252c000 r--s 0000f000 08:06 4718935 /home/elma/.m2/repository/javax/activation/activation/1.1.1/activation-1.1.1.jar
+7f0cd252c000-7f0cd2535000 r--s 00097000 08:06 4718930 /home/elma/.m2/repository/com/sun/mail/javax.mail/1.6.0/javax.mail-1.6.0.jar
+7f0cd2535000-7f0cd253d000 r--s 0005f000 08:06 4718923 /home/elma/.m2/repository/org/apache/velocity/velocity/1.6.2/velocity-1.6.2.jar
+7f0cd253d000-7f0cd2540000 r--s 0001b000 08:06 4718913 /home/elma/.m2/repository/org/apache/struts/struts-tiles/1.3.8/struts-tiles-1.3.8.jar
+7f0cd2540000-7f0cd2545000 r--s 00039000 08:06 4718911 /home/elma/.m2/repository/org/apache/struts/struts-taglib/1.3.8/struts-taglib-1.3.8.jar
+7f0cd2545000-7f0cd254b000 r--s 0004b000 08:06 4459092 /home/elma/.m2/repository/org/apache/struts/struts-core/1.3.8/struts-core-1.3.8.jar
+7f0cd254b000-7f0cd254d000 r--s 00005000 08:06 4459073 /home/elma/.m2/repository/sslext/sslext/1.2-0/sslext-1.2-0.jar
+7f0cd254d000-7f0cd254f000 r--s 0000e000 08:06 4458968 /home/elma/.m2/repository/oro/oro/2.0.8/oro-2.0.8.jar
+7f0cd254f000-7f0cd2550000 r--s 0000c000 08:06 4458387 /home/elma/.m2/repository/commons-logging/commons-logging/1.1/commons-logging-1.1.jar
+7f0cd2550000-7f0cd2552000 r--s 00014000 08:06 4458235 /home/elma/.m2/repository/commons-chain/commons-chain/1.1/commons-chain-1.1.jar
+7f0cd2552000-7f0cd2556000 r--s 00020000 08:06 4458231 /home/elma/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar
+7f0cd2556000-7f0cd255b000 r--s 0002a000 08:06 4458224 /home/elma/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar
+7f0cd255b000-7f0cd2561000 r--s 0004f000 08:06 4458222 /home/elma/.m2/repository/org/apache/velocity/velocity-tools/2.0/velocity-tools-2.0.jar
+7f0cd2561000-7f0cd2563000 r--s 00009000 08:06 4458217 /home/elma/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar
+7f0cd2563000-7f0cd256b000 r--s 0006e000 08:06 4458215 /home/elma/.m2/repository/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar
+7f0cd256b000-7f0cd2574000 r--s 00061000 08:06 4458210 /home/elma/.m2/repository/org/apache/velocity/velocity-engine-core/2.0/velocity-engine-core-2.0.jar
+7f0cd2574000-7f0cd257f000 r--s 00053000 08:06 4458204 /home/elma/.m2/repository/org/springframework/security/spring-security-web/4.2.3.RELEASE/spring-security-web-4.2.3.RELEASE.jar
+7f0cd257f000-7f0cd2584000 r--s 0003c000 08:06 4458199 /home/elma/.m2/repository/org/springframework/spring-expression/4.3.9.RELEASE/spring-expression-4.3.9.RELEASE.jar
+7f0cd2584000-7f0cd2586000 r--s 00000000 08:06 4458183 /home/elma/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar
+7f0cd2586000-7f0cd2592000 r--s 00056000 08:06 4458180 /home/elma/.m2/repository/org/springframework/security/spring-security-core/4.2.3.RELEASE/spring-security-core-4.2.3.RELEASE.jar
+7f0cd2592000-7f0cd2599000 r--s 00036000 08:06 4458176 /home/elma/.m2/repository/org/springframework/spring-tx/5.0.3.RELEASE/spring-tx-5.0.3.RELEASE.jar
+7f0cd2599000-7f0cd25a5000 r--s 00094000 08:06 4458170 /home/elma/.m2/repository/org/springframework/spring-beans/5.0.3.RELEASE/spring-beans-5.0.3.RELEASE.jar
+7f0cd25a5000-7f0cd25ae000 r--s 00057000 08:06 4458168 /home/elma/.m2/repository/org/springframework/spring-jdbc/5.0.3.RELEASE/spring-jdbc-5.0.3.RELEASE.jar
+7f0cd25ae000-7f0cd25b8000 r--s 00061000 08:06 4458162 /home/elma/.m2/repository/com/sun/jersey/jersey-core/1.19.4/jersey-core-1.19.4.jar
+7f0cd25b8000-7f0cd25b9000 r--s 00006000 08:06 4458159 /home/elma/.m2/repository/org/codehaus/jackson/jackson-xc/1.9.2/jackson-xc-1.9.2.jar
+7f0cd25b9000-7f0cd25ba000 r--s 00004000 08:06 4458157 /home/elma/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.9.2/jackson-jaxrs-1.9.2.jar
+7f0cd25ba000-7f0cd25c8000 r--s 000ad000 08:06 4458156 /home/elma/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.2/jackson-mapper-asl-1.9.2.jar
+7f0cd25c8000-7f0cd25cc000 r--s 00034000 08:06 4458151 /home/elma/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.2/jackson-core-asl-1.9.2.jar
+7f0cd25cc000-7f0cd25ce000 r--s 00004000 08:06 4458149 /home/elma/.m2/repository/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar
+7f0cd25ce000-7f0cd25d1000 r--s 00017000 08:06 4458148 /home/elma/.m2/repository/javax/xml/bind/jaxb-api/2.2.2/jaxb-api-2.2.2.jar
+7f0cd25d1000-7f0cd25e4000 r--s 000c7000 08:06 4458146 /home/elma/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.3-1/jaxb-impl-2.2.3-1.jar
+7f0cd25e4000-7f0cd25e6000 r--s 0000f000 08:06 4458142 /home/elma/.m2/repository/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar
+7f0cd25e6000-7f0cd25ea000 r--s 00025000 08:06 4458138 /home/elma/.m2/repository/com/sun/jersey/jersey-json/1.19.4/jersey-json-1.19.4.jar
+7f0cd25ea000-7f0cd25ec000 r--s 00003000 08:06 4458137 /home/elma/.m2/repository/com/sun/jersey/jersey-grizzly/1.19.4/jersey-grizzly-1.19.4.jar
+7f0cd25ec000-7f0cd25ee000 r--s 00018000 08:06 4458134 /home/elma/.m2/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar
+7f0cd25ee000-7f0cd25f1000 r--s 00010000 08:06 4458132 /home/elma/.m2/repository/com/sun/grizzly/grizzly-http-servlet/1.9.45/grizzly-http-servlet-1.9.45.jar
+7f0cd25f1000-7f0cd25f3000 r--s 0000c000 08:06 4458130 /home/elma/.m2/repository/com/sun/grizzly/grizzly-lzma/1.9.45/grizzly-lzma-1.9.45.jar
+7f0cd25f3000-7f0cd25fb000 r--s 00075000 08:06 4458129 /home/elma/.m2/repository/com/sun/grizzly/grizzly-utils/1.9.45/grizzly-utils-1.9.45.jar
+7f0cd25fb000-7f0cd25fc000 r--s 00004000 08:06 4458126 /home/elma/.m2/repository/com/sun/grizzly/grizzly-portunif/1.9.45/grizzly-portunif-1.9.45.jar
+7f0cd25fc000-7f0cd25fd000 r--s 00002000 08:06 4458123 /home/elma/.m2/repository/com/sun/grizzly/grizzly-rcm/1.9.45/grizzly-rcm-1.9.45.jar
+7f0cd25fd000-7f0cd2602000 r--s 00037000 08:06 4458121 /home/elma/.m2/repository/com/sun/grizzly/grizzly-framework/1.9.45/grizzly-framework-1.9.45.jar
+7f0cd2602000-7f0cd2605000 r--s 0002b000 08:06 4458119 /home/elma/.m2/repository/com/sun/grizzly/grizzly-http/1.9.45/grizzly-http-1.9.45.jar
+7f0cd2605000-7f0cd2618000 r--s 0010a000 08:06 4458117 /home/elma/.m2/repository/com/sun/grizzly/grizzly-servlet-webserver/1.9.45/grizzly-servlet-webserver-1.9.45.jar
+7f0cd2618000-7f0cd261a000 r--s 00002000 08:06 4458115 /home/elma/.m2/repository/com/sun/jersey/jersey-test-framework/jersey-test-framework-grizzly/1.19.4/jersey-test-framework-grizzly-1.19.4.jar
+7f0cd261a000-7f0cd261d000 r--s 0001e000 08:06 4458114 /home/elma/.m2/repository/com/sun/jersey/jersey-client/1.19.4/jersey-client-1.19.4.jar
+7f0cd261d000-7f0cd2621000 r--s 0001c000 08:06 4458109 /home/elma/.m2/repository/com/sun/jersey/jersey-servlet/1.19.4/jersey-servlet-1.19.4.jar
+7f0cd2621000-7f0cd2623000 r--s 00006000 08:06 4458104 /home/elma/.m2/repository/com/sun/jersey/jersey-test-framework/jersey-test-framework-core/1.19.4/jersey-test-framework-core-1.19.4.jar
+7f0cd2623000-7f0cd263a000 r--s 001d2000 08:06 4458102 /home/elma/.m2/repository/mysql/mysql-connector-java/6.0.6/mysql-connector-java-6.0.6.jar
+7f0cd263a000-7f0cd2644000 r--s 000ab000 08:06 4458100 /home/elma/.m2/repository/org/javassist/javassist/3.22.0-GA/javassist-3.22.0-GA.jar
+7f0cd2644000-7f0cd2646000 r--s 00006000 08:06 4458098 /home/elma/.m2/repository/org/hibernate/hibernate-java8/5.1.11.Final/hibernate-java8-5.1.11.Final.jar
+7f0cd2646000-7f0cd264a000 r--s 00028000 08:06 4458095 /home/elma/.m2/repository/org/hibernate/hibernate-jpamodelgen/5.1.11.Final/hibernate-jpamodelgen-5.1.11.Final.jar
+7f0cd264a000-7f0cd264b000 r--s 00003000 08:06 4458093 /home/elma/.m2/repository/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1.1/geronimo-jta_1.1_spec-1.1.1.jar
+7f0cd264b000-7f0cd2650000 r--s 00017000 08:06 4458092 /home/elma/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.1-api/1.0.0.Final/hibernate-jpa-2.1-api-1.0.0.Final.jar
+7f0cd2650000-7f0cd2653000 r--s 00010000 08:06 4458088 /home/elma/.m2/repository/org/hibernate/common/hibernate-commons-annotations/5.0.1.Final/hibernate-commons-annotations-5.0.1.Final.jar
+7f0cd2653000-7f0cd2658000 r--s 00016000 08:06 4458087 /home/elma/.m2/repository/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar
+7f0cd2658000-7f0cd265d000 r--s 00048000 08:06 4458084 /home/elma/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar
+7f0cd265d000-7f0cd265f000 r--s 0000e000 08:06 4458083 /home/elma/.m2/repository/com/fasterxml/classmate/1.3.0/classmate-1.3.0.jar
+7f0cd265f000-7f0cd2662000 r--s 0002b000 08:06 4458077 /home/elma/.m2/repository/org/jboss/jandex/2.0.3.Final/jandex-2.0.3.Final.jar
+7f0cd2662000-7f0cd2667000 r--s 00068000 08:06 4458075 /home/elma/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar
+7f0cd2667000-7f0cd26d3000 r--s 0050e000 08:06 4458064 /home/elma/.m2/repository/org/hibernate/hibernate-core/5.1.11.Final/hibernate-core-5.1.11.Final.jar
+7f0cd26d3000-7f0cd26d5000 r--s 0000f000 08:06 4458071 /home/elma/.m2/repository/org/jboss/logging/jboss-logging/3.3.0.Final/jboss-logging-3.3.0.Final.jar
+7f0cd26d5000-7f0cd26e1000 r--s 00083000 08:06 4458066 /home/elma/.m2/repository/org/hibernate/hibernate-entitymanager/5.1.11.Final/hibernate-entitymanager-5.1.11.Final.jar
+7f0cd26e1000-7f0cd26f3000 r--s 001d5000 08:06 4458069 /home/elma/.m2/repository/com/unboundid/unboundid-ldapsdk/3.2.1/unboundid-ldapsdk-3.2.1.jar
+7f0cd26f3000-7f0cd26fc000 r--s 0005e000 08:06 4458062 /home/elma/.m2/repository/com/novell/ldap/jldap/4.3/jldap-4.3.jar
+7f0cd26fc000-7f0cd27d3000 r--s 007aa000 08:06 5117944 /home/elma/.m2/repository/net/sf/ehcache/ehcache/2.10.1/ehcache-2.10.1.jar
+7f0cd27d3000-7f0cd27d6000 r--s 00020000 08:06 5117943 /home/elma/.m2/repository/org/hibernate/hibernate-ehcache/5.1.11.Final/hibernate-ehcache-5.1.11.Final.jar
+7f0cd27d6000-7f0cd27da000 r--s 00031000 08:06 5117940 /home/elma/.m2/repository/commons-io/commons-io/2.6/commons-io-2.6.jar
+7f0cd27da000-7f0cd27e1000 r--s 00049000 08:06 5117938 /home/elma/.m2/repository/org/apache/httpcomponents/httpcore/4.4.7/httpcore-4.4.7.jar
+7f0cd27e1000-7f0cd27ee000 r--s 000b2000 08:06 4719602 /home/elma/.m2/repository/org/apache/httpcomponents/httpclient/4.5.4/httpclient-4.5.4.jar
+7f0cd27ee000-7f0cd27ef000 r--s 0000a000 08:06 4719598 /home/elma/.m2/repository/asm/asm/3.3.1/asm-3.3.1.jar
+7f0cd27ef000-7f0cd27f0000 r--s 0000c000 08:06 4719596 /home/elma/.m2/repository/org/eclipse/jetty/jetty-xml/9.4.8.v20171121/jetty-xml-9.4.8.v20171121.jar
+7f0cd27f0000-7f0cd27f3000 r--s 0001d000 08:06 4719595 /home/elma/.m2/repository/org/eclipse/jetty/jetty-webapp/9.4.8.v20171121/jetty-webapp-9.4.8.v20171121.jar
+7f0cd27f3000-7f0cd27f5000 r--s 00015000 08:06 4719594 /home/elma/.m2/repository/org/eclipse/jetty/jetty-security/9.4.8.v20171121/jetty-security-9.4.8.v20171121.jar
+7f0cd27f5000-7f0cd27f7000 r--s 00019000 08:06 4719427 /home/elma/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.8.v20171121/jetty-servlet-9.4.8.v20171121.jar
+7f0cd27f7000-7f0cd27fa000 r--s 0001d000 08:06 4719425 /home/elma/.m2/repository/org/eclipse/jetty/jetty-io/9.4.8.v20171121/jetty-io-9.4.8.v20171121.jar
+7f0cd27fa000-7f0cd2802000 r--s 0006e000 08:06 4719423 /home/elma/.m2/repository/org/eclipse/jetty/jetty-util/9.4.8.v20171121/jetty-util-9.4.8.v20171121.jar
+7f0cd2802000-7f0cd2805000 r--s 00026000 08:06 4719422 /home/elma/.m2/repository/org/eclipse/jetty/jetty-http/9.4.8.v20171121/jetty-http-9.4.8.v20171121.jar
+7f0cd2805000-7f0cd280d000 r--s 00087000 08:06 4719419 /home/elma/.m2/repository/org/eclipse/jetty/jetty-server/9.4.8.v20171121/jetty-server-9.4.8.v20171121.jar
+7f0cd280d000-7f0cd281a000 r--s 00083000 08:06 4719417 /home/elma/.m2/repository/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
+7f0cd281a000-7f0cd2833000 r--s 001bf000 08:06 4719409 /home/elma/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar
+7f0cd2833000-7f0cd2836000 r--s 00008000 08:06 4719408 /home/elma/.m2/repository/org/springframework/spring-aspects/5.0.3.RELEASE/spring-aspects-5.0.3.RELEASE.jar
+7f0cd2836000-7f0cd2840000 r--s 0004f000 08:06 4719406 /home/elma/.m2/repository/org/springframework/spring-aop/5.0.3.RELEASE/spring-aop-5.0.3.RELEASE.jar
+7f0cd2840000-7f0cd284e000 r--s 00083000 08:06 4719392 /home/elma/.m2/repository/org/springframework/spring-test/5.0.3.RELEASE/spring-test-5.0.3.RELEASE.jar
+7f0cd284e000-7f0cd2852000 r--s 00026000 08:06 4719401 /home/elma/.m2/repository/org/springframework/spring-context-support/5.0.3.RELEASE/spring-context-support-5.0.3.RELEASE.jar
+7f0cd2852000-7f0cd286c000 r--s 000ed000 08:06 4719397 /home/elma/.m2/repository/org/springframework/spring-context/5.0.3.RELEASE/spring-context-5.0.3.RELEASE.jar
+7f0cd286c000-7f0cd2870000 r--s 0002a000 08:06 4719395 /home/elma/.m2/repository/org/springframework/spring-orm/5.0.3.RELEASE/spring-orm-5.0.3.RELEASE.jar
+7f0cd2870000-7f0cd2871000 r--s 0000c000 08:06 4719393 /home/elma/.m2/repository/org/springframework/spring-asm/3.1.4.RELEASE/spring-asm-3.1.4.RELEASE.jar
+7f0cd2871000-7f0cd288b000 r--s 00116000 08:06 4719391 /home/elma/.m2/repository/org/springframework/spring-web/5.0.3.RELEASE/spring-web-5.0.3.RELEASE.jar
+7f0cd288b000-7f0cd288c000 r--s 00003000 08:06 4458175 /home/elma/.m2/repository/org/springframework/spring-jcl/5.0.3.RELEASE/spring-jcl-5.0.3.RELEASE.jar
+7f0cd288c000-7f0cd28a4000 r--s 00111000 08:06 4458173 /home/elma/.m2/repository/org/springframework/spring-core/5.0.3.RELEASE/spring-core-5.0.3.RELEASE.jar
+7f0cd28a4000-7f0cd28a8000 r--s 0000f000 08:06 4719385 /home/elma/.m2/repository/com/google/code/findbugs/annotations/2.0.1/annotations-2.0.1.jar
+7f0cd28a8000-7f0cd28ab000 r--s 0001d000 08:06 4719388 /home/elma/.m2/repository/org/reflections/reflections/0.9.10/reflections-0.9.10.jar
+7f0cd28ab000-7f0cd28ac000 r--s 0000c000 08:06 5247086 /home/elma/.m2/repository/commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.jar
+7f0cd28ac000-7f0cd28ae000 r--s 00007000 08:06 5247058 /home/elma/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.9.1/jackson-module-jaxb-annotations-2.9.1.jar
+7f0cd28ae000-7f0cd28af000 r--s 00007000 08:06 5247050 /home/elma/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.9.1/jackson-jaxrs-base-2.9.1.jar
+7f0cd28af000-7f0cd28b0000 r--s 00003000 08:06 5247049 /home/elma/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.9.1/jackson-jaxrs-json-provider-2.9.1.jar
+7f0cd28b0000-7f0cd28b4000 r--s 00019000 08:06 5247036 /home/elma/.m2/repository/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1.jar
+7f0cd28b4000-7f0cd28b8000 r--s 0000c000 08:06 5247021 /home/elma/.m2/repository/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar
+7f0cd28b8000-7f0cd28bc000 r--s 00022000 08:06 5246359 /home/elma/.m2/repository/org/glassfish/jersey/core/jersey-client/2.15/jersey-client-2.15.jar
+7f0cd28bc000-7f0cd28d1000 r--s 000ce000 08:06 5246346 /home/elma/.m2/repository/org/glassfish/jersey/core/jersey-server/2.15/jersey-server-2.15.jar
+7f0cd28d1000-7f0cd28d2000 r--s 00004000 08:06 5246343 /home/elma/.m2/repository/org/glassfish/hk2/osgi-resource-locator/1.0.1/osgi-resource-locator-1.0.1.jar
+7f0cd28d2000-7f0cd28d5000 r--s 00027000 08:06 5245839 /home/elma/.m2/repository/org/glassfish/hk2/hk2-locator/2.4.0-b06/hk2-locator-2.4.0-b06.jar
+7f0cd28d5000-7f0cd28d7000 r--s 00002000 08:06 5245836 /home/elma/.m2/repository/org/glassfish/hk2/external/aopalliance-repackaged/2.4.0-b06/aopalliance-repackaged-2.4.0-b06.jar
+7f0cd28d7000-7f0cd28da000 r--s 00013000 08:06 5245830 /home/elma/.m2/repository/org/glassfish/hk2/hk2-utils/2.4.0-b06/hk2-utils-2.4.0-b06.jar
+7f0cd28da000-7f0cd28df000 r--s 00026000 08:06 5245817 /home/elma/.m2/repository/org/glassfish/hk2/hk2-api/2.4.0-b06/hk2-api-2.4.0-b06.jar
+7f0cd28df000-7f0cd28f6000 r--s 000d4000 08:06 5245804 /home/elma/.m2/repository/org/glassfish/jersey/bundles/repackaged/jersey-guava/2.15/jersey-guava-2.15.jar
+7f0cd28f6000-7f0cd28f8000 r--s 00005000 08:06 5245802 /home/elma/.m2/repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar
+7f0cd28f8000-7f0cd2907000 r--s 000a3000 08:06 5245795 /home/elma/.m2/repository/org/glassfish/jersey/core/jersey-common/2.15/jersey-common-2.15.jar
+7f0cd2907000-7f0cd2918000 r--s 000c6000 08:06 5245776 /home/elma/.m2/repository/org/glassfish/grizzly/grizzly-framework/2.3.16/grizzly-framework-2.3.16.jar
+7f0cd2918000-7f0cd291d000 r--s 0004c000 08:06 5245775 /home/elma/.m2/repository/org/glassfish/grizzly/grizzly-http/2.3.16/grizzly-http-2.3.16.jar
+7f0cd291d000-7f0cd2923000 r--s 0003f000 08:06 5245758 /home/elma/.m2/repository/org/glassfish/grizzly/grizzly-http-server/2.3.16/grizzly-http-server-2.3.16.jar
+7f0cd2923000-7f0cd2924000 r--s 00001000 08:06 5245754 /home/elma/.m2/repository/org/glassfish/hk2/external/javax.inject/2.4.0-b06/javax.inject-2.4.0-b06.jar
+7f0cd2924000-7f0cd2926000 r--s 00005000 08:06 5118143 /home/elma/.m2/repository/org/glassfish/jersey/containers/jersey-container-grizzly2-http/2.15/jersey-container-grizzly2-http-2.15.jar
+7f0cd2926000-7f0cd2928000 r--s 00001000 08:06 5118141 /home/elma/.m2/repository/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0.jar
+7f0cd2928000-7f0cd2938000 r--s 00167000 08:06 5118139 /home/elma/.m2/repository/org/apache/lucene/lucene-analyzers-common/5.0.0/lucene-analyzers-common-5.0.0.jar
+7f0cd2938000-7f0cd293b000 r--s 00019000 08:06 5118138 /home/elma/.m2/repository/org/apache/lucene/lucene-sandbox/5.0.0/lucene-sandbox-5.0.0.jar
+7f0cd293b000-7f0cd2941000 r--s 0002c000 08:06 5118135 /home/elma/.m2/repository/org/apache/lucene/lucene-queries/5.0.0/lucene-queries-5.0.0.jar
+7f0cd2941000-7f0cd294a000 r--s 00057000 08:06 5118133 /home/elma/.m2/repository/org/apache/lucene/lucene-queryparser/5.0.0/lucene-queryparser-5.0.0.jar
+7f0cd294a000-7f0cd296e000 r--s 001fd000 08:06 5118131 /home/elma/.m2/repository/org/apache/lucene/lucene-core/5.0.0/lucene-core-5.0.0.jar
+7f0cd296e000-7f0cd2979000 r--s 0008b000 08:06 5118130 /home/elma/.m2/repository/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar
+7f0cd2979000-7f0cd297b000 r--s 00000000 08:06 5118126 /home/elma/.m2/repository/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar
+7f0cd297b000-7f0cd297c000 r--s 00005000 08:06 5118119 /home/elma/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.10.0/log4j-slf4j-impl-2.10.0.jar
+7f0cd297c000-7f0cd299d000 r--s 00166000 08:06 5118117 /home/elma/.m2/repository/org/apache/logging/log4j/log4j-core/2.10.0/log4j-core-2.10.0.jar
+7f0cd299d000-7f0cd29a3000 r--s 00039000 08:06 5118115 /home/elma/.m2/repository/org/apache/logging/log4j/log4j-api/2.10.0/log4j-api-2.10.0.jar
+7f0cd29a3000-7f0cd29a5000 r--s 0000b000 08:06 4719383 /home/elma/.m2/repository/net/minidev/json-smart/1.1.1/json-smart-1.1.1.jar
+7f0cd29a5000-7f0cd29a6000 r--s 00000000 08:06 4719381 /home/elma/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar
+7f0cd29a6000-7f0cd29ad000 r--s 00039000 08:06 4719379 /home/elma/.m2/repository/commons-codec/commons-codec/1.7/commons-codec-1.7.jar
+7f0cd29ad000-7f0cd29d5000 r--s 001a3000 08:06 4719378 /home/elma/.m2/repository/org/bouncycastle/bcprov-jdk16/1.46/bcprov-jdk16-1.46.jar
+7f0cd29d5000-7f0cd29d8000 r--s 00012000 08:06 4719375 /home/elma/.m2/repository/com/nimbusds/nimbus-jose-jwt/2.10.1/nimbus-jose-jwt-2.10.1.jar
+7f0cd29d8000-7f0cd29d9000 r--s 00004000 08:06 4719374 /home/elma/.m2/repository/org/mindrot/jbcrypt/0.4/jbcrypt-0.4.jar
+7f0cd29d9000-7f0cd29dd000 r--s 0002a000 08:06 4719364 /home/elma/.m2/repository/commons-validator/commons-validator/1.6/commons-validator-1.6.jar
+7f0cd29dd000-7f0cd29e0000 r--s 0001d000 08:06 4719362 /home/elma/.m2/repository/org/apache/commons/commons-pool2/2.5.0/commons-pool2-2.5.0.jar
+7f0cd29e0000-7f0cd29e3000 r--s 0002b000 08:06 4719360 /home/elma/.m2/repository/org/apache/commons/commons-dbcp2/2.2.0/commons-dbcp2-2.2.0.jar
+7f0cd29e3000-7f0cd29e8000 r--s 00659000 08:06 4719358 /home/elma/.m2/repository/org/xerial/sqlite-jdbc/3.21.0/sqlite-jdbc-3.21.0.jar
+7f0cd29e8000-7f0cd29ec000 r--s 00024000 08:06 5508303 /home/elma/.m2/repository/org/codehaus/woodstox/stax2-api/3.1.4/stax2-api-3.1.4.jar
+7f0cd29ec000-7f0cd29f1000 r--s 00073000 08:06 5508301 /home/elma/.m2/repository/org/codehaus/woodstox/woodstox-core-lgpl/4.4.1/woodstox-core-lgpl-4.4.1.jar
+7f0cd29f1000-7f0cd29f3000 r--s 0000f000 08:06 5508271 /home/elma/.m2/repository/eu/clarin/sru/fcs/fcs-ql/0.1/fcs-ql-0.1.jar
+7f0cd29f3000-7f0cd29f5000 r--s 00017000 08:06 5508269 /home/elma/.m2/repository/eu/clarin/sru/sru-server/1.8.0/sru-server-1.8.0.jar
+7f0cd29f5000-7f0cd29f9000 r--s 0001e000 08:06 5508258 /home/elma/.m2/repository/eu/clarin/sru/fcs/fcs-simple-endpoint/1.3.0/fcs-simple-endpoint-1.3.0.jar
+7f0cd29f9000-7f0cd2a01000 r--s 00066000 08:06 4719619 /home/elma/.m2/repository/log4j/apache-log4j-extras/1.2.17/apache-log4j-extras-1.2.17.jar
+7f0cd2a01000-7f0cd2a03000 r--s 00008000 08:06 5508241 /home/elma/.m2/repository/org/z3950/zing/cql-java/1.12/cql-java-1.12.jar
+7f0cd2a03000-7f0cd2a08000 r--s 00041000 08:06 5118220 /home/elma/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
+7f0cd2a08000-7f0cd2a1a000 r--s 00133000 08:06 5247059 /home/elma/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.1/jackson-databind-2.9.1.jar
+7f0cd2a1a000-7f0cd2a1d000 r--s 0000e000 08:06 5247064 /home/elma/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.1/jackson-annotations-2.9.1.jar
+7f0cd2a1d000-7f0cd2a21000 r--s 0004b000 08:06 5247065 /home/elma/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.9.1/jackson-core-2.9.1.jar
+7f0cd2a21000-7f0cd2a4b000 r--s 001e9000 08:06 4719389 /home/elma/.m2/repository/com/google/guava/guava/15.0/guava-15.0.jar
+7f0cd2a4b000-7f0cd2a4e000 r--s 00022000 08:06 5508294 /home/elma/.m2/repository/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar
+7f0cd2a4e000-7f0cd2a51000 r--s 00026000 08:06 5508279 /home/elma/.m2/repository/org/antlr/antlr-runtime/3.5/antlr-runtime-3.5.jar
+7f0cd2a51000-7f0cd2a55000 r--s 00036000 08:06 5508277 /home/elma/.m2/repository/org/antlr/ST4/4.0.7/ST4-4.0.7.jar
+7f0cd2a55000-7f0cd2a56000 r--s 00002000 08:06 5508275 /home/elma/.m2/repository/org/antlr/antlr4-annotations/4.2/antlr4-annotations-4.2.jar
+7f0cd2a56000-7f0cd2a60000 r--s 0008c000 08:06 5508273 /home/elma/.m2/repository/org/antlr/antlr4/4.2/antlr4-4.2.jar
+7f0cd2a60000-7f0cd2a62000 r--s 00001000 08:06 5382084 /home/elma/.m2/repository/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar
+7f0cd2a62000-7f0cd2a64000 r--s 00005000 08:06 5382060 /home/elma/.m2/repository/org/codehaus/plexus/plexus-compiler-api/2.2/plexus-compiler-api-2.2.jar
+7f0cd2a64000-7f0cd2a66000 r--s 00008000 08:06 5245505 /home/elma/.m2/repository/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar
+7f0cd2a66000-7f0cd2a6d000 r--s 00029000 08:06 5245472 /home/elma/.m2/repository/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.jar
+7f0cd2a6d000-7f0cd2a71000 r--s 00034000 08:06 5247246 /home/elma/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar
+7f0cd2a71000-7f0cd2a73000 r--s 0000b000 08:06 5382080 /home/elma/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.11/plexus-interpolation-1.11.jar
+7f0cd2a73000-7f0cd2a75000 r--s 00006000 08:06 5382078 /home/elma/.m2/repository/org/apache/maven/maven-plugin-registry/2.2.1/maven-plugin-registry-2.2.1.jar
+7f0cd2a75000-7f0cd2a7d000 r--s 00049000 08:06 5382077 /home/elma/.m2/repository/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar
+7f0cd2a7d000-7f0cd2a7f000 r--s 0000b000 08:06 5382076 /home/elma/.m2/repository/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.jar
+7f0cd2a7f000-7f0cd2a81000 r--s 00005000 08:06 5382061 /home/elma/.m2/repository/org/apache/maven/maven-repository-metadata/2.2.1/maven-repository-metadata-2.2.1.jar
+7f0cd2a81000-7f0cd2a83000 r--s 0000f000 08:06 5382059 /home/elma/.m2/repository/org/apache/maven/maven-artifact-manager/2.2.1/maven-artifact-manager-2.2.1.jar
+7f0cd2a83000-7f0cd2a85000 r--s 00007000 08:06 5382049 /home/elma/.m2/repository/org/apache/maven/maven-profile/2.2.1/maven-profile-2.2.1.jar
+7f0cd2a85000-7f0cd2a86000 r--s 0000b000 08:06 5247261 /home/elma/.m2/repository/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.jar
+7f0cd2a86000-7f0cd2a8a000 r--s 00023000 08:06 5247259 /home/elma/.m2/repository/org/apache/maven/maven-project/2.2.1/maven-project-2.2.1.jar
+7f0cd2a8a000-7f0cd2a8c000 r--s 00003000 08:06 5770228 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-plexus-lifecycles/2.3.0/guice-plexus-lifecycles-2.3.0.jar
+7f0cd2a8c000-7f0cd2a8e000 r--s 00003000 08:06 5770225 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-plexus-scanners/2.3.0/guice-plexus-scanners-2.3.0.jar
+7f0cd2a8e000-7f0cd2a90000 r--s 00005000 08:06 5770222 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-plexus-binders/2.3.0/guice-plexus-binders-2.3.0.jar
+7f0cd2a90000-7f0cd2a92000 r--s 00002000 08:06 5770220 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-plexus-locators/2.3.0/guice-plexus-locators-2.3.0.jar
+7f0cd2a92000-7f0cd2a94000 r--s 00001000 08:06 5770218 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-plexus-converters/2.3.0/guice-plexus-converters-2.3.0.jar
+7f0cd2a94000-7f0cd2a96000 r--s 00002000 08:06 5770216 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-plexus-metadata/2.3.0/guice-plexus-metadata-2.3.0.jar
+7f0cd2a96000-7f0cd2a98000 r--s 00000000 08:06 5770214 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-bean-converters/2.3.0/guice-bean-converters-2.3.0.jar
+7f0cd2a98000-7f0cd2a9a000 r--s 00013000 08:06 5770212 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-bean-scanners/2.3.0/guice-bean-scanners-2.3.0.jar
+7f0cd2a9a000-7f0cd2a9b000 r--s 00001000 08:06 5380525 /home/elma/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar
+7f0cd2a9b000-7f0cd2a9e000 r--s 00008000 08:06 5380199 /home/elma/.m2/repository/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar
+7f0cd2a9e000-7f0cd2aa0000 r--s 00009000 08:06 5770210 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-bean-binders/2.3.0/guice-bean-binders-2.3.0.jar
+7f0cd2aa0000-7f0cd2aa3000 r--s 0000b000 08:06 5770208 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-bean-locators/2.3.0/guice-bean-locators-2.3.0.jar
+7f0cd2aa3000-7f0cd2aa5000 r--s 0000e000 08:06 5770204 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-bean-reflect/2.3.0/guice-bean-reflect-2.3.0.jar
+7f0cd2aa5000-7f0cd2ab1000 r--s 00083000 08:06 5247279 /home/elma/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0.jar
+7f0cd2ab1000-7f0cd2ab2000 r--s 00000000 08:06 5247277 /home/elma/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar
+7f0cd2ab2000-7f0cd2ab7000 r--s 00019000 08:06 5770198 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-plexus-shim/2.3.0/guice-plexus-shim-2.3.0.jar
+7f0cd2ab7000-7f0cd2ab9000 r--s 00004000 08:06 5770188 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-bean-containers/2.3.0/guice-bean-containers-2.3.0.jar
+7f0cd2ab9000-7f0cd2ad8000 r--s 00152000 08:06 5247258 /home/elma/.m2/repository/org/sonatype/sisu/sisu-guava/0.9.9/sisu-guava-0.9.9.jar
+7f0cd2ad8000-7f0cd2ae0000 r--s 00050000 08:06 5247257 /home/elma/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0-no_aop.jar
+7f0cd2ae0000-7f0cd2ae7000 r--s 00040000 08:06 5247256 /home/elma/.m2/repository/org/sonatype/sisu/sisu-inject-bean/2.3.0/sisu-inject-bean-2.3.0.jar
+7f0cd2ae7000-7f0cd2ae9000 r--s 0000a000 08:06 5247251 /home/elma/.m2/repository/org/codehaus/plexus/plexus-classworlds/2.4/plexus-classworlds-2.4.jar
+7f0cd2ae9000-7f0cd2aea000 ---p 00000000 00:00 0
+7f0cd2aea000-7f0cd2bea000 rw-p 00000000 00:00 0
+7f0cd2bea000-7f0cd2bed000 ---p 00000000 00:00 0
+7f0cd2bed000-7f0cd2ceb000 rw-p 00000000 00:00 0
+7f0cd2ceb000-7f0cd2cee000 ---p 00000000 00:00 0
+7f0cd2cee000-7f0cd2dec000 rw-p 00000000 00:00 0
+7f0cd2dec000-7f0cd2def000 ---p 00000000 00:00 0
+7f0cd2def000-7f0cd2eed000 rw-p 00000000 00:00 0
+7f0cd2eed000-7f0cd2ef0000 ---p 00000000 00:00 0
+7f0cd2ef0000-7f0cd2fee000 rw-p 00000000 00:00 0
+7f0cd2fee000-7f0cd2ff1000 ---p 00000000 00:00 0
+7f0cd2ff1000-7f0cd30ef000 rw-p 00000000 00:00 0
+7f0cd30ef000-7f0cd30f2000 ---p 00000000 00:00 0
+7f0cd30f2000-7f0cd31f0000 rw-p 00000000 00:00 0
+7f0cd31f0000-7f0cd31f3000 ---p 00000000 00:00 0
+7f0cd31f3000-7f0cd32f1000 rw-p 00000000 00:00 0
+7f0cd32f1000-7f0cd32f5000 r-xp 00000000 08:06 9177002 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libdt_socket.so
+7f0cd32f5000-7f0cd34f4000 ---p 00004000 08:06 9177002 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libdt_socket.so
+7f0cd34f4000-7f0cd34f5000 rw-p 00003000 08:06 9177002 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libdt_socket.so
+7f0cd34f5000-7f0cd34f8000 ---p 00000000 00:00 0
+7f0cd34f8000-7f0cd35f6000 rw-p 00000000 00:00 0
+7f0cd35f6000-7f0cd35f9000 ---p 00000000 00:00 0
+7f0cd35f9000-7f0cd36f7000 rw-p 00000000 00:00 0
+7f0cd36f7000-7f0cd36fa000 ---p 00000000 00:00 0
+7f0cd36fa000-7f0cd37f8000 rw-p 00000000 00:00 0
+7f0cd37f8000-7f0cd37f9000 ---p 00000000 00:00 0
+7f0cd37f9000-7f0cd4000000 rw-p 00000000 00:00 0
+7f0cd4000000-7f0cd4021000 rw-p 00000000 00:00 0
+7f0cd4021000-7f0cd8000000 ---p 00000000 00:00 0
+7f0cd8000000-7f0cd8021000 rw-p 00000000 00:00 0
+7f0cd8021000-7f0cdc000000 ---p 00000000 00:00 0
+7f0cdc000000-7f0cdc021000 rw-p 00000000 00:00 0
+7f0cdc021000-7f0ce0000000 ---p 00000000 00:00 0
+7f0ce0000000-7f0ce0001000 r--s 00001000 08:06 5770193 /home/elma/.m2/repository/org/sonatype/sisu/inject/guice-bean-inject/2.3.0/guice-bean-inject-2.3.0.jar
+7f0ce0001000-7f0ce0003000 r--s 00000000 08:06 5247250 /home/elma/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
+7f0ce0003000-7f0ce0009000 r--s 0002c000 08:06 5247247 /home/elma/.m2/repository/org/sonatype/sisu/sisu-inject-plexus/2.3.0/sisu-inject-plexus-2.3.0.jar
+7f0ce0009000-7f0ce000b000 r--s 0000b000 08:06 5247245 /home/elma/.m2/repository/org/apache/maven/maven-artifact/3.0.5/maven-artifact-3.0.5.jar
+7f0ce000b000-7f0ce001c000 r--s 0008a000 08:06 4719356 /home/elma/.m2/repository/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar
+7f0ce001c000-7f0ce0031000 r--s 00161000 08:06 4719355 /home/elma/.m2/repository/org/projectlombok/lombok/1.16.20/lombok-1.16.20.jar
+7f0ce0031000-7f0ce0054000 r--s 0016b000 08:06 4719343 /home/elma/.m2/repository/com/sun/jersey/jersey-bundle/1.19.4/jersey-bundle-1.19.4.jar
+7f0ce0054000-7f0ce1000000 rw-p 00000000 00:00 0
+7f0ce1000000-7f0ce2070000 rwxp 00000000 00:00 0
+7f0ce2070000-7f0cf0000000 ---p 00000000 00:00 0
+7f0cf0000000-7f0cf2f05000 rw-p 00000000 00:00 0
+7f0cf2f05000-7f0cf4000000 ---p 00000000 00:00 0
+7f0cf4000000-7f0cf4002000 r--s 00026000 08:06 5247242 /home/elma/.m2/repository/org/apache/maven/maven-model/3.0.5/maven-model-3.0.5.jar
+7f0cf4002000-7f0cf4004000 r--s 0000b000 08:06 5247243 /home/elma/.m2/repository/org/apache/maven/maven-plugin-api/3.0.5/maven-plugin-api-3.0.5.jar
+7f0cf4004000-7f0cf400a000 r--s 00044000 08:06 5247239 /home/elma/.m2/repository/org/antlr/antlr4-runtime/4.5.1/antlr4-runtime-4.5.1.jar
+7f0cf400a000-7f0cf400c000 r--s 00009000 08:06 4719352 /home/elma/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
+7f0cf400c000-7f0cf4015000 r--s 0006f000 08:06 4719346 /home/elma/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar
+7f0cf4015000-7f0cf4165000 rw-p 00000000 00:00 0
+7f0cf4165000-7f0cf433e000 r--s 03d2c000 08:06 7223520 /usr/local/java/jdk1.8.0_112/jre/lib/rt.jar
+7f0cf433e000-7f0cf4b7a000 rw-p 00000000 00:00 0
+7f0cf4b7a000-7f0cf4b7b000 ---p 00000000 00:00 0
+7f0cf4b7b000-7f0cf4c7b000 rw-p 00000000 00:00 0
+7f0cf4c7b000-7f0cf4c7c000 ---p 00000000 00:00 0
+7f0cf4c7c000-7f0cf4d7c000 rw-p 00000000 00:00 0
+7f0cf4d7c000-7f0cf4d7d000 ---p 00000000 00:00 0
+7f0cf4d7d000-7f0cf4e7d000 rw-p 00000000 00:00 0
+7f0cf4e7d000-7f0cf4e7e000 ---p 00000000 00:00 0
+7f0cf4e7e000-7f0cf4fc3000 rw-p 00000000 00:00 0
+7f0cf4fc3000-7f0cf54ad000 ---p 00000000 00:00 0
+7f0cf54ad000-7f0cf54f2000 rw-p 00000000 00:00 0
+7f0cf54f2000-7f0cf59db000 ---p 00000000 00:00 0
+7f0cf59db000-7f0cf5a8b000 rw-p 00000000 00:00 0
+7f0cf5a8b000-7f0cf5c73000 ---p 00000000 00:00 0
+7f0cf5c73000-7f0cf5cb6000 rw-p 00000000 00:00 0
+7f0cf5cb6000-7f0cf6034000 ---p 00000000 00:00 0
+7f0cf6034000-7f0cf604e000 r-xp 00000000 08:06 9176984 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libzip.so
+7f0cf604e000-7f0cf624e000 ---p 0001a000 08:06 9176984 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libzip.so
+7f0cf624e000-7f0cf624f000 rw-p 0001a000 08:06 9176984 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libzip.so
+7f0cf624f000-7f0cf625a000 r-xp 00000000 08:06 3539147 /lib/x86_64-linux-gnu/libnss_files-2.23.so
+7f0cf625a000-7f0cf6459000 ---p 0000b000 08:06 3539147 /lib/x86_64-linux-gnu/libnss_files-2.23.so
+7f0cf6459000-7f0cf645a000 r--p 0000a000 08:06 3539147 /lib/x86_64-linux-gnu/libnss_files-2.23.so
+7f0cf645a000-7f0cf645b000 rw-p 0000b000 08:06 3539147 /lib/x86_64-linux-gnu/libnss_files-2.23.so
+7f0cf645b000-7f0cf6461000 rw-p 00000000 00:00 0
+7f0cf6461000-7f0cf646c000 r-xp 00000000 08:06 3539155 /lib/x86_64-linux-gnu/libnss_nis-2.23.so
+7f0cf646c000-7f0cf666b000 ---p 0000b000 08:06 3539155 /lib/x86_64-linux-gnu/libnss_nis-2.23.so
+7f0cf666b000-7f0cf666c000 r--p 0000a000 08:06 3539155 /lib/x86_64-linux-gnu/libnss_nis-2.23.so
+7f0cf666c000-7f0cf666d000 rw-p 0000b000 08:06 3539155 /lib/x86_64-linux-gnu/libnss_nis-2.23.so
+7f0cf666d000-7f0cf6683000 r-xp 00000000 08:06 3539039 /lib/x86_64-linux-gnu/libnsl-2.23.so
+7f0cf6683000-7f0cf6882000 ---p 00016000 08:06 3539039 /lib/x86_64-linux-gnu/libnsl-2.23.so
+7f0cf6882000-7f0cf6883000 r--p 00015000 08:06 3539039 /lib/x86_64-linux-gnu/libnsl-2.23.so
+7f0cf6883000-7f0cf6884000 rw-p 00016000 08:06 3539039 /lib/x86_64-linux-gnu/libnsl-2.23.so
+7f0cf6884000-7f0cf6886000 rw-p 00000000 00:00 0
+7f0cf6886000-7f0cf688e000 r-xp 00000000 08:06 3539138 /lib/x86_64-linux-gnu/libnss_compat-2.23.so
+7f0cf688e000-7f0cf6a8d000 ---p 00008000 08:06 3539138 /lib/x86_64-linux-gnu/libnss_compat-2.23.so
+7f0cf6a8d000-7f0cf6a8e000 r--p 00007000 08:06 3539138 /lib/x86_64-linux-gnu/libnss_compat-2.23.so
+7f0cf6a8e000-7f0cf6a8f000 rw-p 00008000 08:06 3539138 /lib/x86_64-linux-gnu/libnss_compat-2.23.so
+7f0cf6a8f000-7f0cf6ee5000 r--p 00000000 08:06 5899730 /usr/lib/locale/locale-archive
+7f0cf6ee5000-7f0cf6ee7000 r-xp 00000000 08:06 9176992 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnpt.so
+7f0cf6ee7000-7f0cf70e7000 ---p 00002000 08:06 9176992 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnpt.so
+7f0cf70e7000-7f0cf70e8000 rw-p 00002000 08:06 9176992 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libnpt.so
+7f0cf70e8000-7f0cf7121000 r-xp 00000000 08:06 9176958 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libjdwp.so
+7f0cf7121000-7f0cf7321000 ---p 00039000 08:06 9176958 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libjdwp.so
+7f0cf7321000-7f0cf7322000 rw-p 00039000 08:06 9176958 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libjdwp.so
+7f0cf7322000-7f0cf7323000 rw-p 00000000 00:00 0
+7f0cf7323000-7f0cf734e000 r-xp 00000000 08:06 9177011 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libjava.so
+7f0cf734e000-7f0cf754d000 ---p 0002b000 08:06 9177011 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libjava.so
+7f0cf754d000-7f0cf754f000 rw-p 0002a000 08:06 9177011 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libjava.so
+7f0cf754f000-7f0cf755c000 r-xp 00000000 08:06 9176962 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libverify.so
+7f0cf755c000-7f0cf775b000 ---p 0000d000 08:06 9176962 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libverify.so
+7f0cf775b000-7f0cf775d000 rw-p 0000c000 08:06 9176962 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/libverify.so
+7f0cf775d000-7f0cf7764000 r-xp 00000000 08:06 3539159 /lib/x86_64-linux-gnu/librt-2.23.so
+7f0cf7764000-7f0cf7963000 ---p 00007000 08:06 3539159 /lib/x86_64-linux-gnu/librt-2.23.so
+7f0cf7963000-7f0cf7964000 r--p 00006000 08:06 3539159 /lib/x86_64-linux-gnu/librt-2.23.so
+7f0cf7964000-7f0cf7965000 rw-p 00007000 08:06 3539159 /lib/x86_64-linux-gnu/librt-2.23.so
+7f0cf7965000-7f0cf7a6d000 r-xp 00000000 08:06 3538973 /lib/x86_64-linux-gnu/libm-2.23.so
+7f0cf7a6d000-7f0cf7c6c000 ---p 00108000 08:06 3538973 /lib/x86_64-linux-gnu/libm-2.23.so
+7f0cf7c6c000-7f0cf7c6d000 r--p 00107000 08:06 3538973 /lib/x86_64-linux-gnu/libm-2.23.so
+7f0cf7c6d000-7f0cf7c6e000 rw-p 00108000 08:06 3538973 /lib/x86_64-linux-gnu/libm-2.23.so
+7f0cf7c6e000-7f0cf893c000 r-xp 00000000 08:06 9177015 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so
+7f0cf893c000-7f0cf8b3c000 ---p 00cce000 08:06 9177015 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so
+7f0cf8b3c000-7f0cf8c15000 rw-p 00cce000 08:06 9177015 /usr/local/java/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so
+7f0cf8c15000-7f0cf8c60000 rw-p 00000000 00:00 0
+7f0cf8c60000-7f0cf8e20000 r-xp 00000000 08:06 3539120 /lib/x86_64-linux-gnu/libc-2.23.so
+7f0cf8e20000-7f0cf9020000 ---p 001c0000 08:06 3539120 /lib/x86_64-linux-gnu/libc-2.23.so
+7f0cf9020000-7f0cf9024000 r--p 001c0000 08:06 3539120 /lib/x86_64-linux-gnu/libc-2.23.so
+7f0cf9024000-7f0cf9026000 rw-p 001c4000 08:06 3539120 /lib/x86_64-linux-gnu/libc-2.23.so
+7f0cf9026000-7f0cf902a000 rw-p 00000000 00:00 0
+7f0cf902a000-7f0cf902d000 r-xp 00000000 08:06 3539125 /lib/x86_64-linux-gnu/libdl-2.23.so
+7f0cf902d000-7f0cf922c000 ---p 00003000 08:06 3539125 /lib/x86_64-linux-gnu/libdl-2.23.so
+7f0cf922c000-7f0cf922d000 r--p 00002000 08:06 3539125 /lib/x86_64-linux-gnu/libdl-2.23.so
+7f0cf922d000-7f0cf922e000 rw-p 00003000 08:06 3539125 /lib/x86_64-linux-gnu/libdl-2.23.so
+7f0cf922e000-7f0cf9243000 r-xp 00000000 08:06 9176231 /usr/local/java/jdk1.8.0_112/lib/amd64/jli/libjli.so
+7f0cf9243000-7f0cf9443000 ---p 00015000 08:06 9176231 /usr/local/java/jdk1.8.0_112/lib/amd64/jli/libjli.so
+7f0cf9443000-7f0cf9444000 rw-p 00015000 08:06 9176231 /usr/local/java/jdk1.8.0_112/lib/amd64/jli/libjli.so
+7f0cf9444000-7f0cf945c000 r-xp 00000000 08:06 3539119 /lib/x86_64-linux-gnu/libpthread-2.23.so
+7f0cf945c000-7f0cf965b000 ---p 00018000 08:06 3539119 /lib/x86_64-linux-gnu/libpthread-2.23.so
+7f0cf965b000-7f0cf965c000 r--p 00017000 08:06 3539119 /lib/x86_64-linux-gnu/libpthread-2.23.so
+7f0cf965c000-7f0cf965d000 rw-p 00018000 08:06 3539119 /lib/x86_64-linux-gnu/libpthread-2.23.so
+7f0cf965d000-7f0cf9661000 rw-p 00000000 00:00 0
+7f0cf9661000-7f0cf9687000 r-xp 00000000 08:06 3539041 /lib/x86_64-linux-gnu/ld-2.23.so
+7f0cf9687000-7f0cf968f000 r--s 00045000 08:06 4719350 /home/elma/.m2/repository/junit/junit/4.12/junit-4.12.jar
+7f0cf968f000-7f0cf9760000 rw-p 00000000 00:00 0
+7f0cf9760000-7f0cf9763000 ---p 00000000 00:00 0
+7f0cf9763000-7f0cf9866000 rw-p 00000000 00:00 0
+7f0cf9866000-7f0cf9867000 r--s 00005000 08:06 5245652 /home/elma/.m2/repository/org/antlr/antlr4-maven-plugin/4.2/antlr4-maven-plugin-4.2.jar
+7f0cf9867000-7f0cf9868000 r--s 00002000 08:06 4719348 /home/elma/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar
+7f0cf9868000-7f0cf986a000 r--s 00003000 08:06 4719344 /home/elma/.m2/repository/com/sun/jersey/contribs/jersey-spring/1.19.4/jersey-spring-1.19.4.jar
+7f0cf986a000-7f0cf987a000 r--s 0009d000 08:06 4458111 /home/elma/.m2/repository/com/sun/jersey/jersey-server/1.19.4/jersey-server-1.19.4.jar
+7f0cf987a000-7f0cf987c000 r--s 0000a000 08:06 4458165 /home/elma/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar
+7f0cf987c000-7f0cf9884000 rw-s 00000000 08:06 8127328 /tmp/hsperfdata_elma/31138
+7f0cf9884000-7f0cf9885000 rw-p 00000000 00:00 0
+7f0cf9885000-7f0cf9886000 ---p 00000000 00:00 0
+7f0cf9886000-7f0cf9887000 r--p 00025000 08:06 3539041 /lib/x86_64-linux-gnu/ld-2.23.so
+7f0cf9887000-7f0cf9888000 rw-p 00026000 08:06 3539041 /lib/x86_64-linux-gnu/ld-2.23.so
+7f0cf9888000-7f0cf9889000 rw-p 00000000 00:00 0
+7ffd1af51000-7ffd1af78000 rw-p 00000000 00:00 0 [stack]
+7ffd1afe6000-7ffd1afe9000 r--p 00000000 00:00 0 [vvar]
+7ffd1afe9000-7ffd1afeb000 r-xp 00000000 00:00 0 [vdso]
+ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
+
+VM Arguments:
+jvm_args: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:45788 -ea -Dfile.encoding=UTF-8
+java_command: org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 38027 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -test de.ids_mannheim.korap.web.controller.OAuth2ControllerTest:testRequestTokenPasswordGrantNonNative
+java_class_path (initial): /home/elma/git/Kustvakt/full/target/test-classes:/home/elma/git/Kustvakt/full/target/classes:/home/elma/git/Kustvakt/core/target/classes:/home/elma/.m2/repository/com/sun/jersey/jersey-bundle/1.19.4/jersey-bundle-1.19.4.jar:/home/elma/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar:/home/elma/.m2/repository/com/sun/jersey/jersey-server/1.19.4/jersey-server-1.19.4.jar:/home/elma/.m2/repository/com/sun/jersey/contribs/jersey-spring/1.19.4/jersey-spring-1.19.4.jar:/home/elma/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar:/home/elma/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/home/elma/.m2/repository/junit/junit/4.12/junit-4.12.jar:/home/elma/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/home/elma/.m2/repository/org/projectlombok/lombok/1.16.20/lombok-1.16.20.jar:/home/elma/.m2/repository/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar:/home/elma/git/Koral/target/classes:/home/elma/.m2/repository/org/antlr/antlr4-runtime/4.5.1/antlr4-runtime-4.5.1.jar:/home/elma/.m2/repository/org/antlr/antlr4-maven-plugin/4.2/antlr4-maven-plugin-4.2.jar:/home/elma/.m2/repository/org/apache/maven/maven-plugin-api/3.0.5/maven-plugin-api-3.0.5.jar:/home/elma/.m2/repository/org/apache/maven/maven-model/3.0.5/maven-model-3.0.5.jar:/home/elma/.m2/repository/org/apache/maven/maven-artifact/3.0.5/maven-artifact-3.0.5.jar:/home/elma/.m2/repository/org/sonatype/sisu/sisu-inject-plexus/2.3.0/sisu-inject-plexus-2.3.0.jar:/home/elma/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar:/home/elma/.m2/repository/org/codehaus/plexus/plexus-classworlds/2.4/plexus-classworlds-2.4.jar:/home/elma/.m2/repository/org/sonatype/sisu/sisu-inject-bean/2.3.0/sisu-inject-bean-2.3.0.jar:/home/elma/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0-no_aop.jar:/home/elma/.m2/repository/org/sonatype/sisu/sisu-guava/0.9.9/sisu-guava-0.9.9.jar:/home/e
+Launcher Type: SUN_STANDARD
+
+Environment Variables:
+JAVA_HOME=/usr/local/java/jdk
+PATH=/home/elma/.perlbrew/libs/perl-5.22.3@korap/bin:/home/elma/perl5/perlbrew/bin:/home/elma/perl5/perlbrew/perls/perl-5.22.3/bin:/home/elma/bin:/home/elma/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java:/snap/bin:/usr/local/java/jdk/bin:/usr/local/eclipse/default:/usr/sbin/openvpn:/usr/local/xml
+USERNAME=elma
+SHELL=/bin/bash
+DISPLAY=:1
+
+Signal Handlers:
+SIGSEGV: [libjvm.so+0xac7800], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGBUS: [libjvm.so+0xac7800], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGFPE: [libjvm.so+0x920990], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGPIPE: [libjvm.so+0x920990], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGXFSZ: [libjvm.so+0x920990], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGILL: [libjvm.so+0x920990], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGUSR1: SIG_DFL, sa_mask[0]=00000000000000000000000000000000, sa_flags=none
+SIGUSR2: [libjvm.so+0x9221d0], sa_mask[0]=00100000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO
+SIGHUP: [libjvm.so+0x9235d0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGINT: [libjvm.so+0x9235d0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGTERM: [libjvm.so+0x9235d0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+SIGQUIT: [libjvm.so+0x9235d0], sa_mask[0]=11111111011111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
+
+
+--------------- S Y S T E M ---------------
+
+OS:DISTRIB_ID=Ubuntu
+DISTRIB_RELEASE=16.04
+DISTRIB_CODENAME=xenial
+DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"
+
+uname:Linux 4.4.0-119-generic #143-Ubuntu SMP Mon Apr 2 16:08:24 UTC 2018 x86_64
+libc:glibc 2.23 NPTL 2.23
+rlimit: STACK 8192k, CORE 0k, NPROC 63149, NOFILE 1048576, AS infinity
+load average:2,23 1,04 1,04
+
+/proc/meminfo:
+MemTotal: 16295828 kB
+MemFree: 154036 kB
+MemAvailable: 32696 kB
+Buffers: 488 kB
+Cached: 1487772 kB
+SwapCached: 0 kB
+Active: 14455584 kB
+Inactive: 1231628 kB
+Active(anon): 14443064 kB
+Inactive(anon): 1222896 kB
+Active(file): 12520 kB
+Inactive(file): 8732 kB
+Unevictable: 64 kB
+Mlocked: 64 kB
+SwapTotal: 0 kB
+SwapFree: 0 kB
+Dirty: 316 kB
+Writeback: 0 kB
+AnonPages: 14200032 kB
+Mapped: 712548 kB
+Shmem: 1465908 kB
+Slab: 153108 kB
+SReclaimable: 74676 kB
+SUnreclaim: 78432 kB
+KernelStack: 26016 kB
+PageTables: 141888 kB
+NFS_Unstable: 0 kB
+Bounce: 0 kB
+WritebackTmp: 0 kB
+CommitLimit: 8147912 kB
+Committed_AS: 27012252 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed: 0 kB
+VmallocChunk: 0 kB
+HardwareCorrupted: 0 kB
+AnonHugePages: 0 kB
+CmaTotal: 0 kB
+CmaFree: 0 kB
+HugePages_Total: 0
+HugePages_Free: 0
+HugePages_Rsvd: 0
+HugePages_Surp: 0
+Hugepagesize: 2048 kB
+DirectMap4k: 420984 kB
+DirectMap2M: 16220160 kB
+
+
+CPU:total 4 (2 cores per cpu, 2 threads per core) family 6 model 58 stepping 9, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, clmul, erms, ht, tsc, tscinvbit, tscinv
+
+/proc/cpuinfo:
+processor : 0
+vendor_id : GenuineIntel
+cpu family : 6
+model : 58
+model name : Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
+stepping : 9
+microcode : 0x1f
+cpu MHz : 3352.671
+cache size : 4096 KB
+physical id : 0
+siblings : 4
+core id : 0
+cpu cores : 2
+apicid : 0
+initial apicid : 0
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb spec_ctrl retpoline kaiser tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts
+bugs : cpu_meltdown spectre_v1 spectre_v2
+bogomips : 5786.63
+clflush size : 64
+cache_alignment : 64
+address sizes : 36 bits physical, 48 bits virtual
+power management:
+
+processor : 1
+vendor_id : GenuineIntel
+cpu family : 6
+model : 58
+model name : Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
+stepping : 9
+microcode : 0x1f
+cpu MHz : 3399.910
+cache size : 4096 KB
+physical id : 0
+siblings : 4
+core id : 0
+cpu cores : 2
+apicid : 1
+initial apicid : 1
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb spec_ctrl retpoline kaiser tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts
+bugs : cpu_meltdown spectre_v1 spectre_v2
+bogomips : 5786.63
+clflush size : 64
+cache_alignment : 64
+address sizes : 36 bits physical, 48 bits virtual
+power management:
+
+processor : 2
+vendor_id : GenuineIntel
+cpu family : 6
+model : 58
+model name : Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
+stepping : 9
+microcode : 0x1f
+cpu MHz : 3399.910
+cache size : 4096 KB
+physical id : 0
+siblings : 4
+core id : 1
+cpu cores : 2
+apicid : 2
+initial apicid : 2
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb spec_ctrl retpoline kaiser tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts
+bugs : cpu_meltdown spectre_v1 spectre_v2
+bogomips : 5786.63
+clflush size : 64
+cache_alignment : 64
+address sizes : 36 bits physical, 48 bits virtual
+power management:
+
+processor : 3
+vendor_id : GenuineIntel
+cpu family : 6
+model : 58
+model name : Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
+stepping : 9
+microcode : 0x1f
+cpu MHz : 3399.910
+cache size : 4096 KB
+physical id : 0
+siblings : 4
+core id : 1
+cpu cores : 2
+apicid : 3
+initial apicid : 3
+fpu : yes
+fpu_exception : yes
+cpuid level : 13
+wp : yes
+flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb spec_ctrl retpoline kaiser tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts
+bugs : cpu_meltdown spectre_v1 spectre_v2
+bogomips : 5786.63
+clflush size : 64
+cache_alignment : 64
+address sizes : 36 bits physical, 48 bits virtual
+power management:
+
+
+
+Memory: 4k page, physical 16295828k(153076k free), swap 0k(0k free)
+
+vm_info: Java HotSpot(TM) 64-Bit Server VM (25.112-b15) for linux-amd64 JRE (1.8.0_112-b15), built on Sep 22 2016 21:10:53 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
+
+time: Mon Apr 23 17:48:10 2018
+elapsed time: 12 seconds (0d 0h 0m 12s)
+
diff --git a/full/pom.xml b/full/pom.xml
index 5587931..0337795 100644
--- a/full/pom.xml
+++ b/full/pom.xml
@@ -283,6 +283,12 @@
<version>4.0</version>
</dependency>
+ <!-- OAuth -->
+ <dependency>
+ <groupId>org.apache.oltu.oauth2</groupId>
+ <artifactId>org.apache.oltu.oauth2.authzserver</artifactId>
+ <version>1.0.0</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java b/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
index 991e8f4..1c22fea 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
@@ -44,7 +44,7 @@
import de.ids_mannheim.korap.security.context.TokenContext;
import de.ids_mannheim.korap.user.DemoUser;
import de.ids_mannheim.korap.user.KorAPUser;
-import de.ids_mannheim.korap.user.ShibUser;
+import de.ids_mannheim.korap.user.ShibbolethUser;
import de.ids_mannheim.korap.user.User;
import de.ids_mannheim.korap.user.User.CorpusAccess;
import de.ids_mannheim.korap.user.User.Location;
@@ -389,7 +389,7 @@
StatusCodes.LOGIN_FAILED, username);
}
- } else if (unknown instanceof ShibUser) {
+ } else if (unknown instanceof ShibbolethUser) {
// todo
}
jlog.debug("Authentication done: "+unknown);
@@ -521,7 +521,7 @@
* username); }
*/
- } else if (unknown instanceof ShibUser) {
+ } else if (unknown instanceof ShibbolethUser) {
// todo
}
@@ -753,17 +753,20 @@
}
// todo:
- private ShibUser createShibbUserAccount(Map<String, Object> attributes) throws KustvaktException {
+ private ShibbolethUser createShibbUserAccount(Map<String, Object> attributes) throws KustvaktException {
jlog.debug("creating shibboleth user account for user attr: {}", attributes);
Map<String, Object> safeMap = validator.validateMap(attributes);
// todo eppn non-unique.join with idp or use persistent_id as username
// identifier
- ShibUser user = User.UserFactory.getShibInstance((String) safeMap.get(Attributes.EPPN),
- (String) safeMap.get(Attributes.MAIL), (String) safeMap.get(Attributes.CN));
- user.setAffiliation((String) safeMap.get(Attributes.EDU_AFFIL));
- user.setAccountCreation(TimeUtils.getNow().getMillis());
+ // EM: disabled
+// ShibbolethUser user = User.UserFactory.getShibInstance((String) safeMap.get(Attributes.EPPN),
+// (String) safeMap.get(Attributes.MAIL), (String) safeMap.get(Attributes.CN));
+// user.setAffiliation((String) safeMap.get(Attributes.EDU_AFFIL));
+// user.setAccountCreation(TimeUtils.getNow().getMillis());
+ ShibbolethUser user = null;
+
UserDetails d = new UserDetails();
d.read(attributes, true);
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/OAuth2ClientDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/OAuth2ClientDao.java
index 6e75f65..e1759c4 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/OAuth2ClientDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/OAuth2ClientDao.java
@@ -6,7 +6,6 @@
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.stereotype.Repository;
@@ -27,8 +26,9 @@
private EntityManager entityManager;
public void registerClient (String id, String secretHashcode, String name,
- OAuth2ClientType type, boolean isNative, String url, int urlHashCode,
- String redirectURI, String registeredBy) throws KustvaktException {
+ OAuth2ClientType type, boolean isNative, String url,
+ int urlHashCode, String redirectURI, String registeredBy,
+ String description) throws KustvaktException {
ParameterChecker.checkStringValue(id, "client id");
ParameterChecker.checkStringValue(name, "client name");
ParameterChecker.checkObjectValue(type, "client type");
@@ -46,6 +46,7 @@
client.setUrlHashCode(urlHashCode);
client.setRedirectURI(redirectURI);
client.setRegisteredBy(registeredBy);
+ client.setDescription(description);
entityManager.persist(client);
}
@@ -68,7 +69,7 @@
}
catch (NoResultException e) {
throw new KustvaktException(StatusCodes.CLIENT_NOT_FOUND,
- "Unknown client with "+clientId+".", "invalid_client");
+ "Unknown client with " + clientId + ".", "invalid_client");
}
catch (Exception e) {
throw new KustvaktException(StatusCodes.CLIENT_NOT_FOUND,
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/OAuth2Client.java b/full/src/main/java/de/ids_mannheim/korap/entity/OAuth2Client.java
index 760fc13..9efab11 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/OAuth2Client.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/OAuth2Client.java
@@ -37,11 +37,13 @@
private String redirectURI;
@Column(name = "registered_by")
private String registeredBy;
+ private String description;
@Override
public String toString () {
- return "id=" + id + ", secret=" + secret + ", type=" + type + ", name="
- + name + ", url=" + url + ", redirectURI=" + redirectURI
- + ", registeredBy=" + registeredBy;
+ return "id=" + id + ", name=" + name + ", secret=" + secret + ", type="
+ + type + ", isNative=" + isNative + ", url=" + url
+ + ", redirectURI=" + redirectURI + ", registeredBy="
+ + registeredBy + ", description=" + description;
}
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java b/full/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
index fd3c1e8..fd7fdc2 100644
--- a/full/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
@@ -1,21 +1,11 @@
package de.ids_mannheim.korap.handlers;
-import de.ids_mannheim.korap.config.ParamFields;
-import de.ids_mannheim.korap.config.URIParam;
-import de.ids_mannheim.korap.exceptions.EmptyResultException;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.exceptions.DatabaseException;
-import de.ids_mannheim.korap.interfaces.EntityHandlerIface;
-import de.ids_mannheim.korap.interfaces.KustvaktBaseDaoInterface;
-import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
-import de.ids_mannheim.korap.user.KorAPUser;
-import de.ids_mannheim.korap.user.ShibUser;
-import de.ids_mannheim.korap.user.DemoUser;
-import de.ids_mannheim.korap.user.User;
-import de.ids_mannheim.korap.user.User.UserFactory;
-import de.ids_mannheim.korap.utils.BooleanUtils;
-import de.ids_mannheim.korap.utils.TimeUtils;
+import java.sql.Date;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
@@ -26,11 +16,19 @@
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
-import java.sql.Date;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import de.ids_mannheim.korap.config.ParamFields;
+import de.ids_mannheim.korap.config.URIParam;
+import de.ids_mannheim.korap.exceptions.DatabaseException;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.interfaces.EntityHandlerIface;
+import de.ids_mannheim.korap.interfaces.KustvaktBaseDaoInterface;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+import de.ids_mannheim.korap.user.KorAPUser;
+import de.ids_mannheim.korap.user.ShibbolethUser;
+import de.ids_mannheim.korap.user.User;
+import de.ids_mannheim.korap.utils.BooleanUtils;
+import de.ids_mannheim.korap.utils.TimeUtils;
/* WKP: In computer software, a data access object (DAO) is an object that provides an abstract interface to some type
* of database or other persistence mechanism. By mapping application calls to the persistence layer, the DAO provides
@@ -154,14 +152,14 @@
// "uri_expiration=:exp "
+ "WHERE id=:id";
}
- else if (user instanceof ShibUser) {
- ShibUser s = (ShibUser) user;
+ else if (user instanceof ShibbolethUser) {
+ ShibbolethUser s = (ShibbolethUser) user;
//todo:
// np.addValue("ali", s.getAccountLink());
np.addValue("ali", null);
np.addValue("edu", s.getAffiliation());
np.addValue("id", s.getId());
- np.addValue("cn", s.getCn());
+ np.addValue("cn", s.getCommonName());
np.addValue("mail", s.getMail());
query = "UPDATE shibusers SET account_link=:ali"
@@ -225,8 +223,8 @@
//fixme: still applicable?
}
- else if (user instanceof ShibUser) {
- ShibUser s = (ShibUser) user;
+ else if (user instanceof ShibbolethUser) {
+ ShibbolethUser s = (ShibbolethUser) user;
query = "INSERT INTO shibusers (username, type, account_link, account_creation "
+ "eduPersonScopedAffiliation, cn, mail) "
@@ -237,7 +235,7 @@
np.addValue("edu", s.getAffiliation());
np.addValue("mail", s.getMail());
np.addValue("type", user.getType());
- np.addValue("cn", s.getCn());
+ np.addValue("cn", s.getCommonName());
np.addValue("acr", System.currentTimeMillis());
//todo: deprecate
diff --git a/full/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java b/full/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java
index d18ea69..39b7efa 100644
--- a/full/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java
+++ b/full/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java
@@ -6,7 +6,7 @@
import de.ids_mannheim.korap.resources.ResourceFactory;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.user.KorAPUser;
-import de.ids_mannheim.korap.user.ShibUser;
+import de.ids_mannheim.korap.user.ShibbolethUser;
import de.ids_mannheim.korap.user.User;
import org.springframework.jdbc.core.RowMapper;
@@ -39,9 +39,9 @@
case 0:
user = getKorAP(rs);
break;
- case 1:
- user = getShib(rs);
- break;
+// case 1:
+// user = getShib(rs);
+// break;
default:
user = User.UserFactory.getDemoUser();
user.setId(rs.getInt("id"));
@@ -71,13 +71,13 @@
}
- private ShibUser getShib (ResultSet rs) throws SQLException {
- ShibUser user = User.UserFactory.getShibInstance(
- rs.getString(Attributes.USERNAME),
- rs.getString(Attributes.MAIL), rs.getString(Attributes.CN));
- user.setId(rs.getInt(Attributes.ID));
- return user;
- }
+// private ShibbolethUser getShib (ResultSet rs) throws SQLException {
+// ShibbolethUser user = User.UserFactory.getShibInstance(
+// rs.getString(Attributes.USERNAME),
+// rs.getString(Attributes.MAIL), rs.getString(Attributes.CN));
+// user.setId(rs.getInt(Attributes.ID));
+// return user;
+// }
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth/ClientDeregistrationValidator.java b/full/src/main/java/de/ids_mannheim/korap/oauth/ClientDeregistrationValidator.java
new file mode 100644
index 0000000..60525b0
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth/ClientDeregistrationValidator.java
@@ -0,0 +1,23 @@
+package de.ids_mannheim.korap.oauth;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.oltu.oauth2.common.OAuth;
+import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
+import org.apache.oltu.oauth2.common.utils.OAuthUtils;
+import org.apache.oltu.oauth2.common.validators.AbstractValidator;
+
+public class ClientDeregistrationValidator extends AbstractValidator<HttpServletRequest>{
+
+ public ClientDeregistrationValidator () {
+ enforceClientAuthentication = true;
+ }
+
+ @Override
+ public void validateMethod (HttpServletRequest request)
+ throws OAuthProblemException {
+ if (!request.getMethod().equals(OAuth.HttpMethod.DELETE)) {
+ throw OAuthUtils.handleOAuthProblemException("Method not set to DELETE.");
+ }
+ }
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth/OAuthDeregisterClientRequest.java b/full/src/main/java/de/ids_mannheim/korap/oauth/OAuthDeregisterClientRequest.java
new file mode 100644
index 0000000..88ae668
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth/OAuthDeregisterClientRequest.java
@@ -0,0 +1,27 @@
+package de.ids_mannheim.korap.oauth;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.oltu.oauth2.as.request.OAuthRequest;
+import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
+import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
+import org.apache.oltu.oauth2.common.utils.OAuthUtils;
+import org.apache.oltu.oauth2.common.validators.OAuthValidator;
+
+public class OAuthDeregisterClientRequest extends OAuthRequest {
+
+ public OAuthDeregisterClientRequest (HttpServletRequest request)
+ throws OAuthSystemException, OAuthProblemException {
+ super(request);
+ }
+
+ @Override
+ protected OAuthValidator<HttpServletRequest> initValidator ()
+ throws OAuthProblemException, OAuthSystemException {
+ validators.put("client_deregistration",
+ ClientDeregistrationValidator.class);
+ final Class<? extends OAuthValidator<HttpServletRequest>> clazz =
+ validators.get("client_deregistration");
+ return OAuthUtils.instantiateClass(clazz);
+ }
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/OAuth2AuthorizationService.java b/full/src/main/java/de/ids_mannheim/korap/service/OAuth2AuthorizationService.java
new file mode 100644
index 0000000..751c7d2
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/service/OAuth2AuthorizationService.java
@@ -0,0 +1,118 @@
+package de.ids_mannheim.korap.service;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.oltu.oauth2.as.issuer.OAuthIssuer;
+import org.apache.oltu.oauth2.as.request.OAuthAuthzRequest;
+import org.apache.oltu.oauth2.as.response.OAuthASResponse;
+import org.apache.oltu.oauth2.common.error.OAuthError;
+import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
+import org.apache.oltu.oauth2.common.message.OAuthResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.sun.jersey.api.client.ClientResponse.Status;
+
+import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.entity.OAuth2Client;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+
+@Service
+public class OAuth2AuthorizationService {
+
+ @Autowired
+ private OAuth2ClientService clientService;
+ @Autowired
+ private OAuth2Service auth2Service;
+ @Autowired
+ private OAuthIssuer oauthIssuer;
+
+ public OAuthResponse requestAuthorizationCode (HttpServletRequest request,
+ OAuthAuthzRequest authzRequest, String authorization)
+ throws KustvaktException, OAuthSystemException {
+
+ String responseType = authzRequest.getResponseType();
+ if (responseType == null || responseType.isEmpty()) {
+ throw new KustvaktException(StatusCodes.MISSING_PARAMETER,
+ "response_type is missing.",
+ OAuthError.CodeResponse.INVALID_REQUEST);
+ }
+
+ OAuth2Client client;
+ try {
+ client = clientService.authenticateClient(
+ authzRequest.getClientId(), authzRequest.getClientSecret());
+ }
+ catch (KustvaktException e) {
+ e.setEntity(OAuthError.CodeResponse.UNAUTHORIZED_CLIENT);
+ throw e;
+ }
+
+ String redirectUri = authzRequest.getRedirectURI();
+ boolean hasRedirectUri = hasRedirectUri(redirectUri);
+ redirectUri = verifyRedirectUri(client, hasRedirectUri, redirectUri);
+
+ auth2Service.authenticateUser(
+ authzRequest.getParam(Attributes.USERNAME),
+ authzRequest.getParam(Attributes.PASSWORD),
+ authzRequest.getScopes());
+
+ return OAuthASResponse
+ .authorizationResponse(request, Status.FOUND.getStatusCode())
+ .setCode(oauthIssuer.authorizationCode()).location(redirectUri)
+ .buildQueryMessage();
+ }
+
+
+ private boolean hasRedirectUri (String redirectURI) {
+ if (redirectURI != null && !redirectURI.isEmpty()) {
+ return true;
+ }
+ return false;
+ }
+
+ /** If the request contains a redirect_uri parameter, the server must confirm
+ * it is a valid redirect URI.
+ *
+ * If there is no redirect_uri parameter in the request, and only one URI
+ * was registered, the server uses the redirect URL that was previously
+ * registered.
+ *
+ * If no redirect URL has been registered, this is an error.
+ *
+ * @param client an OAuth2Client
+ * @param hasRedirectUri true if request contains redirect_uri, false otherwise
+ * @param redirectUri the redirect_uri value
+ * @return a client's redirect URI
+ * @throws KustvaktException
+ */
+ private String verifyRedirectUri (OAuth2Client client,
+ boolean hasRedirectUri, String redirectUri)
+ throws KustvaktException {
+
+ String registeredUri = client.getRedirectURI();
+ if (hasRedirectUri) {
+ // check if the redirect URI the same as that in DB
+ if (!redirectUri.equals(registeredUri)) {
+ throw new KustvaktException(StatusCodes.INVALID_REDIRECT_URI,
+ redirectUri + " is unknown",
+ OAuthError.CodeResponse.INVALID_REQUEST);
+ }
+ }
+ else {
+ // check if there is a redirect URI in the DB
+ // This should not happened as it is required in client registration!
+ if (registeredUri != null && !registeredUri.isEmpty()) {
+ redirectUri = registeredUri;
+ }
+ else {
+ throw new KustvaktException(StatusCodes.MISSING_PARAMETER,
+ "redirect_uri is required",
+ OAuthError.CodeResponse.INVALID_REQUEST);
+ }
+ }
+
+ return redirectUri;
+ }
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/OAuth2ClientService.java b/full/src/main/java/de/ids_mannheim/korap/service/OAuth2ClientService.java
index 4072cf7..1089c45 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/OAuth2ClientService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/OAuth2ClientService.java
@@ -8,14 +8,12 @@
import org.apache.commons.validator.routines.UrlValidator;
import org.apache.log4j.Logger;
+import org.apache.oltu.oauth2.as.request.OAuthRequest;
import org.apache.oltu.oauth2.common.error.OAuthError;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import de.ids_mannheim.korap.authentication.http.AuthorizationData;
-import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.FullConfiguration;
-import de.ids_mannheim.korap.constant.AuthenticationScheme;
import de.ids_mannheim.korap.constant.OAuth2ClientType;
import de.ids_mannheim.korap.dao.AdminDao;
import de.ids_mannheim.korap.dao.OAuth2ClientDao;
@@ -57,8 +55,6 @@
@Autowired
private EncryptionIface encryption;
@Autowired
- private HttpAuthorizationHandler authorizationHandler;
- @Autowired
private FullConfiguration config;
public OAuth2ClientDto registerClient (OAuth2ClientJson clientJson,
@@ -101,7 +97,7 @@
clientDao.registerClient(id, secretHashcode, clientJson.getName(),
clientJson.getType(), isNative, clientJson.getUrl(),
clientJson.getUrl().hashCode(), clientJson.getRedirectURI(),
- registeredBy);
+ registeredBy, clientJson.getDescription());
}
catch (Exception e) {
Throwable cause = e;
@@ -140,7 +136,8 @@
}
catch (URISyntaxException e) {
throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
- "Invalid redirectURI: "+e.getMessage(), OAuthError.TokenResponse.INVALID_REQUEST);
+ "Invalid redirectURI: " + e.getMessage(),
+ OAuthError.TokenResponse.INVALID_REQUEST);
}
boolean isNative =
urlHost.equals(nativeHost) && uriHost.equals(nativeHost);
@@ -152,7 +149,7 @@
public void deregisterPublicClient (String clientId, String username)
throws KustvaktException {
- OAuth2Client client = retrieveClientById(clientId);
+ OAuth2Client client = clientDao.retrieveClientById(clientId);
if (adminDao.isAdmin(username)) {
clientDao.deregisterClient(client);
}
@@ -174,98 +171,46 @@
}
- public void deregisterConfidentialClient (String authorization,
- String clientId) throws KustvaktException {
- OAuth2Client client =
- authenticateClientByBasicAuthorization(authorization, clientId);
+ public void deregisterConfidentialClient (OAuthRequest oAuthRequest)
+ throws KustvaktException {
+
+ OAuth2Client client = authenticateClient(oAuthRequest.getClientId(),
+ oAuthRequest.getClientSecret());
clientDao.deregisterClient(client);
}
- public OAuth2Client authenticateClient (String authorization,
- String clientId) throws KustvaktException {
- OAuth2Client client;
- if (authorization == null || authorization.isEmpty()) {
- client = authenticateClientById(clientId);
- if (client.getType().equals(OAuth2ClientType.CONFIDENTIAL)) {
- throw new KustvaktException(
- StatusCodes.CLIENT_AUTHENTICATION_FAILED,
- "Client authentication using authorization header is required.",
- OAuthError.TokenResponse.INVALID_CLIENT);
- }
- }
- else {
- client = authenticateClientByBasicAuthorization(authorization,
- clientId);
- }
- return client;
- }
+ public OAuth2Client authenticateClient (String clientId,
+ String clientSecret) throws KustvaktException {
- public OAuth2Client authenticateClientById (String clientId)
- throws KustvaktException {
- if (clientId == null || clientId.equals("null") || clientId.isEmpty()) {
+ if (clientId == null || clientId.isEmpty()) {
throw new KustvaktException(
StatusCodes.CLIENT_AUTHENTICATION_FAILED,
- "client_id is missing",
- OAuthError.TokenResponse.INVALID_REQUEST);
+ "Missing parameters: client id", "invalid_request");
}
- else {
- return retrieveClientById(clientId);
- }
- }
- public OAuth2Client authenticateClientByBasicAuthorization (
- String authorization, String clientId) throws KustvaktException {
-
- if (authorization == null || authorization.isEmpty()) {
- throw new KustvaktException(
- StatusCodes.CLIENT_AUTHENTICATION_FAILED,
- "Authorization header is not found.",
- OAuthError.TokenResponse.INVALID_CLIENT);
- }
- else {
- AuthorizationData authData = authorizationHandler
- .parseAuthorizationHeaderValue(authorization);
- if (authData.getAuthenticationScheme()
- .equals(AuthenticationScheme.BASIC)) {
- authorizationHandler.parseBasicToken(authData);
- return verifyClientCredentials(clientId, authData);
- }
- else {
+ OAuth2Client client = clientDao.retrieveClientById(clientId);
+ if (clientSecret == null || clientSecret.isEmpty()) {
+ if (client.getSecret() != null
+ || client.getType().equals(OAuth2ClientType.CONFIDENTIAL)) {
throw new KustvaktException(
StatusCodes.CLIENT_AUTHENTICATION_FAILED,
- "Client authentication with " + authData
- .getAuthenticationScheme().displayName()
- + "is not supported",
- "invalid_client");
+ "Missing parameters: client_secret", "invalid_request");
+ }
+ else
+ return client;
+ }
+ else {
+ if (client.getSecret() != null) {
+ if (encryption.checkHash(clientSecret, client.getSecret(),
+ config.getPasscodeSaltField())) {
+ return client;
+ }
}
}
+
+ throw new KustvaktException(StatusCodes.CLIENT_AUTHENTICATION_FAILED,
+ "Invalid client credentials",
+ OAuthError.TokenResponse.INVALID_CLIENT);
}
- private OAuth2Client verifyClientCredentials (String clientId,
- AuthorizationData authData) throws KustvaktException {
-
- OAuth2Client client = retrieveClientById(authData.getUsername());
- // EM: not sure if this is necessary
- if (clientId != null && !clientId.isEmpty()) {
- if (!client.getId().equals(clientId)) {
- throw new KustvaktException(
- StatusCodes.CLIENT_AUTHENTICATION_FAILED,
- "Invalid client credentials.",
- OAuthError.TokenResponse.INVALID_CLIENT);
- }
- }
- if (!encryption.checkHash(authData.getPassword(), client.getSecret(),
- config.getPasscodeSaltField())) {
- throw new KustvaktException(
- StatusCodes.CLIENT_AUTHENTICATION_FAILED,
- "Invalid client credentials.",
- OAuthError.TokenResponse.INVALID_CLIENT);
- }
- return client;
- }
-
- public OAuth2Client retrieveClientById (String clientId)
- throws KustvaktException {
- return clientDao.retrieveClientById(clientId);
- }
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/OAuth2Service.java b/full/src/main/java/de/ids_mannheim/korap/service/OAuth2Service.java
index 4ec5dac..9e8092b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/OAuth2Service.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/OAuth2Service.java
@@ -4,15 +4,12 @@
import java.util.Map;
import java.util.Set;
-import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.Response.Status;
-import org.apache.oltu.oauth2.as.issuer.MD5Generator;
import org.apache.oltu.oauth2.as.issuer.OAuthIssuer;
-import org.apache.oltu.oauth2.as.issuer.OAuthIssuerImpl;
-import org.apache.oltu.oauth2.as.request.OAuthTokenRequest;
+import org.apache.oltu.oauth2.as.request.AbstractOAuthTokenRequest;
import org.apache.oltu.oauth2.as.response.OAuthASResponse;
import org.apache.oltu.oauth2.common.error.OAuthError;
-import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
import org.apache.oltu.oauth2.common.message.OAuthResponse;
import org.apache.oltu.oauth2.common.message.types.GrantType;
@@ -36,12 +33,27 @@
private FullConfiguration config;
@Autowired
private AuthenticationManagerIface authenticationManager;
+ @Autowired
+ private OAuthIssuer oauthIssuer;
/**
- * RFC 6749:
+ * OAuth2 describes various ways for requesting an access token. Kustvakt
+ * supports:
+ * <ul>
+ * <li> Authorization code grant: obtains authorization from a third party
+ * application.
+ * </li>
+ * <li> Resource owner password grant: strictly for clients that are parts
+ * of KorAP. Clients use user credentials, e.g. Kalamar (front-end) with
+ * login form.
+ * </li>
+ * <li> Client credentials grant: strictly for clients that are parts
+ * of KorAP. Clients access their own resources, not on behalf of a
+ * user.
+ * </li>
+ * </ul>
*
- * If the client type is confidential or the client was issued client
- * credentials, the client MUST authenticate with the authorization server.
+ *
* @param request
*
* @param oAuthRequest
@@ -50,24 +62,25 @@
* @throws KustvaktException
* @throws OAuthSystemException
*/
- public OAuthResponse requestAccessToken (OAuthTokenRequest oAuthRequest,
- String authorization)
+ public OAuthResponse requestAccessToken (
+ AbstractOAuthTokenRequest oAuthRequest)
throws KustvaktException, OAuthSystemException {
String grantType = oAuthRequest.getGrantType();
if (grantType.equals(GrantType.AUTHORIZATION_CODE.toString())) {
- return requestAccessTokenWithAuthorizationCode(authorization,
+ return requestAccessTokenWithAuthorizationCode(
oAuthRequest.getCode(), oAuthRequest.getRedirectURI(),
- oAuthRequest.getClientId());
+ oAuthRequest.getClientId(), oAuthRequest.getClientSecret());
}
else if (grantType.equals(GrantType.PASSWORD.toString())) {
- return requestAccessTokenWithPassword(authorization,
- oAuthRequest.getUsername(), oAuthRequest.getPassword(),
- oAuthRequest.getScopes(), oAuthRequest.getClientId());
+ return requestAccessTokenWithPassword(oAuthRequest.getUsername(),
+ oAuthRequest.getPassword(), oAuthRequest.getScopes(),
+ oAuthRequest.getClientId(), oAuthRequest.getClientSecret());
}
else if (grantType.equals(GrantType.CLIENT_CREDENTIALS.toString())) {
- return requestAccessTokenWithClientCredentials(authorization,
+ return requestAccessTokenWithClientCredentials(
+ oAuthRequest.getClientId(), oAuthRequest.getClientSecret(),
oAuthRequest.getScopes());
}
else {
@@ -78,25 +91,31 @@
}
- /** Confidential clients must authenticate
+ /**
+ * RFC 6749:
+ * If the client type is confidential or the client was issued client
+ * credentials, the client MUST authenticate with the authorization server.
*
- * @param authorization
* @param authorizationCode
- * @param redirectURI
+ * @param redirectURI required if included in the authorization request
* @param clientId required if there is no authorization header
+ * @param clientSecret clilent_secret, required if client_secret was issued
+ * for the client in client registration.
* @return
* @throws OAuthSystemException
* @throws KustvaktException
- * @throws OAuthProblemException
*/
private OAuthResponse requestAccessTokenWithAuthorizationCode (
- String authorization, String authorizationCode, String redirectURI,
- String clientId) throws KustvaktException {
- OAuth2Client client =
- clientService.authenticateClient(authorization, clientId);
+ String authorizationCode, String redirectURI, String clientId,
+ String clientSecret)
+ throws KustvaktException, OAuthSystemException {
+
+ clientService.authenticateClient(clientId, clientSecret);
// TODO
- return null;
+ // check authorization code
+ // check redirectURI
+ return createsAccessTokenResponse();
}
@@ -104,30 +123,32 @@
/** Third party apps must not be allowed to use password grant.
* MH: password grant is only allowed for trusted clients (korap frontend)
*
- * A similar rule to that of authorization code grant is additionally
- * applied, namely client_id is required when authorization header is not
- * available.
+ * According to RFC 6749, client authentication is only required for
+ * confidential clients and whenever client credentials are provided.
+ * Moreover, client_id is optional for password grant, but without it,
+ * the authentication server cannot check the client type.
*
- * According to RFC 6749, client_id is optional for password grant,
- * but without it, server would not be able to check the client
- * type, thus cannot make sure that confidential clients authenticate.
+ * To make sure that confidential clients authenticate, client_id is made
+ * required (similar to authorization code grant).
*
- * @param authorization
- * @param username
- * @param password
+ *
+ * @param username username, required
+ * @param password user password, required
* @param scopes
- * @param clientId
+ * @param clientId client_id, required
+ * @param clientSecret clilent_secret, required if client_secret was issued
+ * for the client in client registration.
* @return
* @throws KustvaktException
- * @throws OAuthSystemException
+ * @throws OAuthSystemException
*/
- private OAuthResponse requestAccessTokenWithPassword (String authorization,
- String username, String password, Set<String> scopes,
- String clientId) throws KustvaktException, OAuthSystemException {
+ private OAuthResponse requestAccessTokenWithPassword (String username,
+ String password, Set<String> scopes, String clientId,
+ String clientSecret)
+ throws KustvaktException, OAuthSystemException {
OAuth2Client client =
- clientService.authenticateClient(authorization, clientId);
-
+ clientService.authenticateClient(clientId, clientSecret);
if (!client.isNative()) {
throw new KustvaktException(StatusCodes.CLIENT_AUTHORIZATION_FAILED,
"Password grant is not allowed for third party clients",
@@ -138,7 +159,7 @@
return createsAccessTokenResponse();
}
- private void authenticateUser (String username, String password,
+ public void authenticateUser (String username, String password,
Set<String> scopes) throws KustvaktException {
if (username == null || username.isEmpty()) {
throw new KustvaktException(StatusCodes.MISSING_PARAMETER,
@@ -162,50 +183,46 @@
/** Clients must authenticate
*
- * @param authorization
+ * @param clientId client_id parameter, required
+ * @param clientSecret client_secret parameter, required
* @param scopes
- * @param request
* @return
- * @throws KustvaktException
- * @throws OAuthSystemException
+ * @throws KustvaktException
+ * @throws OAuthSystemException
*/
private OAuthResponse requestAccessTokenWithClientCredentials (
- String authorization, Set<String> scopes)
+ String clientId, String clientSecret, Set<String> scopes)
throws KustvaktException, OAuthSystemException {
- if (authorization == null || authorization.isEmpty()) {
+ if (clientSecret == null || clientSecret.isEmpty()) {
throw new KustvaktException(
StatusCodes.CLIENT_AUTHENTICATION_FAILED,
- "Client authentication using authorization header is required.",
- OAuthError.TokenResponse.INVALID_CLIENT);
+ "Missing parameters: client_secret", "invalid_request");
}
- else {
- clientService.authenticateClientByBasicAuthorization(authorization,
- null);
- return createsAccessTokenResponse();
- }
+
+ clientService.authenticateClient(clientId, clientSecret);
+ return createsAccessTokenResponse();
}
- /**
- * @param request
- * @return
- * @throws OAuthSystemException
+
+ /** Creates an OAuthResponse containing an access token and a refresh token
+ * with type Bearer.
*
+ * @return an OAuthResponse containing an access token
+ * @throws OAuthSystemException
*/
private OAuthResponse createsAccessTokenResponse ()
throws OAuthSystemException {
- OAuthIssuer oauthIssuerImpl = new OAuthIssuerImpl(new MD5Generator());
- OAuthResponse r = null;
+ String accessToken = oauthIssuer.accessToken();
+ String refreshToken = oauthIssuer.refreshToken();
- String accessToken = oauthIssuerImpl.accessToken();
- String refreshToken = oauthIssuerImpl.refreshToken();
-
- r = OAuthASResponse.tokenResponse(HttpServletResponse.SC_OK)
- .setAccessToken(accessToken)
- .setTokenType(TokenType.BEARER.toString())
- .setExpiresIn(String.valueOf(config.getTokenTTL()))
- .setRefreshToken(refreshToken).buildJSONMessage();
+ OAuthResponse r =
+ OAuthASResponse.tokenResponse(Status.OK.getStatusCode())
+ .setAccessToken(accessToken)
+ .setTokenType(TokenType.BEARER.toString())
+ .setExpiresIn(String.valueOf(config.getTokenTTL()))
+ .setRefreshToken(refreshToken).buildJSONMessage();
// scope
return r;
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/user/ShibbolethUser.java b/full/src/main/java/de/ids_mannheim/korap/user/ShibbolethUser.java
new file mode 100644
index 0000000..80d01f5
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/user/ShibbolethUser.java
@@ -0,0 +1,90 @@
+package de.ids_mannheim.korap.user;
+
+/**
+ * User: hanl
+ * Date: 10/16/13
+ * Time: 2:02 PM
+ *
+ * @author margaretha
+ * @last-update 18/04/2018
+ */
+public class ShibbolethUser extends User {
+
+ /**
+ * Auto generated serial Id
+ */
+ private static final long serialVersionUID = -4008236368010397075L;
+ private String mail;
+ private String affiliation;
+ // EM: common name
+ private String commonName;
+
+
+ protected ShibbolethUser () {
+ super(1);
+ }
+
+
+ private ShibbolethUser (String eduPersonID, String mail, String cn,
+ String affiliation) {
+ this(eduPersonID);
+ this.setUsername(eduPersonID);
+ this.setMail(mail);
+ this.setAffiliation(affiliation);
+ this.setCommonName(cn);
+ }
+
+
+ public ShibbolethUser (String username) {
+ super(username, 1);
+
+ }
+
+
+ @Override
+ public String toString () {
+ final StringBuffer sb = new StringBuffer("ShibbolethUser{");
+ sb.append(", mail='").append(getMail()).append('\'');
+ sb.append(", affiliation='").append(getAffiliation()).append('\'');
+ sb.append(", common-name='").append(getCommonName()).append('\'');
+ sb.append('}');
+ return sb.toString();
+ }
+
+
+ @Override
+ protected User clone () {
+ return new ShibbolethUser(this.getUsername(), this.getMail(), this.getCommonName(),
+ this.getAffiliation());
+ }
+
+
+ public String getMail () {
+ return mail;
+ }
+
+
+ public void setMail (String mail) {
+ this.mail = mail;
+ }
+
+
+ public String getAffiliation () {
+ return affiliation;
+ }
+
+
+ public void setAffiliation (String affiliation) {
+ this.affiliation = affiliation;
+ }
+
+
+ public String getCommonName () {
+ return commonName;
+ }
+
+
+ public void setCommonName (String commonName) {
+ this.commonName = commonName;
+ }
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/OAuth2ResponseHandler.java b/full/src/main/java/de/ids_mannheim/korap/web/OAuth2ResponseHandler.java
index 5df68b2..0d31236 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/OAuth2ResponseHandler.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/OAuth2ResponseHandler.java
@@ -1,5 +1,8 @@
package de.ids_mannheim.korap.web;
+import java.net.URI;
+import java.net.URISyntaxException;
+
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
@@ -92,7 +95,9 @@
OAuthResponse oAuthResponse = null;
String errorCode = e.getEntity();
try {
- if (errorCode.equals(OAuthError.TokenResponse.INVALID_CLIENT)) {
+ if (errorCode.equals(OAuthError.TokenResponse.INVALID_CLIENT)
+ || errorCode.equals(
+ OAuthError.TokenResponse.UNAUTHORIZED_CLIENT)) {
oAuthResponse = createOAuthResponse(e,
Status.UNAUTHORIZED.getStatusCode());
}
@@ -100,8 +105,6 @@
|| errorCode
.equals(OAuthError.TokenResponse.INVALID_REQUEST)
|| errorCode.equals(OAuthError.TokenResponse.INVALID_SCOPE)
- || errorCode
- .equals(OAuthError.TokenResponse.UNAUTHORIZED_CLIENT)
|| errorCode.equals(
OAuthError.TokenResponse.UNSUPPORTED_GRANT_TYPE)) {
oAuthResponse = createOAuthResponse(e,
@@ -142,4 +145,16 @@
}
return builder.build();
}
+
+ public Response sendRedirect (String locationUri) throws KustvaktException {
+ try {
+ ResponseBuilder builder =
+ Response.temporaryRedirect(new URI(locationUri));
+ return builder.build();
+ }
+ catch (URISyntaxException e) {
+ throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
+ e.getMessage(), OAuthError.CodeResponse.INVALID_REQUEST);
+ }
+ }
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
index ece03f2..b0699b1 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
@@ -2,6 +2,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@@ -10,16 +11,20 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
-import javax.ws.rs.core.SecurityContext;
+import org.apache.oltu.oauth2.as.request.AbstractOAuthTokenRequest;
+import org.apache.oltu.oauth2.as.request.OAuthAuthzRequest;
import org.apache.oltu.oauth2.as.request.OAuthTokenRequest;
+import org.apache.oltu.oauth2.as.request.OAuthUnauthenticatedTokenRequest;
import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
import org.apache.oltu.oauth2.common.message.OAuthResponse;
+import org.apache.oltu.oauth2.common.message.types.GrantType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.service.OAuth2AuthorizationService;
import de.ids_mannheim.korap.service.OAuth2Service;
import de.ids_mannheim.korap.web.OAuth2ResponseHandler;
import de.ids_mannheim.korap.web.utils.FormRequestWrapper;
@@ -31,7 +36,50 @@
@Autowired
private OAuth2ResponseHandler responseHandler;
@Autowired
- private OAuth2Service oauth2Service;
+ private OAuth2Service oAuth2Service;
+ @Autowired
+ private OAuth2AuthorizationService authorizationService;
+
+ /** Kustvakt supports authorization only with Kalamar as the authorization
+ * web-frontend or user interface. Thus authorization code request requires
+ * user credentials in the request body, similar to access token request in
+ * resource owner password grant request.
+ *
+ * @param request
+ * @param authorization
+ * @param form
+ * @return
+ */
+ @POST
+ @Path("authorize")
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
+ public Response requestAuthorizationCode (
+ @Context HttpServletRequest request,
+ @HeaderParam("Authorization") String authorization,
+ MultivaluedMap<String, String> form) {
+
+ try {
+ HttpServletRequest requestWithForm =
+ new FormRequestWrapper(request, form);
+ OAuthAuthzRequest authzRequest =
+ new OAuthAuthzRequest(requestWithForm);
+ OAuthResponse authResponse =
+ authorizationService.requestAuthorizationCode(
+ requestWithForm, authzRequest, authorization);
+ return responseHandler.sendRedirect(authResponse.getLocationUri());
+ }
+ catch (OAuthSystemException e) {
+ throw responseHandler.throwit(e);
+ }
+ catch (OAuthProblemException e) {
+ throw responseHandler.throwit(e);
+ }
+ catch (KustvaktException e) {
+ throw responseHandler.throwit(e);
+ }
+ }
+
/** Grants a client an access token, namely a string used in authenticated
* requests representing user authorization for the client to access user
@@ -49,27 +97,32 @@
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public Response requestAccessToken (@Context HttpServletRequest request,
- @HeaderParam("Authorization") String authorization,
+ @FormParam("grant_type") String grantType,
MultivaluedMap<String, String> form) {
try {
- OAuthTokenRequest oAuthRequest = null;
- try {
+ AbstractOAuthTokenRequest oAuthRequest = null;
+ if (grantType != null && !grantType.isEmpty() && grantType
+ .equals(GrantType.CLIENT_CREDENTIALS.toString())) {
oAuthRequest = new OAuthTokenRequest(
new FormRequestWrapper(request, form));
}
- catch (OAuthProblemException e) {
- throw responseHandler.throwit(e);
+ else {
+ oAuthRequest = new OAuthUnauthenticatedTokenRequest(
+ new FormRequestWrapper(request, form));
}
- OAuthResponse oAuthResponse = oauth2Service
- .requestAccessToken(oAuthRequest, authorization);
+ OAuthResponse oAuthResponse =
+ oAuth2Service.requestAccessToken(oAuthRequest);
return responseHandler.createResponse(oAuthResponse);
}
catch (KustvaktException e) {
throw responseHandler.throwit(e);
}
+ catch (OAuthProblemException e) {
+ throw responseHandler.throwit(e);
+ }
catch (OAuthSystemException e) {
throw responseHandler.throwit(e);
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
index 9c4834c..39b93b7 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
@@ -1,17 +1,21 @@
package de.ids_mannheim.korap.web.controller;
+import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
-import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
+import org.apache.oltu.oauth2.as.request.OAuthRequest;
+import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
+import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -19,12 +23,14 @@
import de.ids_mannheim.korap.dto.OAuth2ClientDto;
import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.oauth.OAuthDeregisterClientRequest;
import de.ids_mannheim.korap.security.context.TokenContext;
import de.ids_mannheim.korap.service.OAuth2ClientService;
import de.ids_mannheim.korap.web.OAuth2ResponseHandler;
import de.ids_mannheim.korap.web.filter.AuthenticationFilter;
import de.ids_mannheim.korap.web.filter.BlockingFilter;
import de.ids_mannheim.korap.web.input.OAuth2ClientJson;
+import de.ids_mannheim.korap.web.utils.FormRequestWrapper;
/** Defines controllers for OAuth2 clients, namely applications attempting
@@ -111,14 +117,25 @@
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response deregisterConfidentialClient (
@Context SecurityContext securityContext,
- @HeaderParam("Authorization") String authorization,
- @FormParam("client_id") String clientId) {
+ // @HeaderParam("Authorization") String authorization,
+ // @FormParam("client_id") String clientId
+ @Context HttpServletRequest request,
+ MultivaluedMap<String, String> form) {
try {
- clientService.deregisterConfidentialClient(authorization, clientId);
+ OAuthRequest oAuthRequest = new OAuthDeregisterClientRequest(
+ new FormRequestWrapper(request, form));
+
+ clientService.deregisterConfidentialClient(oAuthRequest);
return Response.ok().build();
}
catch (KustvaktException e) {
throw responseHandler.throwit(e);
}
+ catch (OAuthSystemException e) {
+ throw responseHandler.throwit(e);
+ }
+ catch (OAuthProblemException e) {
+ throw responseHandler.throwit(e);
+ }
}
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
index e64bcfe..c6a3a97 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
@@ -233,7 +233,7 @@
* @param pageLength number of results per page
* @param pageIndex
* @param startPage
- * @param cq collection query
+ * @param cq corpus query
* @return
*/
// ref query parameter removed!
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java b/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java
index 2dc4034..99705e8 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java
@@ -20,4 +20,5 @@
// redirect URI determines where the OAuth 2.0 service will return the user to
// after they have authorized a client. It must be https.
private String redirectURI;
+ private String description;
}
diff --git a/full/src/main/resources/db/insert/V3.5__insert_oauth2_clients.sql b/full/src/main/resources/db/insert/V3.5__insert_oauth2_clients.sql
index 3cc2999..f9cd171 100644
--- a/full/src/main/resources/db/insert/V3.5__insert_oauth2_clients.sql
+++ b/full/src/main/resources/db/insert/V3.5__insert_oauth2_clients.sql
@@ -2,21 +2,33 @@
-- plain secret value is "secret"
INSERT INTO oauth2_client(id,name,secret,type,native, url,url_hashcode,
- redirect_uri,registered_by)
-VALUES ("fCBbQkAyYzI4NzUxMg==","test confidential client",
+ redirect_uri,registered_by, description)
+VALUES ("fCBbQkAyYzI4NzUxMg","test confidential client",
"$2a$08$vi1FbuN3p6GcI1tSxMAoeuIYL8Yw3j6A8wJthaN8ZboVnrQaTwLPq",
"CONFIDENTIAL", 1, "http://korap.ids-mannheim.de/confidential", 2087150261,
- "https://korap.ids-mannheim.de/confidential/redirect", "system");
+ "https://korap.ids-mannheim.de/confidential/redirect", "system",
+ "This is a test native confidential client.");
+
+-- plain secret value is "secret"
+INSERT INTO oauth2_client(id,name,secret,type,native, url,url_hashcode,
+ redirect_uri,registered_by, description)
+VALUES ("9aHsGW6QflV13ixNpez","test non native confidential client",
+ "$2a$08$vi1FbuN3p6GcI1tSxMAoeuIYL8Yw3j6A8wJthaN8ZboVnrQaTwLPq",
+ "CONFIDENTIAL", 0, "http://third.party.com/confidential", 1712550103,
+ "https://third.party.com/confidential/redirect", "system",
+ "This is a test nonnative confidential client.");
INSERT INTO oauth2_client(id,name,secret,type,url,url_hashcode,
- redirect_uri, registered_by)
-VALUES ("8bIDtZnH6NvRkW2Fq==","third party client",null,
+ redirect_uri, registered_by, description)
+VALUES ("8bIDtZnH6NvRkW2Fq","third party client",null,
"PUBLIC","http://third.party.client.com", -2137275617,
- "https://third.party.client.com/redirect","system");
+ "https://third.party.client.com/redirect","system",
+ "This is a test nonnative public client.");
INSERT INTO oauth2_client(id,name,secret,type,native,url,url_hashcode,
- redirect_uri, registered_by)
+ redirect_uri, registered_by, description)
VALUES ("iBr3LsTCxOj7D2o0A5m","test public client",null,
"PUBLIC", 1, "http://korap.ids-mannheim.de/public", 1360724310,
- "https://korap.ids-mannheim.de/public/redirect","system");
+ "https://korap.ids-mannheim.de/public/redirect","system",
+ "This is a test native public client.");
\ No newline at end of file
diff --git a/full/src/main/resources/db/new-mysql/V1.4__oauth2_tables.sql b/full/src/main/resources/db/new-mysql/V1.4__oauth2_tables.sql
index c55ef43..81b0d92 100644
--- a/full/src/main/resources/db/new-mysql/V1.4__oauth2_tables.sql
+++ b/full/src/main/resources/db/new-mysql/V1.4__oauth2_tables.sql
@@ -10,7 +10,8 @@
url TEXT NOT NULL,
url_hashcode UNIQUE INTEGER NOT NULL,
redirect_uri TEXT NOT NULL,
- registered_by VARCHAR(100) NOT NULL
+ registered_by VARCHAR(100) NOT NULL,
+ description VARCHAR(250) NOT NULL
);
--
diff --git a/full/src/main/resources/db/new-sqlite/V1.4__oauth2_tables.sql b/full/src/main/resources/db/new-sqlite/V1.4__oauth2_tables.sql
index 89014f2..c055f4d 100644
--- a/full/src/main/resources/db/new-sqlite/V1.4__oauth2_tables.sql
+++ b/full/src/main/resources/db/new-sqlite/V1.4__oauth2_tables.sql
@@ -10,7 +10,8 @@
url TEXT NOT NULL,
url_hashcode INTEGER NOT NULL,
redirect_uri TEXT NOT NULL,
- registered_by VARCHAR(100) NOT NULL
+ registered_by VARCHAR(100) NOT NULL,
+ description VARCHAR(250) NOT NULL
);
CREATE UNIQUE INDEX client_id_index on oauth2_client(id);
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index feef295..57f65ae 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-config.xml
@@ -184,10 +184,17 @@
<bean id="kustvaktResponseHandler" class="de.ids_mannheim.korap.web.KustvaktExceptionHandler">
<constructor-arg index="0" name="iface" ref="kustvakt_auditing" />
</bean>
- <bean id="oauth2_exception" class="de.ids_mannheim.korap.web.OAuth2ExceptionHandler">
+
+ <!-- OAuth -->
+ <bean id="oauth2ResponseHandler" class="de.ids_mannheim.korap.web.OAuth2ResponseHandler">
<constructor-arg index="0" name="iface" ref="kustvakt_auditing" />
</bean>
-
+
+ <bean id="mdGenerator" class="org.apache.oltu.oauth2.as.issuer.MD5Generator">
+ </bean>
+ <bean id="oauthIssuer" class="org.apache.oltu.oauth2.as.issuer.OAuthIssuerImpl">
+ <constructor-arg index="0" ref="mdGenerator" />
+ </bean>
<bean id="kustvakt_userdb" class="de.ids_mannheim.korap.handlers.EntityDao">
<constructor-arg ref="kustvakt_db" />
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
index 66d610f..b194e08 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
@@ -62,6 +62,7 @@
json.setType(OAuth2ClientType.CONFIDENTIAL);
json.setUrl("http://example.client.com");
json.setRedirectURI("https://example.client.com/redirect");
+ json.setDescription("This is a confidential test client.");
return resource().path("oauth2").path("client").path("register")
.header(Attributes.AUTHORIZATION,
@@ -89,8 +90,9 @@
assertEquals(OAuthError.TokenResponse.INVALID_REQUEST,
node.at("/error").asText());
+ testDeregisterConfidentialClientMissingParameters();
testDeregisterClientIncorrectCredentials(clientId);
- testDeregisterConfidentialClient(clientId, clientSecret);
+ testDeregisterConfidentialClient(clientId,clientSecret);
}
@Test
@@ -101,6 +103,7 @@
json.setType(OAuth2ClientType.PUBLIC);
json.setUrl("http://test.public.client.com");
json.setRedirectURI("https://test.public.client.com/redirect");
+ json.setDescription("This is a public test client.");
ClientResponse response = resource().path("oauth2").path("client")
.path("register")
@@ -129,6 +132,7 @@
json.setType(OAuth2ClientType.PUBLIC);
json.setUrl("http://korap.ids-mannheim.de/native");
json.setRedirectURI("https://korap.ids-mannheim.de/native/redirect");
+ json.setDescription("This is a native test client.");
ClientResponse response = resource().path("oauth2").path("client")
.path("register")
@@ -140,7 +144,7 @@
.entity(json).post(ClientResponse.class);
assertEquals(Status.OK.getStatusCode(), response.getStatus());
-
+
//EM: need to check native
}
@@ -167,8 +171,6 @@
private void testDeregisterConfidentialClient (String clientId,
String clientSecret) throws UniformInterfaceException,
ClientHandlerException, KustvaktException {
- MultivaluedMap<String, String> form = new MultivaluedMapImpl();
- form.add("client_id", clientId);
ClientResponse response = resource().path("oauth2").path("client")
.path("deregister").path("confidential")
@@ -178,16 +180,34 @@
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.header(HttpHeaders.CONTENT_TYPE,
ContentType.APPLICATION_FORM_URLENCODED)
- .entity(form).delete(ClientResponse.class);
+ .delete(ClientResponse.class);
assertEquals(Status.OK.getStatusCode(), response.getStatus());
}
+ private void testDeregisterConfidentialClientMissingParameters ()
+ throws KustvaktException {
+
+ ClientResponse response = resource().path("oauth2").path("client")
+ .path("deregister").path("confidential")
+ .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
+ .header(HttpHeaders.CONTENT_TYPE,
+ ContentType.APPLICATION_FORM_URLENCODED)
+ .delete(ClientResponse.class);
+
+ String entity = response.getEntity(String.class);
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(OAuthError.TokenResponse.INVALID_REQUEST,
+ node.at("/error").asText());
+ assertEquals("Missing parameters: client_secret client_id",
+ node.at("/error_description").asText());
+ }
+
private void testDeregisterClientIncorrectCredentials (String clientId)
throws UniformInterfaceException, ClientHandlerException,
KustvaktException {
- MultivaluedMap<String, String> form = new MultivaluedMapImpl();
- form.add("client_id", clientId);
ClientResponse response = resource().path("oauth2").path("client")
.path("deregister").path("confidential")
@@ -197,7 +217,7 @@
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.header(HttpHeaders.CONTENT_TYPE,
ContentType.APPLICATION_FORM_URLENCODED)
- .entity(form).delete(ClientResponse.class);
+ .delete(ClientResponse.class);
String entity = response.getEntity(String.class);
assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
@@ -205,7 +225,7 @@
JsonNode node = JsonUtils.readTree(entity);
assertEquals(OAuthError.TokenResponse.INVALID_CLIENT,
node.at("/error").asText());
- assertEquals("Invalid client credentials.",
+ assertEquals("Invalid client credentials",
node.at("/error_description").asText());
checkWWWAuthenticateHeader(response);
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ControllerTest.java
index 956e3ed..3214fda 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ControllerTest.java
@@ -2,6 +2,9 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.net.URI;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response.Status;
@@ -14,9 +17,7 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.net.HttpHeaders;
-import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
@@ -34,24 +35,99 @@
@Autowired
private HttpAuthorizationHandler handler;
- private ClientResponse testRequestTokenConfidentialClient (
- MultivaluedMap<String, String> form)
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
- return resource().path("oauth2").path("token")
+ private ClientResponse requestAuthorizationConfidentialClient (
+ MultivaluedMap<String, String> form) throws KustvaktException {
+
+ return resource().path("oauth2").path("authorize")
.header(Attributes.AUTHORIZATION,
handler.createBasicAuthorizationHeaderValue(
- "fCBbQkAyYzI4NzUxMg==", "secret"))
+ "fCBbQkAyYzI4NzUxMg", "secret"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.header(HttpHeaders.CONTENT_TYPE,
ContentType.APPLICATION_FORM_URLENCODED)
.entity(form).post(ClientResponse.class);
}
- private ClientResponse testRequestTokenPublicClient (
- MultivaluedMap<String, String> form)
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ @Test
+ public void testAuthorizeConfidentialClient () throws KustvaktException {
+ MultivaluedMap<String, String> form = new MultivaluedMapImpl();
+ form.add("response_type", "code");
+ form.add("client_id", "fCBbQkAyYzI4NzUxMg");
+ form.add("username", "dory");
+ form.add("password", "password");
+ ClientResponse response = requestAuthorizationConfidentialClient(form);
+
+ assertEquals(Status.TEMPORARY_REDIRECT.getStatusCode(),
+ response.getStatus());
+ URI redirectUri = response.getLocation();
+ assertTrue(redirectUri.getQuery().startsWith("code"));
+ }
+
+ @Test
+ public void testAuthorizeInvalidRedirectUri () throws KustvaktException {
+ String redirectUri = "https://different.uri/redirect";
+
+ MultivaluedMap<String, String> form = new MultivaluedMapImpl();
+ form.add("response_type", "code");
+ form.add("client_id", "fCBbQkAyYzI4NzUxMg");
+ form.add("username", "dory");
+ form.add("password", "password");
+ form.add("redirect_uri", redirectUri);
+ ClientResponse response = requestAuthorizationConfidentialClient(form);
+
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+
+ String entity = response.getEntity(String.class);
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(OAuthError.CodeResponse.INVALID_REQUEST,
+ node.at("/error").asText());
+ assertEquals(redirectUri + " is unknown",
+ node.at("/error_description").asText());
+ }
+
+ @Test
+ public void testAuthorizeMissingRequiredParameters ()
+ throws KustvaktException {
+ MultivaluedMap<String, String> form = new MultivaluedMapImpl();
+ // missing code
+ ClientResponse response = requestAuthorizationConfidentialClient(form);
+
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+
+ String entity = response.getEntity(String.class);
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(OAuthError.CodeResponse.INVALID_REQUEST,
+ node.at("/error").asText());
+ assertEquals("Missing response_type parameter value",
+ node.at("/error_description").asText());
+
+ // missing client_id
+ form.add("response_type", "code");
+ response = requestAuthorizationConfidentialClient(form);
+ entity = response.getEntity(String.class);
+ node = JsonUtils.readTree(entity);
+ assertEquals("Missing parameters: client_id",
+ node.at("/error_description").asText());
+ }
+
+ @Test
+ public void testAuthorizeInvalidResponseType () throws KustvaktException {
+ MultivaluedMap<String, String> form = new MultivaluedMapImpl();
+ form.add("response_type", "string");
+
+ ClientResponse response = requestAuthorizationConfidentialClient(form);
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+
+ String entity = response.getEntity(String.class);
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(OAuthError.CodeResponse.INVALID_REQUEST,
+ node.at("/error").asText());
+ assertEquals("Invalid response_type parameter value",
+ node.at("/error_description").asText());
+ }
+
+ private ClientResponse requestToken (MultivaluedMap<String, String> form)
+ throws KustvaktException {
return resource().path("oauth2").path("token")
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.header(HttpHeaders.CONTENT_TYPE,
@@ -61,12 +137,15 @@
@Test
public void testRequestTokenPasswordGrantConfidential ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("grant_type", "password");
+ form.add("client_id", "fCBbQkAyYzI4NzUxMg");
+ form.add("client_secret", "secret");
+ form.add("username", "dory");
+ form.add("password", "password");
- ClientResponse response = testRequestTokenConfidentialClient(form);
+ ClientResponse response = requestToken(form);
String entity = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(entity);
@@ -78,71 +157,80 @@
}
@Test
- public void testRequestTokenConfidentialMissingSecret ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ public void testRequestTokenPasswordGrantMissingClientSecret ()
+ throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("grant_type", "password");
- form.add("client_id", "fCBbQkAyYzI4NzUxMg==");
+ form.add("username", "dory");
+ form.add("password", "password");
+ form.add("client_id", "fCBbQkAyYzI4NzUxMg");
- ClientResponse response = testRequestTokenPublicClient(form);
- assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
+ ClientResponse response = requestToken(form);
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
String entity = response.getEntity(String.class);
JsonNode node = JsonUtils.readTree(entity);
- assertEquals(OAuthError.TokenResponse.INVALID_CLIENT,
+ assertEquals(OAuthError.TokenResponse.INVALID_REQUEST,
node.at("/error").asText());
- }
-
- @Test
- public void testRequestTokenPasswordGrantPublic ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
- MultivaluedMap<String, String> form = new MultivaluedMapImpl();
- form.add("grant_type", "password");
- form.add("client_id", "iBr3LsTCxOj7D2o0A5m");
-
- ClientResponse response = testRequestTokenPublicClient(form);
- String entity = response.getEntity(String.class);
-
- JsonNode node = JsonUtils.readTree(entity);
- assertNotNull(node.at("/access_token").asText());
- assertNotNull(node.at("/refresh_token").asText());
- assertEquals(TokenType.BEARER.toString(),
- node.at("/token_type").asText());
- assertNotNull(node.at("/expires_in").asText());
+ assertEquals("Missing parameters: client_secret",
+ node.at("/error_description").asText());
}
@Test
public void testRequestTokenPasswordGrantMissingClientId ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("grant_type", "password");
+ form.add("username", "dory");
+ form.add("password", "password");
+ form.add("client_secret", "secret");
- ClientResponse response = testRequestTokenPublicClient(form);
+ ClientResponse response = requestToken(form);
String entity = response.getEntity(String.class);
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
JsonNode node = JsonUtils.readTree(entity);
assertEquals(OAuthError.TokenResponse.INVALID_REQUEST,
node.at("/error").asText());
- assertEquals("client_id is missing",
+ assertEquals("Missing parameters: client_id",
node.at("/error_description").asText());
}
+
+ @Test
+ public void testRequestTokenPasswordGrantPublic ()
+ throws KustvaktException {
+ MultivaluedMap<String, String> form = new MultivaluedMapImpl();
+ form.add("grant_type", "password");
+ form.add("username", "dory");
+ form.add("password", "password");
+ form.add("client_id", "iBr3LsTCxOj7D2o0A5m");
+
+ ClientResponse response = requestToken(form);
+ String entity = response.getEntity(String.class);
+
+ JsonNode node = JsonUtils.readTree(entity);
+ assertNotNull(node.at("/access_token").asText());
+ assertNotNull(node.at("/refresh_token").asText());
+ assertEquals(TokenType.BEARER.toString(),
+ node.at("/token_type").asText());
+ assertNotNull(node.at("/expires_in").asText());
+ }
@Test
public void testRequestTokenPasswordGrantNonNative ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("grant_type", "password");
- form.add("client_id", "8bIDtZnH6NvRkW2Fq==");
+ form.add("username", "dory");
+ form.add("password", "password");
+ // confidential nonnative
+ form.add("client_id", "9aHsGW6QflV13ixNpez");
+ form.add("client_secret", "secret");
- ClientResponse response = testRequestTokenPublicClient(form);
+ ClientResponse response = requestToken(form);
String entity = response.getEntity(String.class);
- assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+ assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
JsonNode node = JsonUtils.readTree(entity);
assertEquals(OAuthError.TokenResponse.UNAUTHORIZED_CLIENT,
@@ -153,13 +241,13 @@
@Test
public void testRequestTokenClientCredentialsGrant ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("grant_type", "client_credentials");
-
- ClientResponse response = testRequestTokenConfidentialClient(form);
+ form.add("client_id", "fCBbQkAyYzI4NzUxMg");
+ form.add("client_secret", "secret");
+ ClientResponse response = requestToken(form);
String entity = response.getEntity(String.class);
assertEquals(Status.OK.getStatusCode(), response.getStatus());
@@ -173,11 +261,9 @@
}
@Test
- public void testRequestTokenMissingGrantType ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ public void testRequestTokenMissingGrantType () throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
- ClientResponse response = testRequestTokenConfidentialClient(form);
+ ClientResponse response = requestToken(form);
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
String entity = response.getEntity(String.class);
@@ -187,9 +273,7 @@
}
@Test
- public void testRequestTokenUnsupportedGrant ()
- throws UniformInterfaceException, ClientHandlerException,
- KustvaktException {
+ public void testRequestTokenUnsupportedGrant () throws KustvaktException {
MultivaluedMap<String, String> form = new MultivaluedMapImpl();
form.add("grant_type", "blahblah");
diff --git a/full/src/test/resources/test-config.xml b/full/src/test/resources/test-config.xml
index 0445d65..c0f7a2e 100644
--- a/full/src/test/resources/test-config.xml
+++ b/full/src/test/resources/test-config.xml
@@ -167,10 +167,10 @@
<!-- URLValidator -->
<bean id="urlValidator" class="org.apache.commons.validator.routines.UrlValidator">
- <constructor-arg value="http,https"/>
+ <constructor-arg value="http,https" />
</bean>
<bean id="httpsValidator" class="org.apache.commons.validator.routines.UrlValidator">
- <constructor-arg value="https"/>
+ <constructor-arg value="https" />
</bean>
<bean id="kustvakt_rewrite" class="de.ids_mannheim.korap.rewrite.FullRewriteHandler">
@@ -184,10 +184,18 @@
<bean id="kustvaktExceptionHandler" class="de.ids_mannheim.korap.web.KustvaktExceptionHandler">
<constructor-arg index="0" name="iface" ref="kustvakt_auditing" />
</bean>
+
+ <!-- OAuth -->
<bean id="oauth2ResponseHandler" class="de.ids_mannheim.korap.web.OAuth2ResponseHandler">
<constructor-arg index="0" name="iface" ref="kustvakt_auditing" />
</bean>
+ <bean id="mdGenerator" class="org.apache.oltu.oauth2.as.issuer.MD5Generator">
+ </bean>
+ <bean id="oauthIssuer" class="org.apache.oltu.oauth2.as.issuer.OAuthIssuerImpl">
+ <constructor-arg index="0" ref="mdGenerator" />
+ </bean>
+
<bean id="kustvakt_userdb" class="de.ids_mannheim.korap.handlers.EntityDao">
<constructor-arg ref="kustvakt_db" />
</bean>
@@ -200,8 +208,7 @@
<constructor-arg ref="kustvakt_db" />
</bean>
- <bean name="kustvakt_encryption"
- class="de.ids_mannheim.korap.encryption.KustvaktEncryption">
+ <bean name="kustvakt_encryption" class="de.ids_mannheim.korap.encryption.KustvaktEncryption">
<constructor-arg ref="kustvakt_config" />
</bean>
@@ -267,8 +274,8 @@
<!-- specify type for constructor argument -->
<bean id="kustvakt_authenticationmanager"
class="de.ids_mannheim.korap.authentication.KustvaktAuthenticationManager">
- <constructor-arg
- type="de.ids_mannheim.korap.interfaces.EntityHandlerIface" ref="kustvakt_userdb" />
+ <constructor-arg type="de.ids_mannheim.korap.interfaces.EntityHandlerIface"
+ ref="kustvakt_userdb" />
<constructor-arg type="de.ids_mannheim.korap.interfaces.EncryptionIface"
ref="kustvakt_encryption" />
<constructor-arg ref="kustvakt_config" />
@@ -309,8 +316,8 @@
<!-- mail -->
<bean id="authenticator" class="de.ids_mannheim.korap.service.MailAuthenticator">
- <constructor-arg index="0" value="${mail.username}"/>
- <constructor-arg index="1" value="${mail.password}"/>
+ <constructor-arg index="0" value="${mail.username}" />
+ <constructor-arg index="1" value="${mail.password}" />
</bean>
<bean id="smtpSession" class="javax.mail.Session" factory-method="getInstance">
<constructor-arg index="0">
@@ -323,7 +330,7 @@
<prop key="mail.smtp.connectiontimeout">${mail.connectiontimeout}</prop>
</props>
</constructor-arg>
- <constructor-arg index="1" ref="authenticator"/>
+ <constructor-arg index="1" ref="authenticator" />
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="session" ref="smtpSession" />