├── .design └── main │ └── webapp │ └── frontend │ └── src │ └── app │ └── list-persons │ └── list-persons.component.ts ├── .mvn └── wrapper │ ├── MavenWrapperDownloader.java │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── Dockerfile ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main ├── applogs │ ├── app.log │ └── app.log.2020-04-27.0.gz ├── java │ └── com │ │ └── selimhorri │ │ └── pack │ │ ├── SpringBootAndAngularApplication.java │ │ ├── configs │ │ └── CorsConfig.java │ │ ├── controllers │ │ └── PersonController.java │ │ ├── entities │ │ ├── Person.java │ │ └── read_only │ │ │ └── PersonReadOnly.java │ │ ├── repositories │ │ └── PersonRepository.java │ │ └── services │ │ ├── PersonService.java │ │ └── PersonServiceImpl.java └── resources │ ├── META-INF │ └── jpa-named-queries.properties │ ├── application-dev.properties │ ├── application-prod.properties │ ├── application-qa.properties │ ├── application.properties │ ├── scripts │ └── SQL │ │ └── person_db.sql │ └── static │ ├── favicon.ico │ ├── index.html │ ├── main-es2015.js │ ├── main-es2015.js.map │ ├── main-es5.js │ ├── main-es5.js.map │ ├── polyfills-es2015.js │ ├── polyfills-es2015.js.map │ ├── polyfills-es5.js │ ├── polyfills-es5.js.map │ ├── runtime-es2015.js │ ├── runtime-es2015.js.map │ ├── runtime-es5.js │ ├── runtime-es5.js.map │ ├── styles-es2015.js │ ├── styles-es2015.js.map │ ├── styles-es5.js │ ├── styles-es5.js.map │ ├── vendor-es2015.js │ ├── vendor-es2015.js.map │ ├── vendor-es5.js │ └── vendor-es5.js.map └── test └── java └── com └── selimhorri └── pack └── SpringBootAndAngularApplicationTests.java /.design/main/webapp/frontend/src/app/list-persons/list-persons.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-list-persons', 5 | templateUrl: './list-persons.component.html', 6 | styleUrls: ['./list-persons.component.css'] 7 | }) 8 | export class ListPersonsComponent implements OnInit { 9 | 10 | persons = [ 11 | {id: '1', fname: 'selim', lname: 'horri', email: '@hotmail', password: '123'}, 12 | {id: '2', fname: 'omar', lname: 'derouiche', email: '@gmail', password: '456'}, 13 | {id: '3', fname: 'amine', lname: 'ladjimi', email: '@yahoo', password: '789'} 14 | ]; 15 | 16 | constructor() { 17 | 18 | } 19 | 20 | ngOnInit(): void { 21 | 22 | } 23 | 24 | } 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /.mvn/wrapper/MavenWrapperDownloader.java: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | https://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | 20 | import java.io.File; 21 | import java.io.FileInputStream; 22 | import java.io.FileOutputStream; 23 | import java.io.IOException; 24 | import java.net.URL; 25 | import java.nio.channels.Channels; 26 | import java.nio.channels.ReadableByteChannel; 27 | import java.util.Properties; 28 | 29 | public class MavenWrapperDownloader { 30 | 31 | /** 32 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. 33 | */ 34 | private static final String DEFAULT_DOWNLOAD_URL = 35 | "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; 36 | 37 | /** 38 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to 39 | * use instead of the default one. 40 | */ 41 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH = 42 | ".mvn/wrapper/maven-wrapper.properties"; 43 | 44 | /** 45 | * Path where the maven-wrapper.jar will be saved to. 46 | */ 47 | private static final String MAVEN_WRAPPER_JAR_PATH = 48 | ".mvn/wrapper/maven-wrapper.jar"; 49 | 50 | /** 51 | * Name of the property which should be used to override the default download url for the wrapper. 52 | */ 53 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; 54 | 55 | public static void main(String args[]) { 56 | System.out.println("- Downloader started"); 57 | File baseDirectory = new File(args[0]); 58 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); 59 | 60 | // If the maven-wrapper.properties exists, read it and check if it contains a custom 61 | // wrapperUrl parameter. 62 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); 63 | String url = DEFAULT_DOWNLOAD_URL; 64 | if(mavenWrapperPropertyFile.exists()) { 65 | FileInputStream mavenWrapperPropertyFileInputStream = null; 66 | try { 67 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); 68 | Properties mavenWrapperProperties = new Properties(); 69 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); 70 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); 71 | } catch (IOException e) { 72 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); 73 | } finally { 74 | try { 75 | if(mavenWrapperPropertyFileInputStream != null) { 76 | mavenWrapperPropertyFileInputStream.close(); 77 | } 78 | } catch (IOException e) { 79 | // Ignore ... 80 | } 81 | } 82 | } 83 | System.out.println("- Downloading from: : " + url); 84 | 85 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); 86 | if(!outputFile.getParentFile().exists()) { 87 | if(!outputFile.getParentFile().mkdirs()) { 88 | System.out.println( 89 | "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); 90 | } 91 | } 92 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); 93 | try { 94 | downloadFileFromURL(url, outputFile); 95 | System.out.println("Done"); 96 | System.exit(0); 97 | } catch (Throwable e) { 98 | System.out.println("- Error downloading"); 99 | e.printStackTrace(); 100 | System.exit(1); 101 | } 102 | } 103 | 104 | private static void downloadFileFromURL(String urlString, File destination) throws Exception { 105 | URL website = new URL(urlString); 106 | ReadableByteChannel rbc; 107 | rbc = Channels.newChannel(website.openStream()); 108 | FileOutputStream fos = new FileOutputStream(destination); 109 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 110 | fos.close(); 111 | rbc.close(); 112 | } 113 | 114 | } 115 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SelimHorri/spring-boot-angular-confinement/ca7dafd5c8ff21533ad2c325ae26abb534184a7e/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8 2 | EXPOSE 8080 3 | ADD target/spring-angular-app.jar spring-angular-app.jar 4 | ENTRYPOINT ["java", "-jar", "spring-angular-app.jar"] 5 | -------------------------------------------------------------------------------- /mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # https://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven2 Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 59 | if [ -z "$JAVA_HOME" ]; then 60 | if [ -x "/usr/libexec/java_home" ]; then 61 | export JAVA_HOME="`/usr/libexec/java_home`" 62 | else 63 | export JAVA_HOME="/Library/Java/Home" 64 | fi 65 | fi 66 | ;; 67 | esac 68 | 69 | if [ -z "$JAVA_HOME" ] ; then 70 | if [ -r /etc/gentoo-release ] ; then 71 | JAVA_HOME=`java-config --jre-home` 72 | fi 73 | fi 74 | 75 | if [ -z "$M2_HOME" ] ; then 76 | ## resolve links - $0 may be a link to maven's home 77 | PRG="$0" 78 | 79 | # need this for relative symlinks 80 | while [ -h "$PRG" ] ; do 81 | ls=`ls -ld "$PRG"` 82 | link=`expr "$ls" : '.*-> \(.*\)$'` 83 | if expr "$link" : '/.*' > /dev/null; then 84 | PRG="$link" 85 | else 86 | PRG="`dirname "$PRG"`/$link" 87 | fi 88 | done 89 | 90 | saveddir=`pwd` 91 | 92 | M2_HOME=`dirname "$PRG"`/.. 93 | 94 | # make it fully qualified 95 | M2_HOME=`cd "$M2_HOME" && pwd` 96 | 97 | cd "$saveddir" 98 | # echo Using m2 at $M2_HOME 99 | fi 100 | 101 | # For Cygwin, ensure paths are in UNIX format before anything is touched 102 | if $cygwin ; then 103 | [ -n "$M2_HOME" ] && 104 | M2_HOME=`cygpath --unix "$M2_HOME"` 105 | [ -n "$JAVA_HOME" ] && 106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 107 | [ -n "$CLASSPATH" ] && 108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 109 | fi 110 | 111 | # For Mingw, ensure paths are in UNIX format before anything is touched 112 | if $mingw ; then 113 | [ -n "$M2_HOME" ] && 114 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 115 | [ -n "$JAVA_HOME" ] && 116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 117 | # TODO classpath? 118 | fi 119 | 120 | if [ -z "$JAVA_HOME" ]; then 121 | javaExecutable="`which javac`" 122 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 123 | # readlink(1) is not available as standard on Solaris 10. 124 | readLink=`which readlink` 125 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 126 | if $darwin ; then 127 | javaHome="`dirname \"$javaExecutable\"`" 128 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 129 | else 130 | javaExecutable="`readlink -f \"$javaExecutable\"`" 131 | fi 132 | javaHome="`dirname \"$javaExecutable\"`" 133 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 134 | JAVA_HOME="$javaHome" 135 | export JAVA_HOME 136 | fi 137 | fi 138 | fi 139 | 140 | if [ -z "$JAVACMD" ] ; then 141 | if [ -n "$JAVA_HOME" ] ; then 142 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 143 | # IBM's JDK on AIX uses strange locations for the executables 144 | JAVACMD="$JAVA_HOME/jre/sh/java" 145 | else 146 | JAVACMD="$JAVA_HOME/bin/java" 147 | fi 148 | else 149 | JAVACMD="`which java`" 150 | fi 151 | fi 152 | 153 | if [ ! -x "$JAVACMD" ] ; then 154 | echo "Error: JAVA_HOME is not defined correctly." >&2 155 | echo " We cannot execute $JAVACMD" >&2 156 | exit 1 157 | fi 158 | 159 | if [ -z "$JAVA_HOME" ] ; then 160 | echo "Warning: JAVA_HOME environment variable is not set." 161 | fi 162 | 163 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 164 | 165 | # traverses directory structure from process work directory to filesystem root 166 | # first directory with .mvn subdirectory is considered project base directory 167 | find_maven_basedir() { 168 | 169 | if [ -z "$1" ] 170 | then 171 | echo "Path not specified to find_maven_basedir" 172 | return 1 173 | fi 174 | 175 | basedir="$1" 176 | wdir="$1" 177 | while [ "$wdir" != '/' ] ; do 178 | if [ -d "$wdir"/.mvn ] ; then 179 | basedir=$wdir 180 | break 181 | fi 182 | # workaround for JBEAP-8937 (on Solaris 10/Sparc) 183 | if [ -d "${wdir}" ]; then 184 | wdir=`cd "$wdir/.."; pwd` 185 | fi 186 | # end of workaround 187 | done 188 | echo "${basedir}" 189 | } 190 | 191 | # concatenates all lines of a file 192 | concat_lines() { 193 | if [ -f "$1" ]; then 194 | echo "$(tr -s '\n' ' ' < "$1")" 195 | fi 196 | } 197 | 198 | BASE_DIR=`find_maven_basedir "$(pwd)"` 199 | if [ -z "$BASE_DIR" ]; then 200 | exit 1; 201 | fi 202 | 203 | ########################################################################################## 204 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 205 | # This allows using the maven wrapper in projects that prohibit checking in binary data. 206 | ########################################################################################## 207 | if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then 208 | if [ "$MVNW_VERBOSE" = true ]; then 209 | echo "Found .mvn/wrapper/maven-wrapper.jar" 210 | fi 211 | else 212 | if [ "$MVNW_VERBOSE" = true ]; then 213 | echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." 214 | fi 215 | jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" 216 | while IFS="=" read key value; do 217 | case "$key" in (wrapperUrl) jarUrl="$value"; break ;; 218 | esac 219 | done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" 220 | if [ "$MVNW_VERBOSE" = true ]; then 221 | echo "Downloading from: $jarUrl" 222 | fi 223 | wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" 224 | 225 | if command -v wget > /dev/null; then 226 | if [ "$MVNW_VERBOSE" = true ]; then 227 | echo "Found wget ... using wget" 228 | fi 229 | wget "$jarUrl" -O "$wrapperJarPath" 230 | elif command -v curl > /dev/null; then 231 | if [ "$MVNW_VERBOSE" = true ]; then 232 | echo "Found curl ... using curl" 233 | fi 234 | curl -o "$wrapperJarPath" "$jarUrl" 235 | else 236 | if [ "$MVNW_VERBOSE" = true ]; then 237 | echo "Falling back to using Java to download" 238 | fi 239 | javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" 240 | if [ -e "$javaClass" ]; then 241 | if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 242 | if [ "$MVNW_VERBOSE" = true ]; then 243 | echo " - Compiling MavenWrapperDownloader.java ..." 244 | fi 245 | # Compiling the Java class 246 | ("$JAVA_HOME/bin/javac" "$javaClass") 247 | fi 248 | if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 249 | # Running the downloader 250 | if [ "$MVNW_VERBOSE" = true ]; then 251 | echo " - Running MavenWrapperDownloader.java ..." 252 | fi 253 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") 254 | fi 255 | fi 256 | fi 257 | fi 258 | ########################################################################################## 259 | # End of extension 260 | ########################################################################################## 261 | 262 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 263 | if [ "$MVNW_VERBOSE" = true ]; then 264 | echo $MAVEN_PROJECTBASEDIR 265 | fi 266 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 267 | 268 | # For Cygwin, switch paths to Windows format before running java 269 | if $cygwin; then 270 | [ -n "$M2_HOME" ] && 271 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 272 | [ -n "$JAVA_HOME" ] && 273 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 274 | [ -n "$CLASSPATH" ] && 275 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 276 | [ -n "$MAVEN_PROJECTBASEDIR" ] && 277 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 278 | fi 279 | 280 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 281 | 282 | exec "$JAVACMD" \ 283 | $MAVEN_OPTS \ 284 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 285 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 286 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 287 | -------------------------------------------------------------------------------- /mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM https://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven2 Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM set title of command window 39 | title %0 40 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' 41 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 42 | 43 | @REM set %HOME% to equivalent of $HOME 44 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 45 | 46 | @REM Execute a user defined script before this one 47 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 48 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 49 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 50 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 51 | :skipRcPre 52 | 53 | @setlocal 54 | 55 | set ERROR_CODE=0 56 | 57 | @REM To isolate internal variables from possible post scripts, we use another setlocal 58 | @setlocal 59 | 60 | @REM ==== START VALIDATION ==== 61 | if not "%JAVA_HOME%" == "" goto OkJHome 62 | 63 | echo. 64 | echo Error: JAVA_HOME not found in your environment. >&2 65 | echo Please set the JAVA_HOME variable in your environment to match the >&2 66 | echo location of your Java installation. >&2 67 | echo. 68 | goto error 69 | 70 | :OkJHome 71 | if exist "%JAVA_HOME%\bin\java.exe" goto init 72 | 73 | echo. 74 | echo Error: JAVA_HOME is set to an invalid directory. >&2 75 | echo JAVA_HOME = "%JAVA_HOME%" >&2 76 | echo Please set the JAVA_HOME variable in your environment to match the >&2 77 | echo location of your Java installation. >&2 78 | echo. 79 | goto error 80 | 81 | @REM ==== END VALIDATION ==== 82 | 83 | :init 84 | 85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 86 | @REM Fallback to current working directory if not found. 87 | 88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 90 | 91 | set EXEC_DIR=%CD% 92 | set WDIR=%EXEC_DIR% 93 | :findBaseDir 94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 95 | cd .. 96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 97 | set WDIR=%CD% 98 | goto findBaseDir 99 | 100 | :baseDirFound 101 | set MAVEN_PROJECTBASEDIR=%WDIR% 102 | cd "%EXEC_DIR%" 103 | goto endDetectBaseDir 104 | 105 | :baseDirNotFound 106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 107 | cd "%EXEC_DIR%" 108 | 109 | :endDetectBaseDir 110 | 111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 112 | 113 | @setlocal EnableExtensions EnableDelayedExpansion 114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 116 | 117 | :endReadAdditionalConfig 118 | 119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 120 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" 121 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 122 | 123 | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" 124 | FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( 125 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B 126 | ) 127 | 128 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 129 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data. 130 | if exist %WRAPPER_JAR% ( 131 | echo Found %WRAPPER_JAR% 132 | ) else ( 133 | echo Couldn't find %WRAPPER_JAR%, downloading it ... 134 | echo Downloading from: %DOWNLOAD_URL% 135 | powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" 136 | echo Finished downloading %WRAPPER_JAR% 137 | ) 138 | @REM End of extension 139 | 140 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 141 | if ERRORLEVEL 1 goto error 142 | goto end 143 | 144 | :error 145 | set ERROR_CODE=1 146 | 147 | :end 148 | @endlocal & set ERROR_CODE=%ERROR_CODE% 149 | 150 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 151 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 152 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 153 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 154 | :skipRcPost 155 | 156 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 157 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 158 | 159 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 160 | 161 | exit /B %ERROR_CODE% 162 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 4.0.0 6 | 7 | org.springframework.boot 8 | spring-boot-starter-parent 9 | 2.1.7.RELEASE 10 | 11 | 12 | com.salim.app 13 | spring-Angular 14 | 0.0.1-SNAPSHOT 15 | SpringBoot-and-Angular 16 | XXX 17 | jar 18 | 19 | 20 | 1.8 21 | 1.8 22 | 1.8 23 | 24 | 25 | 26 | 27 | org.springframework.boot 28 | spring-boot-starter-actuator 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-data-jpa 33 | 34 | 35 | org.springframework.boot 36 | spring-boot-starter-web 37 | 38 | 39 | 40 | org.springframework.boot 41 | spring-boot-devtools 42 | compile 43 | true 44 | 45 | 46 | 47 | 48 | com.fasterxml.jackson.datatype 49 | jackson-datatype-jsr310 50 | 51 | 52 | 53 | 54 | org.springframework.boot 55 | spring-boot-starter-data-elasticsearch 56 | 57 | 58 | 59 | mysql 60 | mysql-connector-java 61 | 62 | 63 | org.springframework.boot 64 | spring-boot-starter-test 65 | test 66 | 67 | 68 | 69 | 70 | 71 | 72 | org.springframework.boot 73 | spring-boot-maven-plugin 74 | 75 | 76 | spring-angular-app 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /src/main/applogs/app.log.2020-04-27.0.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SelimHorri/spring-boot-angular-confinement/ca7dafd5c8ff21533ad2c325ae26abb534184a7e/src/main/applogs/app.log.2020-04-27.0.gz -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/SpringBootAndAngularApplication.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class SpringBootAndAngularApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(SpringBootAndAngularApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/configs/CorsConfig.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack.configs; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.cors.CorsConfiguration; 6 | import org.springframework.web.cors.UrlBasedCorsConfigurationSource; 7 | import org.springframework.web.filter.CorsFilter; 8 | 9 | @Configuration 10 | public class CorsConfig { 11 | 12 | @Bean 13 | public CorsFilter corsFilter() { 14 | UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 15 | CorsConfiguration config = new CorsConfiguration(); 16 | config.setAllowCredentials(true); 17 | config.addAllowedOrigin("*"); 18 | config.addAllowedHeader("*"); 19 | config.addAllowedMethod("OPTIONS"); 20 | config.addAllowedMethod("GET"); 21 | config.addAllowedMethod("POST"); 22 | config.addAllowedMethod("PUT"); 23 | config.addAllowedMethod("DELETE"); 24 | source.registerCorsConfiguration("/**", config); 25 | return new CorsFilter(source); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/controllers/PersonController.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack.controllers; 2 | 3 | import java.util.List; 4 | 5 | import javax.validation.Valid; 6 | 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.context.annotation.Lazy; 9 | import org.springframework.web.bind.annotation.CrossOrigin; 10 | import org.springframework.web.bind.annotation.DeleteMapping; 11 | import org.springframework.web.bind.annotation.GetMapping; 12 | import org.springframework.web.bind.annotation.PathVariable; 13 | import org.springframework.web.bind.annotation.PostMapping; 14 | import org.springframework.web.bind.annotation.PutMapping; 15 | import org.springframework.web.bind.annotation.RequestBody; 16 | import org.springframework.web.bind.annotation.RequestMapping; 17 | import org.springframework.web.bind.annotation.RestController; 18 | 19 | import com.selimhorri.pack.entities.Person; 20 | import com.selimhorri.pack.entities.read_only.PersonReadOnly; 21 | import com.selimhorri.pack.services.PersonService; 22 | 23 | @RestController 24 | @CrossOrigin 25 | @RequestMapping("/persons") 26 | public class PersonController { 27 | // Begin Class 28 | 29 | private final PersonService service; 30 | 31 | @Autowired 32 | @Lazy 33 | public PersonController(final PersonService service) { 34 | this.service = service; 35 | } 36 | 37 | @GetMapping(value = {"","/"}) 38 | public List listPersons() { 39 | return this.service.listPersons(); 40 | } 41 | 42 | @GetMapping(value = {"/{id}"}) 43 | public PersonReadOnly getPerson(@PathVariable("id") @Valid final Integer id) { 44 | return this.service.getPerson(id); 45 | } 46 | 47 | @PostMapping(value = {"","/save"}) 48 | public PersonReadOnly savePerson(@RequestBody @Valid final Person person) { 49 | return this.service.savePerson(person); 50 | } 51 | 52 | @PutMapping(value = {"","/update"}) 53 | public PersonReadOnly updatePerson(@RequestBody @Valid final Person person) { 54 | return this.service.updatePerson(person); 55 | } 56 | 57 | @DeleteMapping(value = {"{id}","/delete/{id}"}) 58 | public void deletePerson(@PathVariable("id") @Valid final Integer id) { 59 | this.service.deletePerson(id); 60 | } 61 | 62 | 63 | 64 | // End Class 65 | } 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/entities/Person.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack.entities; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.persistence.Column; 6 | import javax.persistence.Entity; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.Table; 11 | import javax.validation.constraints.Email; 12 | 13 | import org.springframework.data.annotation.Immutable; 14 | 15 | import com.fasterxml.jackson.annotation.JsonIgnore; 16 | import com.fasterxml.jackson.annotation.JsonProperty; 17 | import com.fasterxml.jackson.annotation.JsonPropertyOrder; 18 | import com.selimhorri.pack.entities.read_only.PersonReadOnly; 19 | 20 | @Entity 21 | @Table(name = "person") 22 | @Immutable 23 | @JsonPropertyOrder(value = {"id", "fname", "lname", "email", "password"}) 24 | public final class Person implements Serializable, PersonReadOnly { 25 | // Begin Class 26 | 27 | private static final long serialVersionUID = 1L; 28 | 29 | @Id 30 | @GeneratedValue(strategy = GenerationType.IDENTITY) 31 | @JsonProperty(value = "id") 32 | @Column(name = "id") 33 | private int id; 34 | 35 | @JsonProperty(value = "fname") 36 | @Column(name = "fname") 37 | private String fname; 38 | 39 | @JsonProperty(value = "lname") 40 | @Column(name = "lname") 41 | private String lname; 42 | 43 | @Email 44 | @JsonProperty(value = "email") 45 | @Column(name = "email") 46 | private String email; 47 | 48 | @JsonIgnore 49 | @JsonProperty(value = "password") 50 | @Column(name = "password") 51 | private String password; 52 | 53 | public Person() { 54 | 55 | } 56 | 57 | public Person(String fname, String lname, String email, String password) { 58 | this.fname = fname; 59 | this.lname = lname; 60 | this.email = email; 61 | this.password = password; 62 | } 63 | 64 | public Person(int id, String fname, String lname, String email, String password) { 65 | this.id = id; 66 | this.fname = fname; 67 | this.lname = lname; 68 | this.email = email; 69 | this.password = password; 70 | } 71 | 72 | @Override 73 | public String toString() { 74 | return "Person [id=" + id + ", fname=" + fname + ", lname=" + lname + ", email=" + email + ", password=" 75 | + password + "]"; 76 | } 77 | 78 | @Override 79 | public int getId() { 80 | return id; 81 | } 82 | 83 | public void setId(int id) { 84 | this.id = id; 85 | } 86 | 87 | @Override 88 | public String getFname() { 89 | return fname; 90 | } 91 | 92 | public void setFname(String fname) { 93 | this.fname = fname; 94 | } 95 | 96 | @Override 97 | public String getLname() { 98 | return lname; 99 | } 100 | 101 | public void setLname(String lname) { 102 | this.lname = lname; 103 | } 104 | 105 | @Override 106 | public String getEmail() { 107 | return email; 108 | } 109 | 110 | public void setEmail(String email) { 111 | this.email = email; 112 | } 113 | 114 | @Override 115 | public String getPassword() { 116 | return password; 117 | } 118 | 119 | public void setPassword(String password) { 120 | this.password = password; 121 | } 122 | 123 | 124 | 125 | // End Class 126 | } 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/entities/read_only/PersonReadOnly.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack.entities.read_only; 2 | 3 | import org.springframework.data.annotation.Immutable; 4 | 5 | @Immutable 6 | public interface PersonReadOnly { 7 | 8 | public abstract int getId(); 9 | public abstract String getFname(); 10 | public abstract String getLname(); 11 | public abstract String getEmail(); 12 | public abstract String getPassword(); 13 | public abstract String toString(); 14 | 15 | } 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/repositories/PersonRepository.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | 6 | import com.selimhorri.pack.entities.Person; 7 | 8 | @Repository 9 | public interface PersonRepository extends JpaRepository { 10 | // Begin Interface 11 | 12 | 13 | 14 | // End Interface 15 | } 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/services/PersonService.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack.services; 2 | 3 | import java.util.List; 4 | 5 | import com.selimhorri.pack.entities.Person; 6 | import com.selimhorri.pack.entities.read_only.PersonReadOnly; 7 | 8 | public interface PersonService { 9 | // Begin Interface 10 | 11 | public abstract List listPersons(); 12 | public abstract PersonReadOnly getPerson(final int id); 13 | public abstract PersonReadOnly savePerson(final Person person); 14 | public abstract PersonReadOnly updatePerson(final Person person); 15 | public abstract void deletePerson(final int id); 16 | 17 | // End Interface 18 | } 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/main/java/com/selimhorri/pack/services/PersonServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack.services; 2 | 3 | import java.util.Collections; 4 | import java.util.List; 5 | 6 | import javax.transaction.Transactional; 7 | 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.context.annotation.Lazy; 10 | import org.springframework.stereotype.Service; 11 | 12 | import com.selimhorri.pack.entities.Person; 13 | import com.selimhorri.pack.entities.read_only.PersonReadOnly; 14 | import com.selimhorri.pack.repositories.PersonRepository; 15 | 16 | @Service 17 | @Transactional 18 | public class PersonServiceImpl implements PersonService { 19 | // Begin Class 20 | 21 | private final PersonRepository rep; 22 | 23 | @Autowired 24 | @Lazy 25 | public PersonServiceImpl(final PersonRepository rep) { 26 | this.rep = rep; 27 | } 28 | 29 | @Override 30 | public List listPersons() { 31 | return Collections.unmodifiableList(this.rep.findAll()); 32 | } 33 | 34 | @Override 35 | public PersonReadOnly getPerson(final int id) { 36 | return this.rep.findById(id).get(); 37 | } 38 | 39 | @Override 40 | public PersonReadOnly savePerson(final Person person) { 41 | return this.rep.save(person); 42 | } 43 | 44 | @Override 45 | public PersonReadOnly updatePerson(final Person person) { 46 | return this.rep.save(person); 47 | } 48 | 49 | @Override 50 | public void deletePerson(final int id) { 51 | this.rep.deleteById(id); 52 | } 53 | 54 | 55 | 56 | // End Class 57 | } 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/jpa-named-queries.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SelimHorri/spring-boot-angular-confinement/ca7dafd5c8ff21533ad2c325ae26abb534184a7e/src/main/resources/META-INF/jpa-named-queries.properties -------------------------------------------------------------------------------- /src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | 2 | server.port=8050 3 | 4 | # Some properties ***************************************************************************************************************** 5 | #spring.mvc.view.prefix=/WEB-INF/views/ 6 | #spring.mvc.view.suffix=.jsp 7 | logging.level.org.springframework.boot.web=debug 8 | logging.level.org.springframework.boot.autoconfigure.data.rest=debug 9 | logging.level.org.springframework.boot.autoconfigure.data.jpa=debug 10 | logging.level.org.springframework.boot.autoconfigure.data.web=debug 11 | logging.level.org.hibernate.SQL=DEBUG 12 | logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 13 | 14 | logging.file = src/main/applogs/app.log 15 | 16 | # Connection url for the database ************************************************************************************************** 17 | spring.datasource.url = jdbc:mysql://localhost:3306/${dbName} 18 | 19 | # Username and password ************************************************************************************************************ 20 | spring.datasource.username = ${username} 21 | spring.datasource.password = ${password} 22 | 23 | spring.jackson.serialization.indent-output = true 24 | 25 | ## Hibernate Properties 26 | # The SQL dialect makes Hibernate generate better SQL for the chosen database 27 | spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect 28 | 29 | # Hibernate ddl auto (create, create-drop, validate, update) 30 | #spring.jpa.hibernate.ddl-auto = update 31 | 32 | # Show or not log for each sql query *********************************************************************************************** 33 | spring.jpa.show-sql = true 34 | #spring.jpa.properties.hibernate.show_sql=true 35 | #spring.jpa.properties.hibernate.use_sql_comments=true 36 | spring.jpa.properties.hibernate.format_sql=true 37 | 38 | 39 | # Giving a root path to the app : "locationwebapp" 40 | #server.servlet.context-path = /personwebapp 41 | 42 | spring.jpa.properties.javax.persistence.schema-generation.create-source = metadata 43 | spring.jpa.properties.javax.persistence.schema-generation.scripts.action = create 44 | spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target = src/main/resources/scripts/SQL/${dbName}.sql 45 | 46 | # Email configurations [gmail allows connectiong on 587 port to use SMTP protocol] 47 | spring.mail.host=smtp.gmail.com 48 | spring.mail.port=587 49 | spring.mail.username=springabcxyzboot@gmail.com 50 | spring.mail.password=A4815162342z 51 | spring.mail.properties.mail.smtp.starttls.enable=true 52 | spring.mail.properties.mail.smtp.starttls.required=true 53 | spring.mail.properties.mail.smtp.auth=true 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/main/resources/application-prod.properties: -------------------------------------------------------------------------------- 1 | 2 | server.port=8070 3 | 4 | logging.level.org.springframework.boot.web=debug 5 | 6 | logging.file = src/main/applogs/app.log 7 | 8 | # Connection url for the database ************************************************************************************************** 9 | spring.datasource.url = jdbc:mysql://localhost:3306/${serviceName} 10 | 11 | # Username and password ************************************************************************************************************ 12 | spring.datasource.username = ${username} 13 | spring.datasource.password = ${password} 14 | 15 | spring.jackson.serialization.indent-output = true 16 | 17 | ## Hibernate Properties 18 | # The SQL dialect makes Hibernate generate better SQL for the chosen database 19 | spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect 20 | 21 | # Giving a root path to the app : "locationwebapp" 22 | #server.servlet.context-path = /personwebapp 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/main/resources/application-qa.properties: -------------------------------------------------------------------------------- 1 | 2 | server.port=8050 3 | 4 | # Some properties ***************************************************************************************************************** 5 | #spring.mvc.view.prefix=/WEB-INF/views/ 6 | #spring.mvc.view.suffix=.jsp 7 | logging.level.org.springframework.boot.web=debug 8 | logging.level.org.springframework.boot.autoconfigure.data.rest=debug 9 | logging.level.org.springframework.boot.autoconfigure.data.jpa=debug 10 | logging.level.org.springframework.boot.autoconfigure.data.web=debug 11 | logging.level.org.hibernate.SQL=DEBUG 12 | logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 13 | 14 | logging.file = src/main/applogs/app.log 15 | 16 | # Connection url for the database ************************************************************************************************** 17 | spring.datasource.url = jdbc:mysql://localhost:3306/${dbName} 18 | 19 | # Username and password ************************************************************************************************************ 20 | spring.datasource.username = ${username} 21 | spring.datasource.password = ${password} 22 | 23 | spring.jackson.serialization.indent-output = true 24 | 25 | ## Hibernate Properties 26 | # The SQL dialect makes Hibernate generate better SQL for the chosen database 27 | spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect 28 | 29 | # Hibernate ddl auto (create, create-drop, validate, update) 30 | #spring.jpa.hibernate.ddl-auto = update 31 | 32 | # Show or not log for each sql query *********************************************************************************************** 33 | spring.jpa.show-sql = true 34 | #spring.jpa.properties.hibernate.show_sql=true 35 | #spring.jpa.properties.hibernate.use_sql_comments=true 36 | spring.jpa.properties.hibernate.format_sql=true 37 | 38 | 39 | # Giving a root path to the app : "locationwebapp" 40 | #server.servlet.context-path = /personwebapp 41 | 42 | spring.jpa.properties.javax.persistence.schema-generation.create-source = metadata 43 | spring.jpa.properties.javax.persistence.schema-generation.scripts.action = create 44 | spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target = src/main/resources/scripts/SQL/${dbName}.sql 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | server.port=8080 3 | 4 | # Some properties ***************************************************************************************************************** 5 | #spring.mvc.view.prefix=/WEB-INF/views/ 6 | #spring.mvc.view.suffix=.jsp 7 | logging.level.org.springframework.boot.web=debug 8 | logging.level.org.springframework.boot.autoconfigure.data.rest=debug 9 | logging.level.org.springframework.boot.autoconfigure.data.jpa=debug 10 | logging.level.org.springframework.boot.autoconfigure.data.web=debug 11 | logging.level.org.hibernate.SQL=DEBUG 12 | logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 13 | 14 | logging.file = src/main/applogs/app.log 15 | 16 | # Connection url for the database ************************************************************************************************** 17 | spring.datasource.url = jdbc:mysql://localhost:3306/${dbName} 18 | 19 | # Username and password ************************************************************************************************************ 20 | spring.datasource.username = ${username} 21 | spring.datasource.password = ${Dashwood} 22 | 23 | spring.jackson.serialization.indent-output = true 24 | 25 | ## Hibernate Properties 26 | # The SQL dialect makes Hibernate generate better SQL for the chosen database 27 | spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect 28 | 29 | # Hibernate ddl auto (create, create-drop, validate, update) 30 | #spring.jpa.hibernate.ddl-auto = update 31 | 32 | # Show or not log for each sql query *********************************************************************************************** 33 | spring.jpa.show-sql = true 34 | #spring.jpa.properties.hibernate.show_sql=true 35 | #spring.jpa.properties.hibernate.use_sql_comments=true 36 | spring.jpa.properties.hibernate.format_sql=true 37 | 38 | 39 | # Giving a root path to the app 40 | #server.servlet.context-path = /personwebapp 41 | 42 | spring.jpa.properties.javax.persistence.schema-generation.create-source = metadata 43 | spring.jpa.properties.javax.persistence.schema-generation.scripts.action = create 44 | spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target = src/main/resources/scripts/SQL/${dbName}.sql 45 | 46 | # Email configurations [gmail allows connectiong on 587 port to use SMTP protocol] 47 | spring.mail.host=smtp.gmail.com 48 | spring.mail.port=587 49 | spring.mail.username=springabcxyzboot@gmail.com 50 | spring.mail.password=A4815162342z 51 | spring.mail.properties.mail.smtp.starttls.enable=true 52 | spring.mail.properties.mail.smtp.starttls.required=true 53 | spring.mail.properties.mail.smtp.auth=true 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/main/resources/scripts/SQL/person_db.sql: -------------------------------------------------------------------------------- 1 | 2 | create table person ( 3 | id integer not null auto_increment, 4 | email varchar(255), 5 | fname varchar(255), 6 | lname varchar(255), 7 | password varchar(255), 8 | primary key (id) 9 | ) engine=InnoDB 10 | -------------------------------------------------------------------------------- /src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SelimHorri/spring-boot-angular-confinement/ca7dafd5c8ff21533ad2c325ae26abb534184a7e/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Frontend 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/main-es2015.js: -------------------------------------------------------------------------------- 1 | (window["webpackJsonp"] = window["webpackJsonp"] || []).push([["main"],{ 2 | 3 | /***/ "./$$_lazy_route_resource lazy recursive": 4 | /*!******************************************************!*\ 5 | !*** ./$$_lazy_route_resource lazy namespace object ***! 6 | \******************************************************/ 7 | /*! no static exports found */ 8 | /***/ (function(module, exports) { 9 | 10 | function webpackEmptyAsyncContext(req) { 11 | // Here Promise.resolve().then() is used instead of new Promise() to prevent 12 | // uncaught exception popping up in devtools 13 | return Promise.resolve().then(function() { 14 | var e = new Error("Cannot find module '" + req + "'"); 15 | e.code = 'MODULE_NOT_FOUND'; 16 | throw e; 17 | }); 18 | } 19 | webpackEmptyAsyncContext.keys = function() { return []; }; 20 | webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; 21 | module.exports = webpackEmptyAsyncContext; 22 | webpackEmptyAsyncContext.id = "./$$_lazy_route_resource lazy recursive"; 23 | 24 | /***/ }), 25 | 26 | /***/ "./src/app/app-routing.module.ts": 27 | /*!***************************************!*\ 28 | !*** ./src/app/app-routing.module.ts ***! 29 | \***************************************/ 30 | /*! exports provided: AppRoutingModule */ 31 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 32 | 33 | "use strict"; 34 | __webpack_require__.r(__webpack_exports__); 35 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppRoutingModule", function() { return AppRoutingModule; }); 36 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 37 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 38 | /* harmony import */ var _welcome_welcome_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./welcome/welcome.component */ "./src/app/welcome/welcome.component.ts"); 39 | /* harmony import */ var _login_login_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./login/login.component */ "./src/app/login/login.component.ts"); 40 | /* harmony import */ var _error_error_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error/error.component */ "./src/app/error/error.component.ts"); 41 | /* harmony import */ var _list_persons_list_persons_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./list-persons/list-persons.component */ "./src/app/list-persons/list-persons.component.ts"); 42 | /* harmony import */ var _services_route_guard_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./services/route-guard.service */ "./src/app/services/route-guard.service.ts"); 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | const routes = [ 53 | { path: '', component: _login_login_component__WEBPACK_IMPORTED_MODULE_3__["LoginComponent"] }, 54 | { path: 'welcome/:username/:password', component: _welcome_welcome_component__WEBPACK_IMPORTED_MODULE_2__["WelcomeComponent"], canActivate: [_services_route_guard_service__WEBPACK_IMPORTED_MODULE_6__["RouteGuardService"]] }, 55 | { path: 'login', component: _login_login_component__WEBPACK_IMPORTED_MODULE_3__["LoginComponent"], canActivate: [_services_route_guard_service__WEBPACK_IMPORTED_MODULE_6__["RouteGuardService"]] }, 56 | { path: 'list-persons', component: _list_persons_list_persons_component__WEBPACK_IMPORTED_MODULE_5__["ListPersonsComponent"], canActivate: [_services_route_guard_service__WEBPACK_IMPORTED_MODULE_6__["RouteGuardService"]] }, 57 | { path: '**', component: _error_error_component__WEBPACK_IMPORTED_MODULE_4__["ErrorComponent"] } 58 | ]; 59 | class AppRoutingModule { 60 | } 61 | AppRoutingModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineNgModule"]({ type: AppRoutingModule }); 62 | AppRoutingModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjector"]({ factory: function AppRoutingModule_Factory(t) { return new (t || AppRoutingModule)(); }, imports: [[_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], 63 | _angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] }); 64 | (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵsetNgModuleScope"](AppRoutingModule, { imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]], exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] }); })(); 65 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppRoutingModule, [{ 66 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"], 67 | args: [{ 68 | imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], 69 | exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] 70 | }] 71 | }], null, null); })(); 72 | 73 | 74 | /***/ }), 75 | 76 | /***/ "./src/app/app.component.ts": 77 | /*!**********************************!*\ 78 | !*** ./src/app/app.component.ts ***! 79 | \**********************************/ 80 | /*! exports provided: AppComponent */ 81 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 82 | 83 | "use strict"; 84 | __webpack_require__.r(__webpack_exports__); 85 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppComponent", function() { return AppComponent; }); 86 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 87 | /* harmony import */ var _menu_menu_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu/menu.component */ "./src/app/menu/menu.component.ts"); 88 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 89 | /* harmony import */ var _footer_footer_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./footer/footer.component */ "./src/app/footer/footer.component.ts"); 90 | 91 | 92 | 93 | 94 | 95 | class AppComponent { 96 | constructor() { 97 | this.title = 'frontend'; 98 | } 99 | } 100 | AppComponent.ɵfac = function AppComponent_Factory(t) { return new (t || AppComponent)(); }; 101 | AppComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: AppComponent, selectors: [["app-root"]], decls: 8, vars: 0, consts: [[1, "container", "container-fluid"]], template: function AppComponent_Template(rf, ctx) { if (rf & 1) { 102 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "app-menu"); 103 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](1, "br"); 104 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "br"); 105 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "div", 0); 106 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "router-outlet"); 107 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 108 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](5, "br"); 109 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](6, "br"); 110 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](7, "app-footer"); 111 | } }, directives: [_menu_menu_component__WEBPACK_IMPORTED_MODULE_1__["MenuComponent"], _angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterOutlet"], _footer_footer_component__WEBPACK_IMPORTED_MODULE_3__["FooterComponent"]], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2FwcC5jb21wb25lbnQuY3NzIn0= */"] }); 112 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](AppComponent, [{ 113 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 114 | args: [{ 115 | selector: 'app-root', 116 | templateUrl: './app.component.html', 117 | styleUrls: ['./app.component.css'] 118 | }] 119 | }], null, null); })(); 120 | 121 | 122 | /***/ }), 123 | 124 | /***/ "./src/app/app.module.ts": 125 | /*!*******************************!*\ 126 | !*** ./src/app/app.module.ts ***! 127 | \*******************************/ 128 | /*! exports provided: AppModule */ 129 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 130 | 131 | "use strict"; 132 | __webpack_require__.r(__webpack_exports__); 133 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppModule", function() { return AppModule; }); 134 | /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js"); 135 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 136 | /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); 137 | /* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); 138 | /* harmony import */ var _app_routing_module__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app-routing.module */ "./src/app/app-routing.module.ts"); 139 | /* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app.component */ "./src/app/app.component.ts"); 140 | /* harmony import */ var _welcome_welcome_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./welcome/welcome.component */ "./src/app/welcome/welcome.component.ts"); 141 | /* harmony import */ var _login_login_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./login/login.component */ "./src/app/login/login.component.ts"); 142 | /* harmony import */ var _error_error_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./error/error.component */ "./src/app/error/error.component.ts"); 143 | /* harmony import */ var _list_persons_list_persons_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./list-persons/list-persons.component */ "./src/app/list-persons/list-persons.component.ts"); 144 | /* harmony import */ var _menu_menu_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./menu/menu.component */ "./src/app/menu/menu.component.ts"); 145 | /* harmony import */ var _footer_footer_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./footer/footer.component */ "./src/app/footer/footer.component.ts"); 146 | /* harmony import */ var _edit_persons_edit_persons_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./edit-persons/edit-persons.component */ "./src/app/edit-persons/edit-persons.component.ts"); 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | class AppModule { 162 | } 163 | AppModule.ɵmod = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineNgModule"]({ type: AppModule, bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"]] }); 164 | AppModule.ɵinj = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineInjector"]({ factory: function AppModule_Factory(t) { return new (t || AppModule)(); }, providers: [], imports: [[ 165 | _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], 166 | _app_routing_module__WEBPACK_IMPORTED_MODULE_4__["AppRoutingModule"], 167 | _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormsModule"], 168 | _angular_common_http__WEBPACK_IMPORTED_MODULE_3__["HttpClientModule"] 169 | ]] }); 170 | (function () { (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsetNgModuleScope"](AppModule, { declarations: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"], 171 | _welcome_welcome_component__WEBPACK_IMPORTED_MODULE_6__["WelcomeComponent"], 172 | _login_login_component__WEBPACK_IMPORTED_MODULE_7__["LoginComponent"], 173 | _error_error_component__WEBPACK_IMPORTED_MODULE_8__["ErrorComponent"], 174 | _list_persons_list_persons_component__WEBPACK_IMPORTED_MODULE_9__["ListPersonsComponent"], 175 | _menu_menu_component__WEBPACK_IMPORTED_MODULE_10__["MenuComponent"], 176 | _footer_footer_component__WEBPACK_IMPORTED_MODULE_11__["FooterComponent"], 177 | _edit_persons_edit_persons_component__WEBPACK_IMPORTED_MODULE_12__["EditPersonsComponent"]], imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], 178 | _app_routing_module__WEBPACK_IMPORTED_MODULE_4__["AppRoutingModule"], 179 | _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormsModule"], 180 | _angular_common_http__WEBPACK_IMPORTED_MODULE_3__["HttpClientModule"]] }); })(); 181 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵsetClassMetadata"](AppModule, [{ 182 | type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"], 183 | args: [{ 184 | declarations: [ 185 | _app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"], 186 | _welcome_welcome_component__WEBPACK_IMPORTED_MODULE_6__["WelcomeComponent"], 187 | _login_login_component__WEBPACK_IMPORTED_MODULE_7__["LoginComponent"], 188 | _error_error_component__WEBPACK_IMPORTED_MODULE_8__["ErrorComponent"], 189 | _list_persons_list_persons_component__WEBPACK_IMPORTED_MODULE_9__["ListPersonsComponent"], 190 | _menu_menu_component__WEBPACK_IMPORTED_MODULE_10__["MenuComponent"], 191 | _footer_footer_component__WEBPACK_IMPORTED_MODULE_11__["FooterComponent"], 192 | _edit_persons_edit_persons_component__WEBPACK_IMPORTED_MODULE_12__["EditPersonsComponent"] 193 | ], 194 | imports: [ 195 | _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], 196 | _app_routing_module__WEBPACK_IMPORTED_MODULE_4__["AppRoutingModule"], 197 | _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormsModule"], 198 | _angular_common_http__WEBPACK_IMPORTED_MODULE_3__["HttpClientModule"] 199 | ], 200 | providers: [], 201 | bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_5__["AppComponent"]] 202 | }] 203 | }], null, null); })(); 204 | 205 | 206 | /***/ }), 207 | 208 | /***/ "./src/app/edit-persons/edit-persons.component.ts": 209 | /*!********************************************************!*\ 210 | !*** ./src/app/edit-persons/edit-persons.component.ts ***! 211 | \********************************************************/ 212 | /*! exports provided: EditPersonsComponent */ 213 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 214 | 215 | "use strict"; 216 | __webpack_require__.r(__webpack_exports__); 217 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EditPersonsComponent", function() { return EditPersonsComponent; }); 218 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 219 | 220 | 221 | class EditPersonsComponent { 222 | constructor() { } 223 | ngOnInit() { 224 | } 225 | } 226 | EditPersonsComponent.ɵfac = function EditPersonsComponent_Factory(t) { return new (t || EditPersonsComponent)(); }; 227 | EditPersonsComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: EditPersonsComponent, selectors: [["app-edit-persons"]], decls: 2, vars: 0, template: function EditPersonsComponent_Template(rf, ctx) { if (rf & 1) { 228 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "p"); 229 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, "edit-persons works!"); 230 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 231 | } }, styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2VkaXQtcGVyc29ucy9lZGl0LXBlcnNvbnMuY29tcG9uZW50LmNzcyJ9 */"] }); 232 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](EditPersonsComponent, [{ 233 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 234 | args: [{ 235 | selector: 'app-edit-persons', 236 | templateUrl: './edit-persons.component.html', 237 | styleUrls: ['./edit-persons.component.css'] 238 | }] 239 | }], function () { return []; }, null); })(); 240 | 241 | 242 | /***/ }), 243 | 244 | /***/ "./src/app/error/error.component.ts": 245 | /*!******************************************!*\ 246 | !*** ./src/app/error/error.component.ts ***! 247 | \******************************************/ 248 | /*! exports provided: ErrorComponent */ 249 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 250 | 251 | "use strict"; 252 | __webpack_require__.r(__webpack_exports__); 253 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ErrorComponent", function() { return ErrorComponent; }); 254 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 255 | 256 | 257 | class ErrorComponent { 258 | constructor() { } 259 | ngOnInit() { 260 | } 261 | } 262 | ErrorComponent.ɵfac = function ErrorComponent_Factory(t) { return new (t || ErrorComponent)(); }; 263 | ErrorComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: ErrorComponent, selectors: [["app-error"]], decls: 2, vars: 0, template: function ErrorComponent_Template(rf, ctx) { if (rf & 1) { 264 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "p"); 265 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, "error works!"); 266 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 267 | } }, styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2Vycm9yL2Vycm9yLmNvbXBvbmVudC5jc3MifQ== */"] }); 268 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ErrorComponent, [{ 269 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 270 | args: [{ 271 | selector: 'app-error', 272 | templateUrl: './error.component.html', 273 | styleUrls: ['./error.component.css'] 274 | }] 275 | }], function () { return []; }, null); })(); 276 | 277 | 278 | /***/ }), 279 | 280 | /***/ "./src/app/footer/footer.component.ts": 281 | /*!********************************************!*\ 282 | !*** ./src/app/footer/footer.component.ts ***! 283 | \********************************************/ 284 | /*! exports provided: FooterComponent */ 285 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 286 | 287 | "use strict"; 288 | __webpack_require__.r(__webpack_exports__); 289 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FooterComponent", function() { return FooterComponent; }); 290 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 291 | 292 | 293 | class FooterComponent { 294 | constructor() { 295 | } 296 | ngOnInit() { 297 | } 298 | } 299 | FooterComponent.ɵfac = function FooterComponent_Factory(t) { return new (t || FooterComponent)(); }; 300 | FooterComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: FooterComponent, selectors: [["app-footer"]], decls: 4, vars: 0, consts: [[1, "footer"], ["align", "center", 1, ""], [1, "text-muted"]], template: function FooterComponent_Template(rf, ctx) { if (rf & 1) { 301 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "footer", 0); 302 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "div", 1); 303 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "span", 2); 304 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3, "Place sticky footer content here."); 305 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 306 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 307 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 308 | } }, styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50LmNzcyJ9 */"] }); 309 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](FooterComponent, [{ 310 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 311 | args: [{ 312 | selector: 'app-footer', 313 | templateUrl: './footer.component.html', 314 | styleUrls: ['./footer.component.css'] 315 | }] 316 | }], function () { return []; }, null); })(); 317 | 318 | 319 | /***/ }), 320 | 321 | /***/ "./src/app/list-persons/list-persons.component.ts": 322 | /*!********************************************************!*\ 323 | !*** ./src/app/list-persons/list-persons.component.ts ***! 324 | \********************************************************/ 325 | /*! exports provided: ListPersonsComponent */ 326 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 327 | 328 | "use strict"; 329 | __webpack_require__.r(__webpack_exports__); 330 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ListPersonsComponent", function() { return ListPersonsComponent; }); 331 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 332 | /* harmony import */ var _services_person_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../services/person.service */ "./src/app/services/person.service.ts"); 333 | /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); 334 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 335 | 336 | 337 | 338 | 339 | 340 | 341 | function ListPersonsComponent_th_4_Template(rf, ctx) { if (rf & 1) { 342 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "th"); 343 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1); 344 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 345 | } if (rf & 2) { 346 | const header_r4 = ctx.$implicit; 347 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1); 348 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](header_r4); 349 | } } 350 | function ListPersonsComponent_tr_6_Template(rf, ctx) { if (rf & 1) { 351 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "tr"); 352 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "td"); 353 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2); 354 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 355 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "td"); 356 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4); 357 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 358 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "td"); 359 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6); 360 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 361 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "td"); 362 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8); 363 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 364 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "td"); 365 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "a", 4); 366 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](11, "Edit"); 367 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 368 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 369 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "td"); 370 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](13, "a", 5); 371 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](14, "Delete"); 372 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 373 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 374 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 375 | } if (rf & 2) { 376 | const p_r5 = ctx.$implicit; 377 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 378 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](p_r5.fname); 379 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 380 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](p_r5.lname); 381 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 382 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](p_r5.email); 383 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 384 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](p_r5.password); 385 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 386 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpropertyInterpolate1"]("routerLink", "edit?id=", p_r5.id, ""); 387 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3); 388 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpropertyInterpolate1"]("routerLink", "delete?id=", p_r5.id, ""); 389 | } } 390 | class ListPersonsComponent { 391 | constructor(service) { 392 | this.service = service; 393 | this.headers = ['fname', 'lname', 'email', 'password', '', '']; 394 | this.now = new Date(); 395 | } 396 | reloadData() { 397 | this.service.getListPersons().subscribe(response => { 398 | this.listPersons = response; 399 | }); 400 | } 401 | ngOnInit() { 402 | this.reloadData(); 403 | } 404 | } 405 | ListPersonsComponent.ɵfac = function ListPersonsComponent_Factory(t) { return new (t || ListPersonsComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_services_person_service__WEBPACK_IMPORTED_MODULE_1__["PersonService"])); }; 406 | ListPersonsComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: ListPersonsComponent, selectors: [["app-list-persons"]], decls: 20, vars: 7, consts: [["align", "center"], [1, "table", "table-striped", "table-hover"], [4, "ngFor", "ngForOf"], ["routerLink", "../list-persons", 1, ""], [1, "btn", "btn-outline-success", 3, "routerLink"], [1, "btn", "btn-outline-danger", 3, "routerLink"]], template: function ListPersonsComponent_Template(rf, ctx) { if (rf & 1) { 407 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); 408 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "table", 1); 409 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "thead"); 410 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "tr"); 411 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](4, ListPersonsComponent_th_4_Template, 2, 1, "th", 2); 412 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 413 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 414 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "tbody"); 415 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](6, ListPersonsComponent_tr_6_Template, 15, 6, "tr", 2); 416 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 417 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 418 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](7, "br"); 419 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](8, "br"); 420 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "a", 3); 421 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "h2"); 422 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](11, "Reresh list-persons"); 423 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 424 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 425 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](12, "br"); 426 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](13, "br"); 427 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](14, "h4"); 428 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](15); 429 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](16, "uppercase"); 430 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipe"](17, "date"); 431 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 432 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](18, "br"); 433 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](19, "br"); 434 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 435 | } if (rf & 2) { 436 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4); 437 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.headers); 438 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 439 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngForOf", ctx.listPersons); 440 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](9); 441 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"]("Date : ", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind1"](16, 3, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵpipeBind1"](17, 5, ctx.now)), ""); 442 | } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["NgForOf"], _angular_router__WEBPACK_IMPORTED_MODULE_3__["RouterLinkWithHref"]], pipes: [_angular_common__WEBPACK_IMPORTED_MODULE_2__["UpperCasePipe"], _angular_common__WEBPACK_IMPORTED_MODULE_2__["DatePipe"]], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2xpc3QtcGVyc29ucy9saXN0LXBlcnNvbnMuY29tcG9uZW50LmNzcyJ9 */"] }); 443 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](ListPersonsComponent, [{ 444 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 445 | args: [{ 446 | selector: 'app-list-persons', 447 | templateUrl: './list-persons.component.html', 448 | styleUrls: ['./list-persons.component.css'] 449 | }] 450 | }], function () { return [{ type: _services_person_service__WEBPACK_IMPORTED_MODULE_1__["PersonService"] }]; }, null); })(); 451 | 452 | 453 | /***/ }), 454 | 455 | /***/ "./src/app/login/login.component.ts": 456 | /*!******************************************!*\ 457 | !*** ./src/app/login/login.component.ts ***! 458 | \******************************************/ 459 | /*! exports provided: LoginComponent */ 460 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 461 | 462 | "use strict"; 463 | __webpack_require__.r(__webpack_exports__); 464 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginComponent", function() { return LoginComponent; }); 465 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 466 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 467 | /* harmony import */ var _services_person_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../services/person.service */ "./src/app/services/person.service.ts"); 468 | /* harmony import */ var _services_route_guard_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../services/route-guard.service */ "./src/app/services/route-guard.service.ts"); 469 | /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); 470 | /* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | function LoginComponent_small_0_Template(rf, ctx) { if (rf & 1) { 482 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "small"); 483 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1); 484 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 485 | } if (rf & 2) { 486 | const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); 487 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1); 488 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r0.validMsg); 489 | } } 490 | class LoginComponent { 491 | constructor(service, router, routeGuardService) { 492 | this.service = service; 493 | this.router = router; 494 | this.routeGuardService = routeGuardService; 495 | this.valid = false; 496 | this.validMsg = 'error'; 497 | } 498 | ngOnInit() { 499 | } 500 | onSubmit() { 501 | let testService = this.service.authenticate(this.username, this.password); 502 | if (testService) { 503 | this.valid = true; 504 | this.validMsg = 'GREAT'; 505 | console.log(this.validMsg + '!!!!!!!!!!!!!!!'); 506 | this.router.navigate(['welcome', this.username, this.password]); 507 | } 508 | else { 509 | // this.validMsg = 'error'; 510 | console.log(this.validMsg + '!!!!!!!!!!!!!!!'); 511 | } 512 | } 513 | handleLogin() { 514 | let testService = this.service.authenticate(this.username, this.password); 515 | if (testService) { 516 | this.valid = true; 517 | this.validMsg = 'GREAT'; 518 | console.log(this.validMsg + '!!!!!!!!!!!!!!!'); 519 | this.router.navigate(['welcome', this.username, this.password]); 520 | } 521 | else { 522 | // this.validMsg = 'error'; 523 | console.log(this.validMsg + '!!!!!!!!!!!!!!!'); 524 | } 525 | } 526 | } 527 | LoginComponent.ɵfac = function LoginComponent_Factory(t) { return new (t || LoginComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_services_person_service__WEBPACK_IMPORTED_MODULE_2__["PersonService"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_router__WEBPACK_IMPORTED_MODULE_1__["Router"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_services_route_guard_service__WEBPACK_IMPORTED_MODULE_3__["RouteGuardService"])); }; 528 | LoginComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: LoginComponent, selectors: [["app-login"]], decls: 29, vars: 6, consts: [[4, "ngIf"], [1, "form-horizontal", 3, "ngSubmit"], ["userForm", "ngForm"], [1, "form-group"], ["for", "inputEmail", 1, "col-lg-2", "control-label"], [1, "col-lg-10"], ["type", "text", "id", "inputEmail", "placeholder", "Enter mail..", "name", "username", 1, "form-control", 3, "ngModel", "ngModelChange"], ["for", "inputPassword", 1, "col-lg-2", "control-label"], ["type", "password", "id", "inputPassword", "placeholder", "Enter passwd..", "name", "password", 1, "form-control", 3, "ngModel", "ngModelChange"], ["align", "center", 1, "checkbox"], ["type", "checkbox"], ["align", "center", 1, "col-lg-10", "col-lg-offset-2"], ["type", "submit", 1, "btn", "btn-primary", 3, "disabled"]], template: function LoginComponent_Template(rf, ctx) { if (rf & 1) { 529 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](0, LoginComponent_small_0_Template, 2, 1, "small", 0); 530 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "form", 1, 2); 531 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngSubmit", function LoginComponent_Template_form_ngSubmit_1_listener() { return ctx.onSubmit(); }); 532 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "fieldset"); 533 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "legend"); 534 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](5, "Legend"); 535 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 536 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "div", 3); 537 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "label", 4); 538 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8, "Username"); 539 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 540 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](9, "div", 5); 541 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "input", 6); 542 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngModelChange", function LoginComponent_Template_input_ngModelChange_10_listener($event) { return ctx.username = $event; }); 543 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 544 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 545 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 546 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](11, "div", 3); 547 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](12, "label", 7); 548 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](13, "Password"); 549 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 550 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](14, "div", 5); 551 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](15, "input", 8); 552 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("ngModelChange", function LoginComponent_Template_input_ngModelChange_15_listener($event) { return ctx.password = $event; }); 553 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 554 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](16, "div", 9); 555 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](17, "br"); 556 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](18, "label"); 557 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](19, "input", 10); 558 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](20, " Show Password "); 559 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 560 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 561 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 562 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 563 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](21, "div", 3); 564 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](22, "div", 11); 565 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](23, "button", 12); 566 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](24, "Login"); 567 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 568 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 569 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 570 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 571 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 572 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](25, "h1"); 573 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](26); 574 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 575 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](27, "h1"); 576 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](28); 577 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 578 | } if (rf & 2) { 579 | const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵreference"](2); 580 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.valid); 581 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](10); 582 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngModel", ctx.username); 583 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](5); 584 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngModel", ctx.password); 585 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](8); 586 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("disabled", !_r1.form.valid); 587 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](3); 588 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.username); 589 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 590 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx.password); 591 | } }, directives: [_angular_common__WEBPACK_IMPORTED_MODULE_4__["NgIf"], _angular_forms__WEBPACK_IMPORTED_MODULE_5__["ɵangular_packages_forms_forms_y"], _angular_forms__WEBPACK_IMPORTED_MODULE_5__["NgControlStatusGroup"], _angular_forms__WEBPACK_IMPORTED_MODULE_5__["NgForm"], _angular_forms__WEBPACK_IMPORTED_MODULE_5__["DefaultValueAccessor"], _angular_forms__WEBPACK_IMPORTED_MODULE_5__["NgControlStatus"], _angular_forms__WEBPACK_IMPORTED_MODULE_5__["NgModel"]], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5jc3MifQ== */"] }); 592 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](LoginComponent, [{ 593 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 594 | args: [{ 595 | selector: 'app-login', 596 | templateUrl: './login.component.html', 597 | styleUrls: ['./login.component.css'] 598 | }] 599 | }], function () { return [{ type: _services_person_service__WEBPACK_IMPORTED_MODULE_2__["PersonService"] }, { type: _angular_router__WEBPACK_IMPORTED_MODULE_1__["Router"] }, { type: _services_route_guard_service__WEBPACK_IMPORTED_MODULE_3__["RouteGuardService"] }]; }, null); })(); 600 | 601 | 602 | /***/ }), 603 | 604 | /***/ "./src/app/menu/menu.component.ts": 605 | /*!****************************************!*\ 606 | !*** ./src/app/menu/menu.component.ts ***! 607 | \****************************************/ 608 | /*! exports provided: MenuComponent */ 609 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 610 | 611 | "use strict"; 612 | __webpack_require__.r(__webpack_exports__); 613 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MenuComponent", function() { return MenuComponent; }); 614 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 615 | /* harmony import */ var _services_person_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../services/person.service */ "./src/app/services/person.service.ts"); 616 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 617 | /* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); 618 | 619 | 620 | 621 | 622 | 623 | 624 | function MenuComponent_li_8_Template(rf, ctx) { if (rf & 1) { 625 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 11); 626 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 12); 627 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Home "); 628 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "span", 13); 629 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4, "(current)"); 630 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 631 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 632 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 633 | } } 634 | function MenuComponent_li_9_Template(rf, ctx) { if (rf & 1) { 635 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li", 14); 636 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 15); 637 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "List Persons"); 638 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 639 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 640 | } } 641 | function MenuComponent_li_11_Template(rf, ctx) { if (rf & 1) { 642 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li"); 643 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 16); 644 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Login"); 645 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 646 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 647 | } } 648 | function MenuComponent_li_12_Template(rf, ctx) { if (rf & 1) { 649 | const _r11 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵgetCurrentView"](); 650 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "li"); 651 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "a", 17); 652 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵlistener"]("click", function MenuComponent_li_12_Template_a_click_1_listener() { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵrestoreView"](_r11); const ctx_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); return ctx_r10.logout(); }); 653 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Logout"); 654 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 655 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 656 | } } 657 | class MenuComponent { 658 | constructor(service) { 659 | this.service = service; 660 | } 661 | ngOnInit() { 662 | } 663 | isUserLoggedIn() { 664 | return this.service.isUserLoggedIn(); 665 | } 666 | logout() { 667 | this.service.logout(); 668 | } 669 | } 670 | MenuComponent.ɵfac = function MenuComponent_Factory(t) { return new (t || MenuComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_services_person_service__WEBPACK_IMPORTED_MODULE_1__["PersonService"])); }; 671 | MenuComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: MenuComponent, selectors: [["app-menu"]], decls: 14, vars: 4, consts: [[1, "navbar", "navbar-expand-lg", "navbar-dark", "bg-dark", "sticky-top"], ["routerLink", "/login", 1, "navbar-brand"], ["type", "button", "data-toggle", "collapse", "data-target", "#navbarSupportedContent", "aria-controls", "navbarSupportedContent", "aria-expanded", "false", "aria-label", "Toggle navigation", 1, "navbar-toggler"], [1, "navbar-toggler-icon"], ["id", "navbarSupportedContent", 1, "collapse", "navbar-collapse"], [1, "navbar-nav", "mr-auto"], ["class", "nav-item active", 4, "ngIf"], ["class", "nav-item", 4, "ngIf"], [1, "navbar-nav", "navbar-collapse", "justify-content-end"], [4, "ngIf"], [1, "form-inline", "my-2", "my-lg-0"], [1, "nav-item", "active"], ["routerLink", "/", 1, "nav-link"], [1, "sr-only"], [1, "nav-item"], ["routerLink", "/list-persons", 1, "nav-link"], ["routerLink", "/login", 1, "nav-link"], ["routerLink", "/login", 1, "nav-link", 3, "click"]], template: function MenuComponent_Template(rf, ctx) { if (rf & 1) { 672 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "header"); 673 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](1, "nav", 0); 674 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](2, "a", 1); 675 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](3, "SpringBoot&Angular"); 676 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 677 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](4, "button", 2); 678 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](5, "span", 3); 679 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 680 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "div", 4); 681 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "ul", 5); 682 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](8, MenuComponent_li_8_Template, 5, 0, "li", 6); 683 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](9, MenuComponent_li_9_Template, 3, 0, "li", 7); 684 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 685 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](10, "ul", 8); 686 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](11, MenuComponent_li_11_Template, 3, 0, "li", 9); 687 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](12, MenuComponent_li_12_Template, 3, 0, "li", 9); 688 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 689 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](13, "div", 10); 690 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 691 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 692 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 693 | } if (rf & 2) { 694 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](8); 695 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.isUserLoggedIn()); 696 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1); 697 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.isUserLoggedIn()); 698 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 699 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", !ctx.isUserLoggedIn()); 700 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](1); 701 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.isUserLoggedIn()); 702 | } }, directives: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterLinkWithHref"], _angular_common__WEBPACK_IMPORTED_MODULE_3__["NgIf"]], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL21lbnUvbWVudS5jb21wb25lbnQuY3NzIn0= */"] }); 703 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](MenuComponent, [{ 704 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 705 | args: [{ 706 | selector: 'app-menu', 707 | templateUrl: './menu.component.html', 708 | styleUrls: ['./menu.component.css'] 709 | }] 710 | }], function () { return [{ type: _services_person_service__WEBPACK_IMPORTED_MODULE_1__["PersonService"] }]; }, null); })(); 711 | 712 | 713 | /***/ }), 714 | 715 | /***/ "./src/app/services/person.service.ts": 716 | /*!********************************************!*\ 717 | !*** ./src/app/services/person.service.ts ***! 718 | \********************************************/ 719 | /*! exports provided: PersonService */ 720 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 721 | 722 | "use strict"; 723 | __webpack_require__.r(__webpack_exports__); 724 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PersonService", function() { return PersonService; }); 725 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 726 | /* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); 727 | 728 | 729 | 730 | 731 | class PersonService { 732 | constructor(http) { 733 | this.http = http; 734 | this.url = 'http://localhost:8080/persons'; 735 | } 736 | getListPersons() { 737 | return this.http.get(this.url); 738 | } 739 | getPersonById(id) { 740 | this.listPersons.forEach(person => { 741 | if (person.id === id) { 742 | return person; 743 | } 744 | }); 745 | return null; 746 | } 747 | savePerson(person) { 748 | return this.http.post(this.url, person); 749 | } 750 | authenticate(username, password) { 751 | this.getListPersons().subscribe(response => { 752 | this.listPersons = response; 753 | }); 754 | username = username.trim(); 755 | let map = new Map(); 756 | this.listPersons.forEach(person => { 757 | map.set(person.email, person.password); 758 | }); 759 | if (!map.has(username)) { 760 | console.log('there is no such mail !!!!!'); 761 | return false; 762 | } 763 | else { 764 | if (map.get(username) != password) { 765 | console.log('incorrect password, try again !!!!!'); 766 | return false; 767 | } 768 | else { 769 | if (map.get(username) === password) { 770 | console.log('Logged in, enjoyyy'); 771 | sessionStorage.setItem('userAuth', username); 772 | return true; 773 | } 774 | else { 775 | console.log('ERROR !!!!!!!!!!!!!!!'); 776 | return false; 777 | } 778 | } 779 | } 780 | } 781 | isUserLoggedIn() { 782 | let user = sessionStorage.getItem('userAuth'); 783 | return !(user === null); 784 | } 785 | logout() { 786 | sessionStorage.removeItem('userAuth'); 787 | } 788 | } 789 | PersonService.ɵfac = function PersonService_Factory(t) { return new (t || PersonService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"])); }; 790 | PersonService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: PersonService, factory: PersonService.ɵfac, providedIn: 'root' }); 791 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](PersonService, [{ 792 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"], 793 | args: [{ 794 | providedIn: 'root' 795 | }] 796 | }], function () { return [{ type: _angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"] }]; }, null); })(); 797 | 798 | 799 | /***/ }), 800 | 801 | /***/ "./src/app/services/route-guard.service.ts": 802 | /*!*************************************************!*\ 803 | !*** ./src/app/services/route-guard.service.ts ***! 804 | \*************************************************/ 805 | /*! exports provided: RouteGuardService */ 806 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 807 | 808 | "use strict"; 809 | __webpack_require__.r(__webpack_exports__); 810 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouteGuardService", function() { return RouteGuardService; }); 811 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 812 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 813 | /* harmony import */ var _person_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./person.service */ "./src/app/services/person.service.ts"); 814 | 815 | 816 | 817 | 818 | 819 | 820 | class RouteGuardService { 821 | constructor(service, router) { 822 | this.service = service; 823 | this.router = router; 824 | } 825 | canActivate(route, state) { 826 | if (this.service.isUserLoggedIn()) 827 | return true; 828 | this.router.navigate(['login']); 829 | return false; 830 | } 831 | } 832 | RouteGuardService.ɵfac = function RouteGuardService_Factory(t) { return new (t || RouteGuardService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_person_service__WEBPACK_IMPORTED_MODULE_2__["PersonService"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_router__WEBPACK_IMPORTED_MODULE_1__["Router"])); }; 833 | RouteGuardService.ɵprov = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ token: RouteGuardService, factory: RouteGuardService.ɵfac, providedIn: 'root' }); 834 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](RouteGuardService, [{ 835 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"], 836 | args: [{ 837 | providedIn: 'root' 838 | }] 839 | }], function () { return [{ type: _person_service__WEBPACK_IMPORTED_MODULE_2__["PersonService"] }, { type: _angular_router__WEBPACK_IMPORTED_MODULE_1__["Router"] }]; }, null); })(); 840 | 841 | 842 | /***/ }), 843 | 844 | /***/ "./src/app/welcome/welcome.component.ts": 845 | /*!**********************************************!*\ 846 | !*** ./src/app/welcome/welcome.component.ts ***! 847 | \**********************************************/ 848 | /*! exports provided: WelcomeComponent */ 849 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 850 | 851 | "use strict"; 852 | __webpack_require__.r(__webpack_exports__); 853 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WelcomeComponent", function() { return WelcomeComponent; }); 854 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 855 | /* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); 856 | /* harmony import */ var _services_person_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../services/person.service */ "./src/app/services/person.service.ts"); 857 | 858 | 859 | 860 | 861 | 862 | 863 | class WelcomeComponent { 864 | constructor(service, route) { 865 | this.service = service; 866 | this.route = route; 867 | this.username = ''; 868 | this.password = ''; 869 | } 870 | ngOnInit() { 871 | this.username = this.route.snapshot.params['username']; 872 | this.password = this.route.snapshot.params['password']; 873 | } 874 | } 875 | WelcomeComponent.ɵfac = function WelcomeComponent_Factory(t) { return new (t || WelcomeComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_services_person_service__WEBPACK_IMPORTED_MODULE_2__["PersonService"]), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"])); }; 876 | WelcomeComponent.ɵcmp = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ type: WelcomeComponent, selectors: [["app-welcome"]], decls: 13, vars: 2, consts: [["routerLink", "/list-persons", 1, "btn", "btn-outline-success"]], template: function WelcomeComponent_Template(rf, ctx) { if (rf & 1) { 877 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "p"); 878 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1, "welcome works!"); 879 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 880 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](2, "br"); 881 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "h1"); 882 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](4); 883 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 884 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](5, "h1"); 885 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](6); 886 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 887 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](7, "h3"); 888 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](8, "a", 0); 889 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](9, " Go to list-persons ? "); 890 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 891 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); 892 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](10, "br"); 893 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](11, "br"); 894 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](12, "br"); 895 | } if (rf & 2) { 896 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4); 897 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx.username, " "); 898 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](2); 899 | _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate1"](" ", ctx.password, " "); 900 | } }, directives: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterLinkWithHref"]], styles: ["\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3dlbGNvbWUvd2VsY29tZS5jb21wb25lbnQuY3NzIn0= */"] }); 901 | /*@__PURE__*/ (function () { _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵsetClassMetadata"](WelcomeComponent, [{ 902 | type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"], 903 | args: [{ 904 | selector: 'app-welcome', 905 | templateUrl: './welcome.component.html', 906 | styleUrls: ['./welcome.component.css'] 907 | }] 908 | }], function () { return [{ type: _services_person_service__WEBPACK_IMPORTED_MODULE_2__["PersonService"] }, { type: _angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"] }]; }, null); })(); 909 | 910 | 911 | /***/ }), 912 | 913 | /***/ "./src/environments/environment.ts": 914 | /*!*****************************************!*\ 915 | !*** ./src/environments/environment.ts ***! 916 | \*****************************************/ 917 | /*! exports provided: environment */ 918 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 919 | 920 | "use strict"; 921 | __webpack_require__.r(__webpack_exports__); 922 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "environment", function() { return environment; }); 923 | // This file can be replaced during build by using the `fileReplacements` array. 924 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 925 | // The list of file replacements can be found in `angular.json`. 926 | const environment = { 927 | production: false 928 | }; 929 | /* 930 | * For easier debugging in development mode, you can import the following file 931 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 932 | * 933 | * This import should be commented out in production mode because it will have a negative impact 934 | * on performance if an error is thrown. 935 | */ 936 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 937 | 938 | 939 | /***/ }), 940 | 941 | /***/ "./src/main.ts": 942 | /*!*********************!*\ 943 | !*** ./src/main.ts ***! 944 | \*********************/ 945 | /*! no exports provided */ 946 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 947 | 948 | "use strict"; 949 | __webpack_require__.r(__webpack_exports__); 950 | /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); 951 | /* harmony import */ var _environments_environment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./environments/environment */ "./src/environments/environment.ts"); 952 | /* harmony import */ var _app_app_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/app.module */ "./src/app/app.module.ts"); 953 | /* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js"); 954 | 955 | 956 | 957 | 958 | if (_environments_environment__WEBPACK_IMPORTED_MODULE_1__["environment"].production) { 959 | Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["enableProdMode"])(); 960 | } 961 | _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__["platformBrowser"]().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_2__["AppModule"]) 962 | .catch(err => console.error(err)); 963 | 964 | 965 | /***/ }), 966 | 967 | /***/ 0: 968 | /*!***************************!*\ 969 | !*** multi ./src/main.ts ***! 970 | \***************************/ 971 | /*! no static exports found */ 972 | /***/ (function(module, exports, __webpack_require__) { 973 | 974 | module.exports = __webpack_require__(/*! /home/slim/Desktop/Prg/- Angular -/frontend/src/main.ts */"./src/main.ts"); 975 | 976 | 977 | /***/ }) 978 | 979 | },[[0,"runtime","vendor"]]]); 980 | //# sourceMappingURL=main-es2015.js.map -------------------------------------------------------------------------------- /src/main/resources/static/main-es2015.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["./$_lazy_route_resource lazy namespace object","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/edit-persons/edit-persons.component.ts","./src/app/edit-persons/edit-persons.component.html","./src/app/error/error.component.ts","./src/app/error/error.component.html","./src/app/footer/footer.component.ts","./src/app/footer/footer.component.html","./src/app/list-persons/list-persons.component.ts","./src/app/list-persons/list-persons.component.html","./src/app/login/login.component.ts","./src/app/login/login.component.html","./src/app/menu/menu.component.ts","./src/app/menu/menu.component.html","./src/app/services/person.service.ts","./src/app/services/route-guard.service.ts","./src/app/welcome/welcome.component.ts","./src/app/welcome/welcome.component.html","./src/environments/environment.ts","./src/main.ts"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { WelcomeComponent } from './welcome/welcome.component';\nimport { LoginComponent } from './login/login.component';\nimport { ErrorComponent } from './error/error.component';\nimport { ListPersonsComponent } from './list-persons/list-persons.component';\nimport { RouteGuardService } from './services/route-guard.service';\n\nconst routes: Routes = [\n\t{path: '', component: LoginComponent},\n\t{path: 'welcome/:username/:password', component: WelcomeComponent, canActivate: [RouteGuardService]},\n\t{path: 'login', component: LoginComponent, canActivate: [RouteGuardService]},\n\t{path: 'list-persons', component: ListPersonsComponent, canActivate: [RouteGuardService]},\n\t\n\t{path: '**', component: ErrorComponent}\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule {\n\t\n}\n\n\n\n\n\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n title = 'frontend';\n}\n","\n\n

\n\n
\n\t\n
\n\n

\n\n\n\n\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { WelcomeComponent } from './welcome/welcome.component';\nimport { LoginComponent } from './login/login.component';\nimport { ErrorComponent } from './error/error.component';\nimport { ListPersonsComponent } from './list-persons/list-persons.component';\nimport { MenuComponent } from './menu/menu.component';\nimport { FooterComponent } from './footer/footer.component';\nimport { EditPersonsComponent } from './edit-persons/edit-persons.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n WelcomeComponent,\n LoginComponent,\n ErrorComponent,\n ListPersonsComponent,\n MenuComponent,\n FooterComponent,\n EditPersonsComponent\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n\t\tFormsModule,\n\t\tHttpClientModule\n ],\n providers: [],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n\t\n}\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-edit-persons',\n templateUrl: './edit-persons.component.html',\n styleUrls: ['./edit-persons.component.css']\n})\nexport class EditPersonsComponent implements OnInit {\n\t\n\t\n\t\n constructor() { }\n\n ngOnInit(): void {\n }\n\t\n\t\n\t\n}\n\n\n\n\n\n\n\n\n","

edit-persons works!

\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-error',\n templateUrl: './error.component.html',\n styleUrls: ['./error.component.css']\n})\nexport class ErrorComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","

error works!

\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.css']\n})\nexport class FooterComponent implements OnInit {\n\t\n constructor() {\n\t\t\n\t}\n\t\n ngOnInit(): void {\n\t\t\n }\n\t\n}\n\n\n\n\n\n\n\n","
\n\t
\n\t\tPlace sticky footer content here.\n\t
\n
","import { Component, OnInit } from '@angular/core';\nimport { Person } from './../entities/person/person';\nimport { PersonService } from './../services/person.service';\n\n@Component({\nselector: 'app-list-persons',\ntemplateUrl: './list-persons.component.html',\nstyleUrls: ['./list-persons.component.css']\n})\nexport class ListPersonsComponent implements OnInit {\n\t\n\theaders = ['fname', 'lname', 'email', 'password', '', ''];\n\tlistPersons: Person[];\n\tnow: Date = new Date();\n\t\n\tconstructor(private service: PersonService) {\n\t\t\n\t}\n\t\n\treloadData(): void {\n\t\tthis.service.getListPersons().subscribe(\n\t\t\tresponse => {\n\t\t\t\tthis.listPersons = response;\n\t\t\t}\n\t\t);\n\t}\n\t\n\tngOnInit(): void {\n\t\tthis.reloadData();\n\t}\n\t\n\t\n}\n\n\n\n\n\n\n\n","\n
\n\t\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t \n\t \n\t
{{header}}
{{p.fname}}{{p.lname}}{{p.email}}{{p.password}}EditDelete
\n\t\n\t

\n\t

Reresh list-persons

\n\t

\n\n\t

Date : {{now | date | uppercase}}

\n\t

\n
\n\n\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { PersonService } from './../services/person.service';\nimport { RouteGuardService } from './../services/route-guard.service';\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.css']\n})\nexport class LoginComponent implements OnInit {\n\t\n\tusername : string;\n\tpassword : string;\n\tvalid : boolean = false;\n\tvalidMsg : string = 'error';\n\t\n constructor(private service: PersonService, private router: Router, private routeGuardService: RouteGuardService) {\n\t\t\n\t}\n\t\n ngOnInit(): void {\n\t\t\n }\n\t\n\tpublic onSubmit() {\n\t\t\n\t\tlet testService = this.service.authenticate(this.username, this.password);\n\t\t\n\t\tif (testService) {\n\t\t\tthis.valid = true;\n\t\t\tthis.validMsg = 'GREAT';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t\tthis.router.navigate(['welcome', this.username, this.password]);\n\t\t}\n\t\telse {\n\t\t\t// this.validMsg = 'error';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t}\n\t}\n\t\n\thandleLogin(): void {\n\t\t\n\t\tlet testService = this.service.authenticate(this.username, this.password);\n\t\t\n\t\tif (testService) {\n\t\t\tthis.valid = true;\n\t\t\tthis.validMsg = 'GREAT';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t\tthis.router.navigate(['welcome', this.username, this.password]);\n\t\t}\n\t\telse {\n\t\t\t// this.validMsg = 'error';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t}\n\t}\n\t\n}\n\n\n\n\n\n\n","\n{{validMsg}}\n
\n\t
\n\t\tLegend\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n
\n\n

{{username}}

\n

{{password}}

\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { PersonService } from './../services/person.service';\n\n@Component({\n selector: 'app-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.css']\n})\nexport class MenuComponent implements OnInit {\n\t\n constructor(private service: PersonService) {\n\t\t\n\t}\n\t\n ngOnInit() {\n\t\t\n }\n\t\n\tisUserLoggedIn(): boolean {\n\t\treturn this.service.isUserLoggedIn();\n\t}\n\t\n\tlogout(): void {\n\t\tthis.service.logout();\n\t}\n\t\n}\n\n\n\n\n\n\n\n","\n
\n\t\n\t\n\t\n
\n\n\n\n\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { Person } from './../entities/person/person';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PersonService {\n\t\n\tprivate listPersons: Person[];\n\tprivate url: string;\n\t\n constructor(private http: HttpClient) {\n\t\tthis.url = 'http://localhost:8080/persons';\n\t}\n\t\n\tpublic getListPersons(): Observable {\n\t\treturn this.http.get(this.url);\n\t}\n\t\n\tpublic getPersonById(id: number): Person {\n\t\tthis.listPersons.forEach(person => {\n\t\t\tif (person.id === id) {\n\t\t\t\treturn person;\n\t\t\t}\n\t\t});\n\t\treturn null;\n\t}\n\t\n\tpublic savePerson(person: Person): Observable {\n\t\treturn this.http.post(this.url, person);\n\t}\n\t\n\tpublic authenticate(username: string, password: string): boolean {\n\t\t\n\t\tthis.getListPersons().subscribe(\n\t\t\tresponse => {\n\t\t\t\tthis.listPersons = response;\n\t\t\t}\n\t\t);\n\t\tusername = username.trim();\n\t\tlet map: Map = new Map();\n\t\t\n\t\tthis.listPersons.forEach(person => {\n\t\t\tmap.set(person.email, person.password);\n\t\t});\n\t\t\n\t\tif ( !map.has(username) ) {\n\t\t\tconsole.log('there is no such mail !!!!!');\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\tif ( map.get(username) != password ) {\n\t\t\t\tconsole.log('incorrect password, try again !!!!!');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( map.get(username) === password ) {\n\t\t\t\t\tconsole.log('Logged in, enjoyyy');\n\t\t\t\t\tsessionStorage.setItem('userAuth', username);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('ERROR !!!!!!!!!!!!!!!');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\tisUserLoggedIn(): boolean {\n\t\tlet user = sessionStorage.getItem('userAuth');\n\t\treturn !(user === null);\n\t}\n\t\n\tlogout(): void {\n\t\tsessionStorage.removeItem('userAuth');\n\t}\n\t\n}\n\n\n\n\n\n\n\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { PersonService } from './person.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteGuardService implements CanActivate {\n\t\n constructor(private service: PersonService, private router: Router) {\n\t\t\n\t}\n\t\n\tcanActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n\t\t\n\t\tif (this.service.isUserLoggedIn())\n\t\t\treturn true\n\t\t\n\t\tthis.router.navigate(['login']);\n\t\treturn false;\n\t}\n\t\n}\n\n\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PersonService } from './../services/person.service';\n\n@Component({\n selector: 'app-welcome',\n templateUrl: './welcome.component.html',\n styleUrls: ['./welcome.component.css']\n})\nexport class WelcomeComponent implements OnInit {\n\t\n\tusername: string = '';\n\tpassword: string = '';\n\t\n constructor(private service: PersonService, private route: ActivatedRoute) {\n\t\t\n\t}\n\n ngOnInit(): void {\n\t\tthis.username = this.route.snapshot.params['username'];\n\t\tthis.password = this.route.snapshot.params['password'];\n }\n\t\n\t\n\t\n}\n\n\n\n\n\n\n","\n

welcome works!


\n

{{username}}

\n

{{password}}

\n\n

Go to list-persons ?

\n\n


\n\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"],"sourceRoot":"webpack:///"} -------------------------------------------------------------------------------- /src/main/resources/static/main-es5.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///$_lazy_route_resource lazy namespace object","webpack:///src/app/app-routing.module.ts","webpack:///src/app/app.component.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/edit-persons/edit-persons.component.ts","webpack:///src/app/edit-persons/edit-persons.component.html","webpack:///src/app/error/error.component.ts","webpack:///src/app/error/error.component.html","webpack:///src/app/footer/footer.component.ts","webpack:///src/app/footer/footer.component.html","webpack:///src/app/list-persons/list-persons.component.ts","webpack:///src/app/list-persons/list-persons.component.html","webpack:///src/app/login/login.component.ts","webpack:///src/app/login/login.component.html","webpack:///src/app/menu/menu.component.ts","webpack:///src/app/menu/menu.component.html","webpack:///src/app/services/person.service.ts","webpack:///src/app/services/route-guard.service.ts","webpack:///src/app/welcome/welcome.component.ts","webpack:///src/app/welcome/welcome.component.html","webpack:///src/environments/environment.ts","webpack:///src/main.ts"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","module","exports","id","routes","path","component","canActivate","AppRoutingModule","forRoot","imports","AppComponent","title","selector","templateUrl","styleUrls","AppModule","declarations","providers","bootstrap","EditPersonsComponent","ErrorComponent","FooterComponent","ListPersonsComponent","service","headers","now","Date","getListPersons","subscribe","response","listPersons","reloadData","LoginComponent","router","routeGuardService","valid","validMsg","testService","authenticate","username","password","console","log","navigate","onSubmit","MenuComponent","isUserLoggedIn","logout","PersonService","http","url","get","forEach","person","post","trim","map","Map","set","email","has","sessionStorage","setItem","user","getItem","removeItem","providedIn","RouteGuardService","route","state","WelcomeComponent","snapshot","params","environment","production","bootstrapModule","err","error"],"mappings":";;;;;;;;;;;;;;;;;AAAA,aAASA,wBAAT,CAAkCC,GAAlC,EAAuC;AACtC;AACA;AACA,aAAOC,OAAO,CAACC,OAAR,GAAkBC,IAAlB,CAAuB,YAAW;AACxC,YAAIC,CAAC,GAAG,IAAIC,KAAJ,CAAU,yBAAyBL,GAAzB,GAA+B,GAAzC,CAAR;AACAI,SAAC,CAACE,IAAF,GAAS,kBAAT;AACA,cAAMF,CAAN;AACA,OAJM,CAAP;AAKA;;AACDL,4BAAwB,CAACQ,IAAzB,GAAgC,YAAW;AAAE,aAAO,EAAP;AAAY,KAAzD;;AACAR,4BAAwB,CAACG,OAAzB,GAAmCH,wBAAnC;AACAS,UAAM,CAACC,OAAP,GAAiBV,wBAAjB;AACAA,4BAAwB,CAACW,EAAzB,GAA8B,yCAA9B;;;;;;;;;;;;;;;;ACZA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAQA,QAAMC,MAAM,GAAW,CACtB;AAACC,UAAI,EAAE,EAAP;AAAWC,eAAS,EAAE;AAAtB,KADsB,EAEtB;AAACD,UAAI,EAAE,6BAAP;AAAsCC,eAAS,EAAE,2EAAjD;AAAmEC,iBAAW,EAAE,CAAC,+EAAD;AAAhF,KAFsB,EAGtB;AAACF,UAAI,EAAE,OAAP;AAAgBC,eAAS,EAAE,qEAA3B;AAA2CC,iBAAW,EAAE,CAAC,+EAAD;AAAxD,KAHsB,EAItB;AAACF,UAAI,EAAE,cAAP;AAAuBC,eAAS,EAAE,yFAAlC;AAAwDC,iBAAW,EAAE,CAAC,+EAAD;AAArE,KAJsB,EAMtB;AAACF,UAAI,EAAE,IAAP;AAAaC,eAAS,EAAE;AAAxB,KANsB,CAAvB;;QAaaE,gB;;;;;YAAAA;;;;yBAAAA,gB;AAAgB,O;AAAA,gBAHlB,CAAC,6DAAaC,OAAb,CAAqBL,MAArB,CAAD,CAGkB,EAFjB,4DAEiB;;;;0HAAhBI,gB,EAAgB;AAAA;AAAA,kBAFjB,4DAEiB;AAAA,O;AAFL,K;;;;;sEAEXA,gB,EAAgB;cAJ5B,sDAI4B;eAJnB;AACRE,iBAAO,EAAE,CAAC,6DAAaD,OAAb,CAAqBL,MAArB,CAAD,CADD;AAERF,iBAAO,EAAE,CAAC,4DAAD;AAFD,S;AAImB,Q;;;;;;;;;;;;;;;;;;ACrB7B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAOaS,Y,GALb;AAAA;;AAME,WAAAC,KAAA,GAAQ,UAAR;AACD,K;;;uBAFYD,Y;AAAY,K;;;YAAZA,Y;AAAY,+B;AAAA,c;AAAA,a;AAAA,mD;AAAA;AAAA;ACNzB;;AACA;;AAAI;;AAEJ;;AACC;;AACD;;AAEA;;AAAI;;AACJ;;;;;;;;;sEDFaA,Y,EAAY;cALxB,uDAKwB;eALd;AACTE,kBAAQ,EAAE,UADD;AAETC,qBAAW,EAAE,sBAFJ;AAGTC,mBAAS,EAAE,CAAC,qBAAD;AAHF,S;AAKc,Q;;;;;;;;;;;;;;;;;;AEPzB;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAmCaC,S;;;;;YAAAA,S;AAAS,kBAFR,2DAEQ;;;;yBAATA,S;AAAS,O;AAAA,iBAHT,E;AAAE,gBANJ,CACP,uEADO,EAEP,oEAFO,EAGT,0DAHS,EAIT,qEAJS,CAMI;;;;0HAGFA,S,EAAS;AAAA,uBAlBlB,2DAkBkB,EAjBlB,2EAiBkB,EAhBlB,qEAgBkB,EAflB,qEAekB,EAdlB,yFAckB,EAblB,mEAakB,EAZlB,yEAYkB,EAXlB,0FAWkB;AAXE,kBAGpB,uEAHoB,EAIpB,oEAJoB,EAKtB,0DALsB,EAMtB,qEANsB;AAWF,O;AALJ,K;;;;;sEAKLA,S,EAAS;cApBrB,sDAoBqB;eApBZ;AACRC,sBAAY,EAAE,CACZ,2DADY,EAEZ,2EAFY,EAGZ,qEAHY,EAIZ,qEAJY,EAKZ,yFALY,EAMZ,mEANY,EAOZ,yEAPY,EAQZ,0FARY,CADN;AAWRP,iBAAO,EAAE,CACP,uEADO,EAEP,oEAFO,EAGT,0DAHS,EAIT,qEAJS,CAXD;AAiBRQ,mBAAS,EAAE,EAjBH;AAkBRC,mBAAS,EAAE,CAAC,2DAAD;AAlBH,S;AAoBY,Q;;;;;;;;;;;;;;;;;;ACnCtB;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAOaC,oB;AAIX,sCAAc;AAAA;AAAG;;;;mCAET,CACP;;;;;;;uBAPUA,oB;AAAoB,K;;;YAApBA,oB;AAAoB,uC;AAAA,c;AAAA,a;AAAA;AAAA;ACPjC;;AAAG;;AAAmB;;;;;;;;sEDOTA,oB,EAAoB;cALhC,uDAKgC;eALtB;AACTP,kBAAQ,EAAE,kBADD;AAETC,qBAAW,EAAE,+BAFJ;AAGTC,mBAAS,EAAE,CAAC,8BAAD;AAHF,S;AAKsB,Q;;;;;;;;;;;;;;;;;;;;AEPjC;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAOaM,c;AAEX,gCAAc;AAAA;AAAG;;;;mCAET,CACP;;;;;;;uBALUA,c;AAAc,K;;;YAAdA,c;AAAc,gC;AAAA,c;AAAA,a;AAAA;AAAA;ACP3B;;AAAG;;AAAY;;;;;;;;sEDOFA,c,EAAc;cAL1B,uDAK0B;eALhB;AACTR,kBAAQ,EAAE,WADD;AAETC,qBAAW,EAAE,wBAFJ;AAGTC,mBAAS,EAAE,CAAC,uBAAD;AAHF,S;AAKgB,Q;;;;;;;;;;;;;;;;;;;;AEP3B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAOaO,e;AAEX,iCAAc;AAAA;AAEd;;;;mCAEQ,CAEP;;;;;;;uBARUA,e;AAAe,K;;;YAAfA,e;AAAe,iC;AAAA,c;AAAA,a;AAAA,4E;AAAA;AAAA;ACP5B;;AACC;;AACC;;AAAyB;;AAAiC;;AAC3D;;AACD;;;;;;;;sEDGaA,e,EAAe;cAL3B,uDAK2B;eALjB;AACTT,kBAAQ,EAAE,YADD;AAETC,qBAAW,EAAE,yBAFJ;AAGTC,mBAAS,EAAE,CAAC,wBAAD;AAHF,S;AAKiB,Q;;;;;;;;;;;;;;;;;;;;AEP5B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;ACKO;;AAAoC;;AAAU;;;;;;AAAV;;AAAA;;;;;;AAItC;;AACD;;AAAI;;AAAW;;AACf;;AAAI;;AAAW;;AACf;;AAAI;;AAAW;;AACf;;AAAI;;AAAc;;AAClB;;AAAI;;AAAiE;;AAAI;;AAAI;;AAC7E;;AAAI;;AAAkE;;AAAM;;AAAI;;AAC/E;;;;;;AANG;;AAAA;;AACA;;AAAA;;AACA;;AAAA;;AACA;;AAAA;;AACG;;AAAA;;AACA;;AAAA;;;;QDNEQ,oB;AAMZ,oCAAoBC,OAApB,EAA4C;AAAA;;AAAxB,aAAAA,OAAA,GAAAA,OAAA;AAJpB,aAAAC,OAAA,GAAU,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,EAA4B,UAA5B,EAAwC,EAAxC,EAA4C,EAA5C,CAAV;AAEA,aAAAC,GAAA,GAAY,IAAIC,IAAJ,EAAZ;AAIC;;;;qCAES;AAAA;;AACT,eAAKH,OAAL,CAAaI,cAAb,GAA8BC,SAA9B,CACC,UAAAC,QAAQ,EAAI;AACX,iBAAI,CAACC,WAAL,GAAmBD,QAAnB;AACA,WAHF;AAKA;;;mCAEO;AACP,eAAKE,UAAL;AACA;;;;;;;uBApBWT,oB,EAAoB,uI;AAAA,K;;;YAApBA,oB;AAAoB,uC;AAAA,e;AAAA,a;AAAA,2P;AAAA;AAAA;ACRjC;;AACC;;AACE;;AACE;;AACE;;AACF;;AACF;;AACA;;AACE;;AAQF;;AACF;;AAEA;;AAAI;;AACJ;;AAAyC;;AAAK;;AAAmB;;AAAK;;AACtE;;AAAI;;AAEJ;;AAAI;;;;;;AAAiC;;AACrC;;AAAI;;AACL;;;;AArBW;;AAAA;;AAIF;;AAAA;;AAeJ;;AAAA;;;;;;;;;;sEDfQA,oB,EAAoB;cALhC,uDAKgC;eALtB;AACXV,kBAAQ,EAAE,kBADC;AAEXC,qBAAW,EAAE,+BAFF;AAGXC,mBAAS,EAAE,CAAC,8BAAD;AAHA,S;AAKsB,Q;;;;;;;;;;;;;;;;;;;;;;AETjC;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;ACCA;;AAAuB;;AAAY;;;;;;AAAZ;;AAAA;;;;QDSVkB,c;AAOX,8BAAoBT,OAApB,EAAoDU,MAApD,EAA4EC,iBAA5E,EAAkH;AAAA;;AAA9F,aAAAX,OAAA,GAAAA,OAAA;AAAgC,aAAAU,MAAA,GAAAA,MAAA;AAAwB,aAAAC,iBAAA,GAAAA,iBAAA;AAH7E,aAAAC,KAAA,GAAkB,KAAlB;AACA,aAAAC,QAAA,GAAoB,OAApB;AAIC;;;;mCAEQ,CAEP;;;mCAEgB;AAEjB,cAAIC,WAAW,GAAG,KAAKd,OAAL,CAAae,YAAb,CAA0B,KAAKC,QAA/B,EAAyC,KAAKC,QAA9C,CAAlB;;AAEA,cAAIH,WAAJ,EAAiB;AAChB,iBAAKF,KAAL,GAAa,IAAb;AACA,iBAAKC,QAAL,GAAgB,OAAhB;AACAK,mBAAO,CAACC,GAAR,CAAY,KAAKN,QAAL,GAAgB,iBAA5B;AACA,iBAAKH,MAAL,CAAYU,QAAZ,CAAqB,CAAC,SAAD,EAAY,KAAKJ,QAAjB,EAA2B,KAAKC,QAAhC,CAArB;AACA,WALD,MAMK;AACJ;AACAC,mBAAO,CAACC,GAAR,CAAY,KAAKN,QAAL,GAAgB,iBAA5B;AACA;AACD;;;sCAEU;AAEV,cAAIC,WAAW,GAAG,KAAKd,OAAL,CAAae,YAAb,CAA0B,KAAKC,QAA/B,EAAyC,KAAKC,QAA9C,CAAlB;;AAEA,cAAIH,WAAJ,EAAiB;AAChB,iBAAKF,KAAL,GAAa,IAAb;AACA,iBAAKC,QAAL,GAAgB,OAAhB;AACAK,mBAAO,CAACC,GAAR,CAAY,KAAKN,QAAL,GAAgB,iBAA5B;AACA,iBAAKH,MAAL,CAAYU,QAAZ,CAAqB,CAAC,SAAD,EAAY,KAAKJ,QAAjB,EAA2B,KAAKC,QAAhC,CAArB;AACA,WALD,MAMK;AACJ;AACAC,mBAAO,CAACC,GAAR,CAAY,KAAKN,QAAL,GAAgB,iBAA5B;AACA;AACD;;;;;;;uBA7CWJ,c,EAAc,uI,EAAA,uH,EAAA,gJ;AAAA,K;;;YAAdA,c;AAAc,gC;AAAA,e;AAAA,a;AAAA,6rB;AAAA;AAAA;ACT3B;;AACA;;AAAM;AAAA,mBAAY,IAAAY,QAAA,EAAZ;AAAsB,WAAtB;;AACL;;AACC;;AAAQ;;AAAM;;AACd;;AACC;;AAAuD;;AAAQ;;AAC/D;;AACC;;AAAmG;AAAA;AAAA;;AAAnG;;AACD;;AACD;;AACA;;AACC;;AAA0D;;AAAQ;;AAClE;;AACC;;AAA4G;AAAA;AAAA;;AAA5G;;AACA;;AAAsC;;AACrC;;AAAQ;;AAAwB;;AAAc;;AAC/C;;AACD;;AACD;;AACA;;AACC;;AACC;;AAAgF;;AAAK;;AACtF;;AACD;;AACD;;AACD;;AAEA;;AAAI;;AAAY;;AAChB;;AAAI;;AAAY;;;;;;AA5BT;;AAOgG;;AAAA;;AAMS;;AAAA;;AAQtF;;AAAA;;AAMtB;;AAAA;;AACA;;AAAA;;;;;;;;;sEDnBSZ,c,EAAc;cAL1B,uDAK0B;eALhB;AACTpB,kBAAQ,EAAE,WADD;AAETC,qBAAW,EAAE,wBAFJ;AAGTC,mBAAS,EAAE,CAAC,uBAAD;AAHF,S;AAKgB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;AEV3B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;ACWO;;AACE;;AAAmC;;AAAK;;AAAsB;;AAAS;;AAAO;;AAChF;;;;;;AACA;;AACE;;AAA+C;;AAAY;;AAC7D;;;;;;AAGH;;AACK;;AAAwC;;AAAK;;AAC/C;;;;;;;;AACH;;AACK;;AAAoB;AAAA;;AAAA;;AAAA;AAAA;;AAAuC;;AAAM;;AACnE;;;;QDhBM+B,a;AAEX,6BAAoBtB,OAApB,EAA4C;AAAA;;AAAxB,aAAAA,OAAA,GAAAA,OAAA;AAEpB;;;;mCAEW,CAEV;;;yCAEY;AACb,iBAAO,KAAKA,OAAL,CAAauB,cAAb,EAAP;AACA;;;iCAEK;AACL,eAAKvB,OAAL,CAAawB,MAAb;AACA;;;;;;;uBAhBWF,a,EAAa,uI;AAAA,K;;;YAAbA,a;AAAa,+B;AAAA,e;AAAA,a;AAAA,o4B;AAAA;AAAA;ACP1B;;AAEC;;AACE;;AAA4C;;AAAkB;;AAC9D;;AACE;;AACF;;AAEA;;AACE;;AACE;;AAGA;;AAGF;;AACF;;AACC;;AAGA;;AAGD;;AACE;;AAGF;;AACF;;AAED;;;;AArBW;;AAAA;;AAGA;;AAAA;;AAKH;;AAAA;;AAGA;;AAAA;;;;;;;;;sEDdKA,a,EAAa;cALzB,uDAKyB;eALf;AACTjC,kBAAQ,EAAE,UADD;AAETC,qBAAW,EAAE,uBAFJ;AAGTC,mBAAS,EAAE,CAAC,sBAAD;AAHF,S;AAKe,Q;;;;;;;;;;;;;;;;;;;;;;AER1B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QASakC,a;AAKX,6BAAoBC,IAApB,EAAsC;AAAA;;AAAlB,aAAAA,IAAA,GAAAA,IAAA;AACpB,aAAKC,GAAL,GAAW,+BAAX;AACA;;;;yCAEoB;AACpB,iBAAO,KAAKD,IAAL,CAAUE,GAAV,CAAwB,KAAKD,GAA7B,CAAP;AACA;;;sCAEoBhD,E,EAAU;AAC9B,eAAK4B,WAAL,CAAiBsB,OAAjB,CAAyB,UAAAC,MAAM,EAAI;AAClC,gBAAIA,MAAM,CAACnD,EAAP,KAAcA,EAAlB,EAAsB;AACrB,qBAAOmD,MAAP;AACA;AACD,WAJD;AAKA,iBAAO,IAAP;AACA;;;mCAEiBA,M,EAAc;AAC/B,iBAAO,KAAKJ,IAAL,CAAUK,IAAV,CAAuB,KAAKJ,GAA5B,EAAiCG,MAAjC,CAAP;AACA;;;qCAEmBd,Q,EAAkBC,Q,EAAgB;AAAA;;AAErD,eAAKb,cAAL,GAAsBC,SAAtB,CACC,UAAAC,QAAQ,EAAI;AACX,kBAAI,CAACC,WAAL,GAAmBD,QAAnB;AACA,WAHF;AAKAU,kBAAQ,GAAGA,QAAQ,CAACgB,IAAT,EAAX;AACA,cAAIC,GAAG,GAAwB,IAAIC,GAAJ,EAA/B;AAEA,eAAK3B,WAAL,CAAiBsB,OAAjB,CAAyB,UAAAC,MAAM,EAAI;AAClCG,eAAG,CAACE,GAAJ,CAAQL,MAAM,CAACM,KAAf,EAAsBN,MAAM,CAACb,QAA7B;AACA,WAFD;;AAIA,cAAK,CAACgB,GAAG,CAACI,GAAJ,CAAQrB,QAAR,CAAN,EAA0B;AACzBE,mBAAO,CAACC,GAAR,CAAY,6BAAZ;AACA,mBAAO,KAAP;AACA,WAHD,MAIK;AACJ,gBAAKc,GAAG,CAACL,GAAJ,CAAQZ,QAAR,KAAqBC,QAA1B,EAAqC;AACpCC,qBAAO,CAACC,GAAR,CAAY,qCAAZ;AACA,qBAAO,KAAP;AACA,aAHD,MAIK;AACJ,kBAAKc,GAAG,CAACL,GAAJ,CAAQZ,QAAR,MAAsBC,QAA3B,EAAsC;AACrCC,uBAAO,CAACC,GAAR,CAAY,oBAAZ;AACAmB,8BAAc,CAACC,OAAf,CAAuB,UAAvB,EAAmCvB,QAAnC;AACA,uBAAO,IAAP;AACA,eAJD,MAKK;AACJE,uBAAO,CAACC,GAAR,CAAY,uBAAZ;AACA,uBAAO,KAAP;AACA;AACD;AAED;AAED;;;yCAEa;AACb,cAAIqB,IAAI,GAAGF,cAAc,CAACG,OAAf,CAAuB,UAAvB,CAAX;AACA,iBAAO,EAAED,IAAI,KAAK,IAAX,CAAP;AACA;;;iCAEK;AACLF,wBAAc,CAACI,UAAf,CAA0B,UAA1B;AACA;;;;;;;uBAxEWjB,a,EAAa,uH;AAAA,K;;;aAAbA,a;AAAa,eAAbA,aAAa,K;AAAA,kBAFZ;;;;;sEAEDA,a,EAAa;cAHzB,wDAGyB;eAHd;AACVkB,oBAAU,EAAE;AADF,S;AAGc,Q;;;;;;;;;;;;;;;;;;;;;;ACT1B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QAOaC,iB;AAEX,iCAAoB5C,OAApB,EAAoDU,MAApD,EAAoE;AAAA;;AAAhD,aAAAV,OAAA,GAAAA,OAAA;AAAgC,aAAAU,MAAA,GAAAA,MAAA;AAEpD;;;;oCAEWmC,K,EAA+BC,K,EAA0B;AAEpE,cAAI,KAAK9C,OAAL,CAAauB,cAAb,EAAJ,EACC,OAAO,IAAP;AAED,eAAKb,MAAL,CAAYU,QAAZ,CAAqB,CAAC,OAAD,CAArB;AACA,iBAAO,KAAP;AACA;;;;;;;uBAbWwB,iB,EAAiB,qH,EAAA,8G;AAAA,K;;;aAAjBA,iB;AAAiB,eAAjBA,iBAAiB,K;AAAA,kBAFhB;;;;;sEAEDA,iB,EAAiB;cAH7B,wDAG6B;eAHlB;AACVD,oBAAU,EAAE;AADF,S;AAGkB,Q;;;;;;;;;;;;;;;;;;;;;;;;ACP9B;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;QASaI,gB;AAKX,gCAAoB/C,OAApB,EAAoD6C,KAApD,EAA2E;AAAA;;AAAvD,aAAA7C,OAAA,GAAAA,OAAA;AAAgC,aAAA6C,KAAA,GAAAA,KAAA;AAHrD,aAAA7B,QAAA,GAAmB,EAAnB;AACA,aAAAC,QAAA,GAAmB,EAAnB;AAIC;;;;mCAEQ;AACR,eAAKD,QAAL,GAAgB,KAAK6B,KAAL,CAAWG,QAAX,CAAoBC,MAApB,CAA2B,UAA3B,CAAhB;AACA,eAAKhC,QAAL,GAAgB,KAAK4B,KAAL,CAAWG,QAAX,CAAoBC,MAApB,CAA2B,UAA3B,CAAhB;AACC;;;;;;;uBAZUF,gB,EAAgB,uI,EAAA,+H;AAAA,K;;;YAAhBA,gB;AAAgB,kC;AAAA,e;AAAA,a;AAAA,gF;AAAA;AAAA;ACR7B;;AAAG;;AAAc;;AAAI;;AACrB;;AAAK;;AAAa;;AAClB;;AAAK;;AAAa;;AAElB;;AAAI;;AAAgE;;AAAqB;;AAAI;;AAE7F;;AAAI;;AAAI;;;;AALH;;AAAA;;AACA;;AAAA;;;;;;;;;sEDMQA,gB,EAAgB;cAL5B,uDAK4B;eALlB;AACT1D,kBAAQ,EAAE,aADD;AAETC,qBAAW,EAAE,0BAFJ;AAGTC,mBAAS,EAAE,CAAC,yBAAD;AAHF,S;AAKkB,Q;;;;;;;;;;;;;;;;;;;;;;;;AET7B;AAAA;;;AAAA;AAAA;AAAA,O,CAAA;AACA;AACA;;;AAEO,QAAM2D,WAAW,GAAG;AACzBC,gBAAU,EAAE;AADa,KAApB;AAIP;;;;;;;AAOA;;;;;;;;;;;;;;;;;ACfA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAMA,QAAI,sEAAYA,UAAhB,EAA4B;AAC1B;AACD;;AAED,gFAAyBC,eAAzB,CAAyC,yDAAzC,WACS,UAAAC,GAAG;AAAA,aAAInC,OAAO,CAACoC,KAAR,CAAcD,GAAd,CAAJ;AAAA,KADZ","file":"main-es5.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { WelcomeComponent } from './welcome/welcome.component';\nimport { LoginComponent } from './login/login.component';\nimport { ErrorComponent } from './error/error.component';\nimport { ListPersonsComponent } from './list-persons/list-persons.component';\nimport { RouteGuardService } from './services/route-guard.service';\n\nconst routes: Routes = [\n\t{path: '', component: LoginComponent},\n\t{path: 'welcome/:username/:password', component: WelcomeComponent, canActivate: [RouteGuardService]},\n\t{path: 'login', component: LoginComponent, canActivate: [RouteGuardService]},\n\t{path: 'list-persons', component: ListPersonsComponent, canActivate: [RouteGuardService]},\n\t\n\t{path: '**', component: ErrorComponent}\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule {\n\t\n}\n\n\n\n\n\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n title = 'frontend';\n}\n","\n\n

\n\n
\n\t\n
\n\n

\n\n\n\n\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { WelcomeComponent } from './welcome/welcome.component';\nimport { LoginComponent } from './login/login.component';\nimport { ErrorComponent } from './error/error.component';\nimport { ListPersonsComponent } from './list-persons/list-persons.component';\nimport { MenuComponent } from './menu/menu.component';\nimport { FooterComponent } from './footer/footer.component';\nimport { EditPersonsComponent } from './edit-persons/edit-persons.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n WelcomeComponent,\n LoginComponent,\n ErrorComponent,\n ListPersonsComponent,\n MenuComponent,\n FooterComponent,\n EditPersonsComponent\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n\t\tFormsModule,\n\t\tHttpClientModule\n ],\n providers: [],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n\t\n}\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-edit-persons',\n templateUrl: './edit-persons.component.html',\n styleUrls: ['./edit-persons.component.css']\n})\nexport class EditPersonsComponent implements OnInit {\n\t\n\t\n\t\n constructor() { }\n\n ngOnInit(): void {\n }\n\t\n\t\n\t\n}\n\n\n\n\n\n\n\n\n","

edit-persons works!

\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-error',\n templateUrl: './error.component.html',\n styleUrls: ['./error.component.css']\n})\nexport class ErrorComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","

error works!

\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.css']\n})\nexport class FooterComponent implements OnInit {\n\t\n constructor() {\n\t\t\n\t}\n\t\n ngOnInit(): void {\n\t\t\n }\n\t\n}\n\n\n\n\n\n\n\n","
\n\t
\n\t\tPlace sticky footer content here.\n\t
\n
","import { Component, OnInit } from '@angular/core';\nimport { Person } from './../entities/person/person';\nimport { PersonService } from './../services/person.service';\n\n@Component({\nselector: 'app-list-persons',\ntemplateUrl: './list-persons.component.html',\nstyleUrls: ['./list-persons.component.css']\n})\nexport class ListPersonsComponent implements OnInit {\n\t\n\theaders = ['fname', 'lname', 'email', 'password', '', ''];\n\tlistPersons: Person[];\n\tnow: Date = new Date();\n\t\n\tconstructor(private service: PersonService) {\n\t\t\n\t}\n\t\n\treloadData(): void {\n\t\tthis.service.getListPersons().subscribe(\n\t\t\tresponse => {\n\t\t\t\tthis.listPersons = response;\n\t\t\t}\n\t\t);\n\t}\n\t\n\tngOnInit(): void {\n\t\tthis.reloadData();\n\t}\n\t\n\t\n}\n\n\n\n\n\n\n\n","\n
\n\t\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t \n\t \n\t
{{header}}
{{p.fname}}{{p.lname}}{{p.email}}{{p.password}}EditDelete
\n\t\n\t

\n\t

Reresh list-persons

\n\t

\n\n\t

Date : {{now | date | uppercase}}

\n\t

\n
\n\n\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { PersonService } from './../services/person.service';\nimport { RouteGuardService } from './../services/route-guard.service';\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.css']\n})\nexport class LoginComponent implements OnInit {\n\t\n\tusername : string;\n\tpassword : string;\n\tvalid : boolean = false;\n\tvalidMsg : string = 'error';\n\t\n constructor(private service: PersonService, private router: Router, private routeGuardService: RouteGuardService) {\n\t\t\n\t}\n\t\n ngOnInit(): void {\n\t\t\n }\n\t\n\tpublic onSubmit() {\n\t\t\n\t\tlet testService = this.service.authenticate(this.username, this.password);\n\t\t\n\t\tif (testService) {\n\t\t\tthis.valid = true;\n\t\t\tthis.validMsg = 'GREAT';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t\tthis.router.navigate(['welcome', this.username, this.password]);\n\t\t}\n\t\telse {\n\t\t\t// this.validMsg = 'error';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t}\n\t}\n\t\n\thandleLogin(): void {\n\t\t\n\t\tlet testService = this.service.authenticate(this.username, this.password);\n\t\t\n\t\tif (testService) {\n\t\t\tthis.valid = true;\n\t\t\tthis.validMsg = 'GREAT';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t\tthis.router.navigate(['welcome', this.username, this.password]);\n\t\t}\n\t\telse {\n\t\t\t// this.validMsg = 'error';\n\t\t\tconsole.log(this.validMsg + '!!!!!!!!!!!!!!!');\n\t\t}\n\t}\n\t\n}\n\n\n\n\n\n\n","\n{{validMsg}}\n
\n\t
\n\t\tLegend\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n
\n\n

{{username}}

\n

{{password}}

\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { PersonService } from './../services/person.service';\n\n@Component({\n selector: 'app-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.css']\n})\nexport class MenuComponent implements OnInit {\n\t\n constructor(private service: PersonService) {\n\t\t\n\t}\n\t\n ngOnInit() {\n\t\t\n }\n\t\n\tisUserLoggedIn(): boolean {\n\t\treturn this.service.isUserLoggedIn();\n\t}\n\t\n\tlogout(): void {\n\t\tthis.service.logout();\n\t}\n\t\n}\n\n\n\n\n\n\n\n","\n
\n\t\n\t\n\t\n
\n\n\n\n\n\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { Person } from './../entities/person/person';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PersonService {\n\t\n\tprivate listPersons: Person[];\n\tprivate url: string;\n\t\n constructor(private http: HttpClient) {\n\t\tthis.url = 'http://localhost:8080/persons';\n\t}\n\t\n\tpublic getListPersons(): Observable {\n\t\treturn this.http.get(this.url);\n\t}\n\t\n\tpublic getPersonById(id: number): Person {\n\t\tthis.listPersons.forEach(person => {\n\t\t\tif (person.id === id) {\n\t\t\t\treturn person;\n\t\t\t}\n\t\t});\n\t\treturn null;\n\t}\n\t\n\tpublic savePerson(person: Person): Observable {\n\t\treturn this.http.post(this.url, person);\n\t}\n\t\n\tpublic authenticate(username: string, password: string): boolean {\n\t\t\n\t\tthis.getListPersons().subscribe(\n\t\t\tresponse => {\n\t\t\t\tthis.listPersons = response;\n\t\t\t}\n\t\t);\n\t\tusername = username.trim();\n\t\tlet map: Map = new Map();\n\t\t\n\t\tthis.listPersons.forEach(person => {\n\t\t\tmap.set(person.email, person.password);\n\t\t});\n\t\t\n\t\tif ( !map.has(username) ) {\n\t\t\tconsole.log('there is no such mail !!!!!');\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\tif ( map.get(username) != password ) {\n\t\t\t\tconsole.log('incorrect password, try again !!!!!');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( map.get(username) === password ) {\n\t\t\t\t\tconsole.log('Logged in, enjoyyy');\n\t\t\t\t\tsessionStorage.setItem('userAuth', username);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('ERROR !!!!!!!!!!!!!!!');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\tisUserLoggedIn(): boolean {\n\t\tlet user = sessionStorage.getItem('userAuth');\n\t\treturn !(user === null);\n\t}\n\t\n\tlogout(): void {\n\t\tsessionStorage.removeItem('userAuth');\n\t}\n\t\n}\n\n\n\n\n\n\n\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { PersonService } from './person.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteGuardService implements CanActivate {\n\t\n constructor(private service: PersonService, private router: Router) {\n\t\t\n\t}\n\t\n\tcanActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n\t\t\n\t\tif (this.service.isUserLoggedIn())\n\t\t\treturn true\n\t\t\n\t\tthis.router.navigate(['login']);\n\t\treturn false;\n\t}\n\t\n}\n\n\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PersonService } from './../services/person.service';\n\n@Component({\n selector: 'app-welcome',\n templateUrl: './welcome.component.html',\n styleUrls: ['./welcome.component.css']\n})\nexport class WelcomeComponent implements OnInit {\n\t\n\tusername: string = '';\n\tpassword: string = '';\n\t\n constructor(private service: PersonService, private route: ActivatedRoute) {\n\t\t\n\t}\n\n ngOnInit(): void {\n\t\tthis.username = this.route.snapshot.params['username'];\n\t\tthis.password = this.route.snapshot.params['password'];\n }\n\t\n\t\n\t\n}\n\n\n\n\n\n\n","\n

welcome works!


\n

{{username}}

\n

{{password}}

\n\n

Go to list-persons ?

\n\n


\n\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"]} -------------------------------------------------------------------------------- /src/main/resources/static/runtime-es2015.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // install a JSONP callback for chunk loading 3 | /******/ function webpackJsonpCallback(data) { 4 | /******/ var chunkIds = data[0]; 5 | /******/ var moreModules = data[1]; 6 | /******/ var executeModules = data[2]; 7 | /******/ 8 | /******/ // add "moreModules" to the modules object, 9 | /******/ // then flag all "chunkIds" as loaded and fire callback 10 | /******/ var moduleId, chunkId, i = 0, resolves = []; 11 | /******/ for(;i < chunkIds.length; i++) { 12 | /******/ chunkId = chunkIds[i]; 13 | /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { 14 | /******/ resolves.push(installedChunks[chunkId][0]); 15 | /******/ } 16 | /******/ installedChunks[chunkId] = 0; 17 | /******/ } 18 | /******/ for(moduleId in moreModules) { 19 | /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { 20 | /******/ modules[moduleId] = moreModules[moduleId]; 21 | /******/ } 22 | /******/ } 23 | /******/ if(parentJsonpFunction) parentJsonpFunction(data); 24 | /******/ 25 | /******/ while(resolves.length) { 26 | /******/ resolves.shift()(); 27 | /******/ } 28 | /******/ 29 | /******/ // add entry modules from loaded chunk to deferred list 30 | /******/ deferredModules.push.apply(deferredModules, executeModules || []); 31 | /******/ 32 | /******/ // run deferred modules when all chunks ready 33 | /******/ return checkDeferredModules(); 34 | /******/ }; 35 | /******/ function checkDeferredModules() { 36 | /******/ var result; 37 | /******/ for(var i = 0; i < deferredModules.length; i++) { 38 | /******/ var deferredModule = deferredModules[i]; 39 | /******/ var fulfilled = true; 40 | /******/ for(var j = 1; j < deferredModule.length; j++) { 41 | /******/ var depId = deferredModule[j]; 42 | /******/ if(installedChunks[depId] !== 0) fulfilled = false; 43 | /******/ } 44 | /******/ if(fulfilled) { 45 | /******/ deferredModules.splice(i--, 1); 46 | /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); 47 | /******/ } 48 | /******/ } 49 | /******/ 50 | /******/ return result; 51 | /******/ } 52 | /******/ 53 | /******/ // The module cache 54 | /******/ var installedModules = {}; 55 | /******/ 56 | /******/ // object to store loaded and loading chunks 57 | /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 58 | /******/ // Promise = chunk loading, 0 = chunk loaded 59 | /******/ var installedChunks = { 60 | /******/ "runtime": 0 61 | /******/ }; 62 | /******/ 63 | /******/ var deferredModules = []; 64 | /******/ 65 | /******/ // The require function 66 | /******/ function __webpack_require__(moduleId) { 67 | /******/ 68 | /******/ // Check if module is in cache 69 | /******/ if(installedModules[moduleId]) { 70 | /******/ return installedModules[moduleId].exports; 71 | /******/ } 72 | /******/ // Create a new module (and put it into the cache) 73 | /******/ var module = installedModules[moduleId] = { 74 | /******/ i: moduleId, 75 | /******/ l: false, 76 | /******/ exports: {} 77 | /******/ }; 78 | /******/ 79 | /******/ // Execute the module function 80 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 81 | /******/ 82 | /******/ // Flag the module as loaded 83 | /******/ module.l = true; 84 | /******/ 85 | /******/ // Return the exports of the module 86 | /******/ return module.exports; 87 | /******/ } 88 | /******/ 89 | /******/ 90 | /******/ // expose the modules object (__webpack_modules__) 91 | /******/ __webpack_require__.m = modules; 92 | /******/ 93 | /******/ // expose the module cache 94 | /******/ __webpack_require__.c = installedModules; 95 | /******/ 96 | /******/ // define getter function for harmony exports 97 | /******/ __webpack_require__.d = function(exports, name, getter) { 98 | /******/ if(!__webpack_require__.o(exports, name)) { 99 | /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 100 | /******/ } 101 | /******/ }; 102 | /******/ 103 | /******/ // define __esModule on exports 104 | /******/ __webpack_require__.r = function(exports) { 105 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 106 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 107 | /******/ } 108 | /******/ Object.defineProperty(exports, '__esModule', { value: true }); 109 | /******/ }; 110 | /******/ 111 | /******/ // create a fake namespace object 112 | /******/ // mode & 1: value is a module id, require it 113 | /******/ // mode & 2: merge all properties of value into the ns 114 | /******/ // mode & 4: return value when already ns object 115 | /******/ // mode & 8|1: behave like require 116 | /******/ __webpack_require__.t = function(value, mode) { 117 | /******/ if(mode & 1) value = __webpack_require__(value); 118 | /******/ if(mode & 8) return value; 119 | /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 120 | /******/ var ns = Object.create(null); 121 | /******/ __webpack_require__.r(ns); 122 | /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 123 | /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 124 | /******/ return ns; 125 | /******/ }; 126 | /******/ 127 | /******/ // getDefaultExport function for compatibility with non-harmony modules 128 | /******/ __webpack_require__.n = function(module) { 129 | /******/ var getter = module && module.__esModule ? 130 | /******/ function getDefault() { return module['default']; } : 131 | /******/ function getModuleExports() { return module; }; 132 | /******/ __webpack_require__.d(getter, 'a', getter); 133 | /******/ return getter; 134 | /******/ }; 135 | /******/ 136 | /******/ // Object.prototype.hasOwnProperty.call 137 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 138 | /******/ 139 | /******/ // __webpack_public_path__ 140 | /******/ __webpack_require__.p = ""; 141 | /******/ 142 | /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; 143 | /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); 144 | /******/ jsonpArray.push = webpackJsonpCallback; 145 | /******/ jsonpArray = jsonpArray.slice(); 146 | /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); 147 | /******/ var parentJsonpFunction = oldJsonpFunction; 148 | /******/ 149 | /******/ 150 | /******/ // run deferred modules from other chunks 151 | /******/ checkDeferredModules(); 152 | /******/ }) 153 | /************************************************************************/ 154 | /******/ ([]); 155 | //# sourceMappingURL=runtime-es2015.js.map -------------------------------------------------------------------------------- /src/main/resources/static/runtime-es2015.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack/bootstrap"],"names":[],"mappings":";QAAA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA,iBAAiB,4BAA4B;QAC7C;QACA;QACA,kBAAkB,2BAA2B;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA","file":"runtime-es2015.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":"webpack:///"} -------------------------------------------------------------------------------- /src/main/resources/static/runtime-es5.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // install a JSONP callback for chunk loading 3 | /******/ function webpackJsonpCallback(data) { 4 | /******/ var chunkIds = data[0]; 5 | /******/ var moreModules = data[1]; 6 | /******/ var executeModules = data[2]; 7 | /******/ 8 | /******/ // add "moreModules" to the modules object, 9 | /******/ // then flag all "chunkIds" as loaded and fire callback 10 | /******/ var moduleId, chunkId, i = 0, resolves = []; 11 | /******/ for(;i < chunkIds.length; i++) { 12 | /******/ chunkId = chunkIds[i]; 13 | /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { 14 | /******/ resolves.push(installedChunks[chunkId][0]); 15 | /******/ } 16 | /******/ installedChunks[chunkId] = 0; 17 | /******/ } 18 | /******/ for(moduleId in moreModules) { 19 | /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { 20 | /******/ modules[moduleId] = moreModules[moduleId]; 21 | /******/ } 22 | /******/ } 23 | /******/ if(parentJsonpFunction) parentJsonpFunction(data); 24 | /******/ 25 | /******/ while(resolves.length) { 26 | /******/ resolves.shift()(); 27 | /******/ } 28 | /******/ 29 | /******/ // add entry modules from loaded chunk to deferred list 30 | /******/ deferredModules.push.apply(deferredModules, executeModules || []); 31 | /******/ 32 | /******/ // run deferred modules when all chunks ready 33 | /******/ return checkDeferredModules(); 34 | /******/ }; 35 | /******/ function checkDeferredModules() { 36 | /******/ var result; 37 | /******/ for(var i = 0; i < deferredModules.length; i++) { 38 | /******/ var deferredModule = deferredModules[i]; 39 | /******/ var fulfilled = true; 40 | /******/ for(var j = 1; j < deferredModule.length; j++) { 41 | /******/ var depId = deferredModule[j]; 42 | /******/ if(installedChunks[depId] !== 0) fulfilled = false; 43 | /******/ } 44 | /******/ if(fulfilled) { 45 | /******/ deferredModules.splice(i--, 1); 46 | /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); 47 | /******/ } 48 | /******/ } 49 | /******/ 50 | /******/ return result; 51 | /******/ } 52 | /******/ 53 | /******/ // The module cache 54 | /******/ var installedModules = {}; 55 | /******/ 56 | /******/ // object to store loaded and loading chunks 57 | /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 58 | /******/ // Promise = chunk loading, 0 = chunk loaded 59 | /******/ var installedChunks = { 60 | /******/ "runtime": 0 61 | /******/ }; 62 | /******/ 63 | /******/ var deferredModules = []; 64 | /******/ 65 | /******/ // The require function 66 | /******/ function __webpack_require__(moduleId) { 67 | /******/ 68 | /******/ // Check if module is in cache 69 | /******/ if(installedModules[moduleId]) { 70 | /******/ return installedModules[moduleId].exports; 71 | /******/ } 72 | /******/ // Create a new module (and put it into the cache) 73 | /******/ var module = installedModules[moduleId] = { 74 | /******/ i: moduleId, 75 | /******/ l: false, 76 | /******/ exports: {} 77 | /******/ }; 78 | /******/ 79 | /******/ // Execute the module function 80 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 81 | /******/ 82 | /******/ // Flag the module as loaded 83 | /******/ module.l = true; 84 | /******/ 85 | /******/ // Return the exports of the module 86 | /******/ return module.exports; 87 | /******/ } 88 | /******/ 89 | /******/ 90 | /******/ // expose the modules object (__webpack_modules__) 91 | /******/ __webpack_require__.m = modules; 92 | /******/ 93 | /******/ // expose the module cache 94 | /******/ __webpack_require__.c = installedModules; 95 | /******/ 96 | /******/ // define getter function for harmony exports 97 | /******/ __webpack_require__.d = function(exports, name, getter) { 98 | /******/ if(!__webpack_require__.o(exports, name)) { 99 | /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 100 | /******/ } 101 | /******/ }; 102 | /******/ 103 | /******/ // define __esModule on exports 104 | /******/ __webpack_require__.r = function(exports) { 105 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 106 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 107 | /******/ } 108 | /******/ Object.defineProperty(exports, '__esModule', { value: true }); 109 | /******/ }; 110 | /******/ 111 | /******/ // create a fake namespace object 112 | /******/ // mode & 1: value is a module id, require it 113 | /******/ // mode & 2: merge all properties of value into the ns 114 | /******/ // mode & 4: return value when already ns object 115 | /******/ // mode & 8|1: behave like require 116 | /******/ __webpack_require__.t = function(value, mode) { 117 | /******/ if(mode & 1) value = __webpack_require__(value); 118 | /******/ if(mode & 8) return value; 119 | /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 120 | /******/ var ns = Object.create(null); 121 | /******/ __webpack_require__.r(ns); 122 | /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 123 | /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 124 | /******/ return ns; 125 | /******/ }; 126 | /******/ 127 | /******/ // getDefaultExport function for compatibility with non-harmony modules 128 | /******/ __webpack_require__.n = function(module) { 129 | /******/ var getter = module && module.__esModule ? 130 | /******/ function getDefault() { return module['default']; } : 131 | /******/ function getModuleExports() { return module; }; 132 | /******/ __webpack_require__.d(getter, 'a', getter); 133 | /******/ return getter; 134 | /******/ }; 135 | /******/ 136 | /******/ // Object.prototype.hasOwnProperty.call 137 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 138 | /******/ 139 | /******/ // __webpack_public_path__ 140 | /******/ __webpack_require__.p = ""; 141 | /******/ 142 | /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; 143 | /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); 144 | /******/ jsonpArray.push = webpackJsonpCallback; 145 | /******/ jsonpArray = jsonpArray.slice(); 146 | /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); 147 | /******/ var parentJsonpFunction = oldJsonpFunction; 148 | /******/ 149 | /******/ 150 | /******/ // run deferred modules from other chunks 151 | /******/ checkDeferredModules(); 152 | /******/ }) 153 | /************************************************************************/ 154 | /******/ ([]); 155 | //# sourceMappingURL=runtime-es5.js.map -------------------------------------------------------------------------------- /src/main/resources/static/runtime-es5.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack/bootstrap"],"names":[],"mappings":";QAAA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA,iBAAiB,4BAA4B;QAC7C;QACA;QACA,kBAAkB,2BAA2B;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA","file":"runtime-es5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":"webpack:///"} -------------------------------------------------------------------------------- /src/test/java/com/selimhorri/pack/SpringBootAndAngularApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.selimhorri.pack; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class SpringBootAndAngularApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | --------------------------------------------------------------------------------