├── .DS_Store ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md ├── .gitignore ├── .mvn └── wrapper │ ├── MavenWrapperDownloader.java │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── LICENSE ├── README.md ├── SECURITY.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── .DS_Store ├── main ├── .DS_Store ├── java │ ├── .DS_Store │ └── com │ │ ├── .DS_Store │ │ └── imagehoster │ │ └── ImageHosterApplication │ │ ├── ImageHosterApplication.java │ │ ├── config │ │ └── JpaConfigurations.java │ │ ├── controller │ │ ├── ImageController.java │ │ └── UserController.java │ │ ├── model │ │ ├── Image.java │ │ ├── User.java │ │ └── UserProfile.java │ │ ├── repository │ │ ├── ImageRepository.java │ │ └── UserRepository.java │ │ └── service │ │ ├── ImageService.java │ │ └── UserService.java └── resources │ ├── .DS_Store │ ├── META-INF │ └── persistence.xml │ ├── application.properties │ ├── static │ ├── css │ │ ├── Upload_style.css │ │ ├── edit_pagestyle.css │ │ ├── index_style.css │ │ ├── panda.css │ │ ├── signup_style.css │ │ └── style.css │ ├── image │ │ ├── Ashish.png │ │ ├── arun_sir.png │ │ ├── icon.png │ │ ├── im.jpg │ │ ├── important.jpg │ │ ├── maini.png │ │ ├── n.png │ │ ├── pic1.png │ │ ├── pic3.png │ │ ├── rahul.png │ │ └── tohan.png │ └── js │ │ ├── Upload_script.js │ │ ├── edit_pagescript.js │ │ ├── index_style.js │ │ ├── login1.js │ │ ├── script.js │ │ └── signup_script.js │ └── templates │ ├── Edit_Page │ └── edit_page.html │ ├── Login │ └── login_page.html │ ├── Print │ └── print.html │ ├── Signup │ └── signup.html │ ├── Upload │ └── Upload.html │ ├── index.html │ ├── layout.html │ └── users │ └── registration.html └── test └── java └── com └── imagehoster └── ImageHosterApplication └── ImageHosterApplicationTests.java /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/.DS_Store -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ["https://paypal.me/ashish2030", 13 | "https://www.buymeacoffee.com/ashish2030"] 14 | # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /.mvn/wrapper/MavenWrapperDownloader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-present the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | import java.net.*; 17 | import java.io.*; 18 | import java.nio.channels.*; 19 | import java.util.Properties; 20 | 21 | public class MavenWrapperDownloader { 22 | 23 | private static final String WRAPPER_VERSION = "0.5.6"; 24 | /** 25 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. 26 | */ 27 | private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" 28 | + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; 29 | 30 | /** 31 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to 32 | * use instead of the default one. 33 | */ 34 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH = 35 | ".mvn/wrapper/maven-wrapper.properties"; 36 | 37 | /** 38 | * Path where the maven-wrapper.jar will be saved to. 39 | */ 40 | private static final String MAVEN_WRAPPER_JAR_PATH = 41 | ".mvn/wrapper/maven-wrapper.jar"; 42 | 43 | /** 44 | * Name of the property which should be used to override the default download url for the wrapper. 45 | */ 46 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; 47 | 48 | public static void main(String args[]) { 49 | System.out.println("- Downloader started"); 50 | File baseDirectory = new File(args[0]); 51 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); 52 | 53 | // If the maven-wrapper.properties exists, read it and check if it contains a custom 54 | // wrapperUrl parameter. 55 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); 56 | String url = DEFAULT_DOWNLOAD_URL; 57 | if(mavenWrapperPropertyFile.exists()) { 58 | FileInputStream mavenWrapperPropertyFileInputStream = null; 59 | try { 60 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); 61 | Properties mavenWrapperProperties = new Properties(); 62 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); 63 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); 64 | } catch (IOException e) { 65 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); 66 | } finally { 67 | try { 68 | if(mavenWrapperPropertyFileInputStream != null) { 69 | mavenWrapperPropertyFileInputStream.close(); 70 | } 71 | } catch (IOException e) { 72 | // Ignore ... 73 | } 74 | } 75 | } 76 | System.out.println("- Downloading from: " + url); 77 | 78 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); 79 | if(!outputFile.getParentFile().exists()) { 80 | if(!outputFile.getParentFile().mkdirs()) { 81 | System.out.println( 82 | "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); 83 | } 84 | } 85 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); 86 | try { 87 | downloadFileFromURL(url, outputFile); 88 | System.out.println("Done"); 89 | System.exit(0); 90 | } catch (Throwable e) { 91 | System.out.println("- Error downloading"); 92 | e.printStackTrace(); 93 | System.exit(1); 94 | } 95 | } 96 | 97 | private static void downloadFileFromURL(String urlString, File destination) throws Exception { 98 | if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { 99 | String username = System.getenv("MVNW_USERNAME"); 100 | char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); 101 | Authenticator.setDefault(new Authenticator() { 102 | @Override 103 | protected PasswordAuthentication getPasswordAuthentication() { 104 | return new PasswordAuthentication(username, password); 105 | } 106 | }); 107 | } 108 | URL website = new URL(urlString); 109 | ReadableByteChannel rbc; 110 | rbc = Channels.newChannel(website.openStream()); 111 | FileOutputStream fos = new FileOutputStream(destination); 112 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 113 | fos.close(); 114 | rbc.close(); 115 | } 116 | 117 | } 118 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/.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.3/apache-maven-3.6.3-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Ashish Kumar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

𝐈𝐦𝐚𝐠𝐞-𝐇𝐨𝐬𝐭𝐞𝐫-𝐀𝐩𝐩𝐥𝐢𝐜𝐚𝐭𝐢𝐨𝐧

2 | 3 |

:octocat:🌟 ᴛʜɪꜱ ɪꜱ ᴍʏ ɪᴍᴀɢᴇ ʜᴏꜱᴛɪɴɢ ᴀᴘᴘʟɪᴄᴀᴛɪᴏɴ ᴡʜᴇʀᴇ ʏᴏᴜ ᴄᴀɴ ᴜᴘʟᴏᴀᴅ ʏᴏᴜʀ ᴘɪᴄᴛᴜʀᴇꜱ ꜱᴀꜰᴇʟʏ 💻 🎯🚀


4 |

5 | 6 | Swagger forks 7 | 8 | 9 | EmailSender-Rest-API-Backend-Of-frontend-Using-javascript 10 | 11 | 12 | EmailSender-Rest-API-Backend-Of-frontend-Using-javascript 13 | 14 | 15 | EmailSender-Rest-API-Backend-Of-frontend-Using-javascript 16 | 17 |

18 | 19 | 20 | [![GitHub last commit](https://img.shields.io/github/last-commit/ashish2030/EmailSender-Rest-API-Backend-Of-frontend-Using-javascript)](https://github.com/ashish2030/EmailSender-Rest-API-Backend-Of-frontend-Using-javascript/commits/master) 21 | [![GitHub repo size](https://img.shields.io/github/repo-size/ashish2030/EmailSender-Rest-API-Backend-Of-frontend-Using-javascript)](https://github.com/ashish2030/EmailSender-Rest-API-Backend-Of-frontend-Using-javascript/archive/master.zip) 22 | 23 | https://user-images.githubusercontent.com/61516051/117404816-39e82580-af28-11eb-8165-a6ad8d4fe428.mp4 24 | 25 | 26 |

27 | View Demo 28 | · 29 | Report Bug 30 | · 31 | Request Feature 32 |

33 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 5.1.x | :white_check_mark: | 11 | | 5.0.x | :x: | 12 | | 4.0.x | :white_check_mark: | 13 | | < 4.0 | :x: | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | Use this section to tell people how to report a vulnerability. 18 | 19 | Tell them where to go, how often they can expect to get an update on a 20 | reported vulnerability, what to expect if the vulnerability is accepted or 21 | declined, etc. 22 | -------------------------------------------------------------------------------- /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 | # Maven 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 | fi 118 | 119 | if [ -z "$JAVA_HOME" ]; then 120 | javaExecutable="`which javac`" 121 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 122 | # readlink(1) is not available as standard on Solaris 10. 123 | readLink=`which readlink` 124 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 125 | if $darwin ; then 126 | javaHome="`dirname \"$javaExecutable\"`" 127 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 128 | else 129 | javaExecutable="`readlink -f \"$javaExecutable\"`" 130 | fi 131 | javaHome="`dirname \"$javaExecutable\"`" 132 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 133 | JAVA_HOME="$javaHome" 134 | export JAVA_HOME 135 | fi 136 | fi 137 | fi 138 | 139 | if [ -z "$JAVACMD" ] ; then 140 | if [ -n "$JAVA_HOME" ] ; then 141 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 142 | # IBM's JDK on AIX uses strange locations for the executables 143 | JAVACMD="$JAVA_HOME/jre/sh/java" 144 | else 145 | JAVACMD="$JAVA_HOME/bin/java" 146 | fi 147 | else 148 | JAVACMD="`which java`" 149 | fi 150 | fi 151 | 152 | if [ ! -x "$JAVACMD" ] ; then 153 | echo "Error: JAVA_HOME is not defined correctly." >&2 154 | echo " We cannot execute $JAVACMD" >&2 155 | exit 1 156 | fi 157 | 158 | if [ -z "$JAVA_HOME" ] ; then 159 | echo "Warning: JAVA_HOME environment variable is not set." 160 | fi 161 | 162 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 163 | 164 | # traverses directory structure from process work directory to filesystem root 165 | # first directory with .mvn subdirectory is considered project base directory 166 | find_maven_basedir() { 167 | 168 | if [ -z "$1" ] 169 | then 170 | echo "Path not specified to find_maven_basedir" 171 | return 1 172 | fi 173 | 174 | basedir="$1" 175 | wdir="$1" 176 | while [ "$wdir" != '/' ] ; do 177 | if [ -d "$wdir"/.mvn ] ; then 178 | basedir=$wdir 179 | break 180 | fi 181 | # workaround for JBEAP-8937 (on Solaris 10/Sparc) 182 | if [ -d "${wdir}" ]; then 183 | wdir=`cd "$wdir/.."; pwd` 184 | fi 185 | # end of workaround 186 | done 187 | echo "${basedir}" 188 | } 189 | 190 | # concatenates all lines of a file 191 | concat_lines() { 192 | if [ -f "$1" ]; then 193 | echo "$(tr -s '\n' ' ' < "$1")" 194 | fi 195 | } 196 | 197 | BASE_DIR=`find_maven_basedir "$(pwd)"` 198 | if [ -z "$BASE_DIR" ]; then 199 | exit 1; 200 | fi 201 | 202 | ########################################################################################## 203 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 204 | # This allows using the maven wrapper in projects that prohibit checking in binary data. 205 | ########################################################################################## 206 | if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then 207 | if [ "$MVNW_VERBOSE" = true ]; then 208 | echo "Found .mvn/wrapper/maven-wrapper.jar" 209 | fi 210 | else 211 | if [ "$MVNW_VERBOSE" = true ]; then 212 | echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." 213 | fi 214 | if [ -n "$MVNW_REPOURL" ]; then 215 | jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" 216 | else 217 | jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" 218 | fi 219 | while IFS="=" read key value; do 220 | case "$key" in (wrapperUrl) jarUrl="$value"; break ;; 221 | esac 222 | done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" 223 | if [ "$MVNW_VERBOSE" = true ]; then 224 | echo "Downloading from: $jarUrl" 225 | fi 226 | wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" 227 | if $cygwin; then 228 | wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` 229 | fi 230 | 231 | if command -v wget > /dev/null; then 232 | if [ "$MVNW_VERBOSE" = true ]; then 233 | echo "Found wget ... using wget" 234 | fi 235 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then 236 | wget "$jarUrl" -O "$wrapperJarPath" 237 | else 238 | wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" 239 | fi 240 | elif command -v curl > /dev/null; then 241 | if [ "$MVNW_VERBOSE" = true ]; then 242 | echo "Found curl ... using curl" 243 | fi 244 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then 245 | curl -o "$wrapperJarPath" "$jarUrl" -f 246 | else 247 | curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f 248 | fi 249 | 250 | else 251 | if [ "$MVNW_VERBOSE" = true ]; then 252 | echo "Falling back to using Java to download" 253 | fi 254 | javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" 255 | # For Cygwin, switch paths to Windows format before running javac 256 | if $cygwin; then 257 | javaClass=`cygpath --path --windows "$javaClass"` 258 | fi 259 | if [ -e "$javaClass" ]; then 260 | if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 261 | if [ "$MVNW_VERBOSE" = true ]; then 262 | echo " - Compiling MavenWrapperDownloader.java ..." 263 | fi 264 | # Compiling the Java class 265 | ("$JAVA_HOME/bin/javac" "$javaClass") 266 | fi 267 | if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 268 | # Running the downloader 269 | if [ "$MVNW_VERBOSE" = true ]; then 270 | echo " - Running MavenWrapperDownloader.java ..." 271 | fi 272 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") 273 | fi 274 | fi 275 | fi 276 | fi 277 | ########################################################################################## 278 | # End of extension 279 | ########################################################################################## 280 | 281 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 282 | if [ "$MVNW_VERBOSE" = true ]; then 283 | echo $MAVEN_PROJECTBASEDIR 284 | fi 285 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 286 | 287 | # For Cygwin, switch paths to Windows format before running java 288 | if $cygwin; then 289 | [ -n "$M2_HOME" ] && 290 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 291 | [ -n "$JAVA_HOME" ] && 292 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 293 | [ -n "$CLASSPATH" ] && 294 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 295 | [ -n "$MAVEN_PROJECTBASEDIR" ] && 296 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 297 | fi 298 | 299 | # Provide a "standardized" way to retrieve the CLI args that will 300 | # work with both Windows and non-Windows executions. 301 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" 302 | export MAVEN_CMD_LINE_ARGS 303 | 304 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 305 | 306 | exec "$JAVACMD" \ 307 | $MAVEN_OPTS \ 308 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 309 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 310 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 311 | -------------------------------------------------------------------------------- /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 Maven 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 keystroke 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 by 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.5.6/maven-wrapper-0.5.6.jar" 124 | 125 | FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( 126 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B 127 | ) 128 | 129 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 130 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data. 131 | if exist %WRAPPER_JAR% ( 132 | if "%MVNW_VERBOSE%" == "true" ( 133 | echo Found %WRAPPER_JAR% 134 | ) 135 | ) else ( 136 | if not "%MVNW_REPOURL%" == "" ( 137 | SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" 138 | ) 139 | if "%MVNW_VERBOSE%" == "true" ( 140 | echo Couldn't find %WRAPPER_JAR%, downloading it ... 141 | echo Downloading from: %DOWNLOAD_URL% 142 | ) 143 | 144 | powershell -Command "&{"^ 145 | "$webclient = new-object System.Net.WebClient;"^ 146 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ 147 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ 148 | "}"^ 149 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ 150 | "}" 151 | if "%MVNW_VERBOSE%" == "true" ( 152 | echo Finished downloading %WRAPPER_JAR% 153 | ) 154 | ) 155 | @REM End of extension 156 | 157 | @REM Provide a "standardized" way to retrieve the CLI args that will 158 | @REM work with both Windows and non-Windows executions. 159 | set MAVEN_CMD_LINE_ARGS=%* 160 | 161 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 162 | if ERRORLEVEL 1 goto error 163 | goto end 164 | 165 | :error 166 | set ERROR_CODE=1 167 | 168 | :end 169 | @endlocal & set ERROR_CODE=%ERROR_CODE% 170 | 171 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 172 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 173 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 174 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 175 | :skipRcPost 176 | 177 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 178 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 179 | 180 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 181 | 182 | exit /B %ERROR_CODE% 183 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.springframework.boot 7 | spring-boot-starter-parent 8 | 2.4.2 9 | 10 | 11 | com.upgrad 12 | TechnicalBlogApplication 13 | 0.0.1-SNAPSHOT 14 | TechnicalBlogApplication 15 | Demo project for Spring Boot 16 | 17 | 1.8 18 | 19 | 20 | 21 | org.springframework.boot 22 | spring-boot-starter-thymeleaf 23 | 24 | 25 | org.springframework.boot 26 | spring-boot-starter-web 27 | 28 | 29 | commons-io 30 | commons-io 31 | 2.8.0 32 | 33 | 34 | 35 | org.postgresql 36 | postgresql 37 | 42.2.18 38 | 39 | 40 | 41 | org.springframework.boot 42 | spring-boot-starter-data-jpa 43 | 2.4.1 44 | 45 | 46 | 47 | org.springframework.boot 48 | spring-boot-starter-test 49 | test 50 | 51 | 52 | 53 | 54 | 55 | 56 | org.springframework.boot 57 | spring-boot-maven-plugin 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/.DS_Store -------------------------------------------------------------------------------- /src/main/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/.DS_Store -------------------------------------------------------------------------------- /src/main/java/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/java/.DS_Store -------------------------------------------------------------------------------- /src/main/java/com/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/java/com/.DS_Store -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/ImageHosterApplication.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ImageHosterApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(ImageHosterApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/config/JpaConfigurations.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.config; 2 | import org.springframework.context.annotation.Bean; 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 5 | 6 | import javax.persistence.EntityManagerFactory; 7 | 8 | @Configuration 9 | public class JpaConfigurations { 10 | 11 | @Bean 12 | public EntityManagerFactory entityManagerFactory() { 13 | LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 14 | entityManagerFactoryBean.setPersistenceXmlLocation("classpath:META-INF/persistence.xml"); 15 | entityManagerFactoryBean.afterPropertiesSet(); 16 | return entityManagerFactoryBean.getObject(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/controller/ImageController.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.controller; 2 | import com.imagehoster.ImageHosterApplication.model.Image; 3 | import com.imagehoster.ImageHosterApplication.model.User; 4 | import com.imagehoster.ImageHosterApplication.service.ImageService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.ui.Model; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.RequestParam; 11 | import org.springframework.web.multipart.MultipartFile; 12 | import javax.servlet.http.HttpSession; 13 | import java.util.*; 14 | @Controller 15 | public class ImageController 16 | { 17 | @Autowired 18 | private ImageService image; 19 | @RequestMapping(method = RequestMethod.GET, value = "print_page") 20 | public String getUserPost(Model model,HttpSession session) 21 | { 22 | User user=(User)session.getAttribute("LoggedUser"); 23 | List image1 = image.getAllPost(user); 24 | model.addAttribute("images", image1); 25 | return "Print/print"; 26 | } 27 | 28 | 29 | @RequestMapping(value="/") 30 | public String temp() 31 | { 32 | return "index"; 33 | } 34 | @RequestMapping(method = RequestMethod.GET, value = "/users/upload") 35 | public String newImage() 36 | { 37 | return "Upload/Upload"; 38 | } 39 | @RequestMapping(method = RequestMethod.POST, value = "/upload_Successful") 40 | public String createNewImage( @RequestParam ("file") MultipartFile file, Image newPost, HttpSession session) 41 | { 42 | User user=(User)session.getAttribute("LoggedUser"); 43 | newPost.setUser(user); 44 | newPost.setDate(new Date()); 45 | image.createPost(newPost,file); 46 | return "redirect:/print_page"; 47 | } 48 | @RequestMapping(method = RequestMethod.POST, value = "/editpost") 49 | public String editPost( @RequestParam (name="postId") Integer postId,Model model) 50 | { 51 | Image image1=image.getImage(postId); 52 | model.addAttribute("post",image1); 53 | return "Edit_Page/edit_page"; 54 | } 55 | @RequestMapping(method = RequestMethod.PUT, value = "/editpost_successful") 56 | public String editPostSubmit(@RequestParam (name="postId" ) Integer postId ,@RequestParam ("file") MultipartFile file,Image updateImgData,HttpSession session) 57 | { 58 | updateImgData.setId(postId); 59 | updateImgData.setDate((new Date())); 60 | User user=(User)session.getAttribute("LoggedUser"); 61 | updateImgData.setUser(user); 62 | image.updatePost(updateImgData,file); 63 | return "redirect:/print_page"; 64 | } 65 | 66 | @RequestMapping(method = RequestMethod.DELETE, value = "/deletepost") 67 | public String deletePost(@RequestParam(name = "postId") Integer postId) 68 | { 69 | image.deletePost(postId); 70 | return "redirect:/print_page"; 71 | } 72 | 73 | 74 | } 75 | 76 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.controller; 2 | import com.imagehoster.ImageHosterApplication.model.User; 3 | import com.imagehoster.ImageHosterApplication.model.UserProfile; 4 | import com.imagehoster.ImageHosterApplication.service.UserService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.ui.Model; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import javax.servlet.http.HttpSession; 11 | @Controller 12 | public class UserController { 13 | 14 | @Autowired 15 | private UserService userService; 16 | 17 | @RequestMapping(method = RequestMethod.GET, value = "/users/login") 18 | public String login(Model model) { 19 | model.addAttribute("user", new User()); 20 | return "Login/login_page"; 21 | } 22 | // POST Request to "/users/login" 23 | @RequestMapping(method = RequestMethod.POST, value = "/login_success") 24 | public String loginUser(User user, HttpSession session) 25 | { 26 | User existingUser = userService.login(user); 27 | if(existingUser == null) 28 | { 29 | System.out.println("USER DOES NOT EXIST"); 30 | return "Login/login_page"; 31 | } else 32 | { 33 | session.setAttribute("LoggedUser", existingUser); 34 | System.out.println("USER FOUND!"); 35 | return "redirect:print_page"; 36 | } 37 | } 38 | @RequestMapping(method = RequestMethod.GET, value = "/users/signup") 39 | public String registration(Model model) { 40 | User user = new User(); 41 | UserProfile userProfile = new UserProfile(); 42 | user.setUserProfile(userProfile); 43 | model.addAttribute("user", user); 44 | return "Signup/signup"; 45 | } 46 | 47 | @RequestMapping(method = RequestMethod.POST, value = "/signup") 48 | public String userRegistration(User user) 49 | { 50 | // Business logic to save the credentials. of the users to teh given database 51 | userService.registerUser(user); 52 | return "redirect:/users/login "; 53 | } 54 | @RequestMapping(method = RequestMethod.GET, value = "/users/logout") 55 | public String userLogout(HttpSession session) { 56 | session.invalidate(); 57 | return "redirect:/users/login "; 58 | } 59 | } 60 | 61 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/model/Image.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.model; 2 | import javax.persistence.*; 3 | import java.util.Date; 4 | @Entity 5 | @Table(name = "image") 6 | public class Image { 7 | public Image() 8 | { 9 | 10 | } 11 | @Id 12 | @GeneratedValue(strategy = GenerationType.SEQUENCE) 13 | @Column(name = "id") 14 | private Integer id; 15 | @Column(name = "title") 16 | private String title; 17 | //The image in Base64 format 18 | @Column(name = "imagefile",columnDefinition = "TEXT") 19 | private String imageFile; 20 | @Column(name = "description") 21 | private String description; 22 | @Column(name = "tags") 23 | private String tags; 24 | 25 | public String getTags() { 26 | return tags; 27 | } 28 | 29 | public void setTags(String tags) { 30 | this.tags = tags; 31 | } 32 | 33 | //Date on which the image is posted 34 | @Column(name = "date") 35 | private Date date; 36 | @ManyToOne(fetch = FetchType.EAGER) 37 | @JoinColumn(name="user_id") 38 | private User user; 39 | public User getUser() 40 | { 41 | return user; 42 | } 43 | public void setUser(User user) { 44 | this.user = user; 45 | } 46 | //Write the constructor for id, title, imageFile, and date 47 | public Image(Integer id, String title, String imageFile, Date date) { 48 | this.id = id; 49 | this.title = title; 50 | this.imageFile = imageFile; 51 | this.date = date; 52 | } 53 | public Integer getId() { 54 | return id; 55 | } 56 | public void setId(Integer id) { 57 | this.id = id; 58 | } 59 | public String getTitle() { 60 | return title; 61 | } 62 | public void setTitle(String title) { 63 | this.title = title; 64 | } 65 | public String getImageFile() { 66 | return imageFile; 67 | } 68 | public void setImageFile(String imageFile) { 69 | this.imageFile = imageFile; 70 | } 71 | public String getDescription() { 72 | return description; 73 | } 74 | public void setDescription(String description) { 75 | this.description = description; 76 | } 77 | public Date getDate() { 78 | return date; 79 | } 80 | public void setDate(Date date) { 81 | this.date = date; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/model/User.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.model; 2 | 3 | import javax.persistence.*; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | @Entity 7 | @Table(name = "users") 8 | public class User { 9 | @Id 10 | @GeneratedValue(strategy = GenerationType.SEQUENCE) 11 | @Column(name = "id") 12 | private Integer id; 13 | 14 | @Column(name = "username") 15 | private String username; 16 | 17 | @Column(name = "password") 18 | private String password; 19 | 20 | @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 21 | @JoinTable(name = "profile_id") 22 | private UserProfile userProfile; 23 | 24 | @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY) 25 | private List posts = new ArrayList<>(); 26 | 27 | public UserProfile getUserProfile() { 28 | return userProfile; 29 | } 30 | 31 | public void setUserProfile(UserProfile userProfile) { 32 | this.userProfile = userProfile; 33 | } 34 | 35 | 36 | public Integer getId() { 37 | return id; 38 | } 39 | 40 | public void setId(Integer id) { 41 | this.id = id; 42 | } 43 | 44 | public String getUsername() { 45 | return username; 46 | } 47 | 48 | public void setUsername(String username) { 49 | this.username = username; 50 | } 51 | 52 | public String getPassword() { 53 | return password; 54 | } 55 | 56 | public void setPassword(String password) { 57 | this.password = password; 58 | } 59 | 60 | public List getPosts() { 61 | return posts; 62 | } 63 | 64 | public void setPosts(List posts) { 65 | this.posts = posts; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/model/UserProfile.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.model; 2 | 3 | 4 | import javax.persistence.*; 5 | 6 | @Entity 7 | @Table(name = "user_profile") 8 | public class UserProfile { 9 | 10 | @Id 11 | @GeneratedValue(strategy = GenerationType.SEQUENCE) 12 | @Column(name = "id") 13 | private Integer id; 14 | 15 | @Column(name = "full_name") 16 | private String fullName; 17 | 18 | @Column(name = "email_address",unique=true) 19 | private String email; 20 | 21 | @Column(name = "mobile_number") 22 | private String mobileNumber; 23 | 24 | public Integer getId() { 25 | return id; 26 | } 27 | 28 | public void setId(Integer id) { 29 | this.id = id; 30 | } 31 | 32 | public String getFullName() { 33 | return fullName; 34 | } 35 | 36 | public void setFullName(String fullName) { 37 | this.fullName = fullName; 38 | } 39 | 40 | public String getEmail() { 41 | return email; 42 | } 43 | 44 | public void setEmail(String email) { 45 | this.email = email; 46 | } 47 | 48 | public String getMobileNumber() { 49 | return mobileNumber; 50 | } 51 | 52 | public void setMobileNumber(String mobileNumber) { 53 | this.mobileNumber = mobileNumber; 54 | } 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/repository/ImageRepository.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.repository; 2 | import com.imagehoster.ImageHosterApplication.model.Image; 3 | import com.imagehoster.ImageHosterApplication.model.User; 4 | import org.springframework.stereotype.Repository; 5 | import javax.persistence.*; 6 | import java.util.*; 7 | @Repository 8 | public class ImageRepository { 9 | @PersistenceUnit(unitName = "image") 10 | private EntityManagerFactory entityManagerFactory; 11 | 12 | public void createPost(Image newPost) { 13 | EntityManager entityManager = entityManagerFactory.createEntityManager(); 14 | EntityTransaction transaction = entityManager.getTransaction(); 15 | try { 16 | transaction.begin(); 17 | entityManager.persist(newPost); 18 | transaction.commit(); 19 | } catch (Exception e) { 20 | System.out.println(e); 21 | transaction.rollback(); 22 | } 23 | } 24 | public List getAllPosts(User user) { 25 | int a = user.getId(); 26 | EntityManager entityManager = entityManagerFactory.createEntityManager(); 27 | TypedQuery query = entityManager.createQuery("SELECT p from Image p WHERE p.user = :user", Image.class); 28 | query.setParameter("user", user); 29 | List result = query.getResultList(); 30 | return result; 31 | } 32 | public Image getImage(Integer postId) { 33 | EntityManager entityManager = entityManagerFactory.createEntityManager(); 34 | return entityManager.find(Image.class, postId); 35 | } 36 | public void updatePost(Image updatePost) { 37 | EntityManager entityManager = entityManagerFactory.createEntityManager(); 38 | EntityTransaction transaction = entityManager.getTransaction(); 39 | try { 40 | transaction.begin(); 41 | entityManager.merge(updatePost); 42 | transaction.commit(); 43 | } catch (Exception e) { 44 | System.out.println(e); 45 | transaction.rollback(); 46 | } 47 | } 48 | public void deletePost(Integer postId) 49 | { 50 | EntityManager entityManager = entityManagerFactory.createEntityManager(); 51 | EntityTransaction transaction = entityManager.getTransaction(); 52 | try { 53 | transaction.begin(); 54 | Image post = entityManager.find(Image.class, postId); 55 | 56 | entityManager.remove(post); 57 | transaction.commit(); 58 | } catch (Exception e) { 59 | System.out.println(e); 60 | transaction.rollback(); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/repository/UserRepository.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.repository; 2 | 3 | import com.imagehoster.ImageHosterApplication.model.User; 4 | import org.springframework.stereotype.Repository; 5 | 6 | import javax.persistence.*; 7 | 8 | @Repository 9 | public class UserRepository { 10 | 11 | // EntityManagerFactory 12 | @PersistenceUnit(unitName = "image") 13 | private EntityManagerFactory entityManagerFactory; 14 | 15 | public void registerUser(User newUser) { 16 | EntityManager entityManager = entityManagerFactory.createEntityManager(); 17 | EntityTransaction transaction = entityManager.getTransaction(); 18 | try { 19 | transaction.begin(); 20 | entityManager.persist(newUser); 21 | transaction.commit(); 22 | 23 | } catch (Exception e) { 24 | System.out.println(e); 25 | transaction.rollback(); 26 | } 27 | } 28 | 29 | public User checkCredentials(String username, String password) { 30 | try { 31 | EntityManager entityManager = entityManagerFactory.createEntityManager(); 32 | TypedQuery query = entityManager.createQuery("SELECT u FROM User u WHERE u.username = :username AND u.password = :password", User.class); 33 | query.setParameter("username", username); 34 | query.setParameter("password", password); 35 | return query.getSingleResult(); 36 | } catch (NoResultException e) { 37 | return null; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/service/ImageService.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.service; 2 | import com.imagehoster.ImageHosterApplication.model.Image; 3 | import com.imagehoster.ImageHosterApplication.model.User; 4 | import com.imagehoster.ImageHosterApplication.repository.ImageRepository; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | import org.springframework.web.multipart.MultipartFile; 8 | 9 | import javax.persistence.EntityManager; 10 | import java.io.IOException; 11 | import java.util.Base64; 12 | import java.util.List; 13 | 14 | @Service 15 | public class ImageService { 16 | @Autowired 17 | private ImageRepository image; 18 | public void createPost(Image newPost,MultipartFile file) 19 | { 20 | try 21 | { 22 | newPost.setImageFile(ConvertImgToBase64((file))); 23 | image.createPost(newPost); 24 | } 25 | catch(Exception e) 26 | { 27 | System.out.println("eroor"); 28 | System.out.println(e); 29 | } 30 | 31 | } 32 | private String ConvertImgToBase64(MultipartFile file) throws IOException 33 | { 34 | return Base64.getEncoder().encodeToString(file.getBytes()); 35 | } 36 | @Autowired 37 | private ImageRepository imageRepository; 38 | public List getAllPost(User user) 39 | { 40 | return imageRepository.getAllPosts(user); 41 | } 42 | public Image getImage(Integer postId) 43 | { 44 | return image.getImage(postId); 45 | } 46 | public void updatePost(Image updatedPost,MultipartFile file) 47 | { 48 | try 49 | { 50 | updatedPost.setImageFile(ConvertImgToBase64((file))); 51 | image.updatePost(updatedPost); 52 | } 53 | catch(Exception e) 54 | { 55 | System.out.println(e); 56 | } 57 | } 58 | public void deletePost(Integer postId) 59 | { 60 | image.deletePost(postId); 61 | } 62 | 63 | } 64 | 65 | -------------------------------------------------------------------------------- /src/main/java/com/imagehoster/ImageHosterApplication/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication.service; 2 | 3 | import com.imagehoster.ImageHosterApplication.model.User; 4 | import com.imagehoster.ImageHosterApplication.repository.UserRepository; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | @Service 9 | public class UserService { 10 | 11 | @Autowired 12 | private UserRepository userRepository; 13 | 14 | public User login(User user) { 15 | User existingUser = userRepository.checkCredentials(user.getUsername(), user.getPassword()); 16 | if(existingUser == null) { 17 | return null; 18 | } else { 19 | return existingUser; 20 | } 21 | } 22 | 23 | public void registerUser(User newUser) { 24 | userRepository.registerUser(newUser); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/.DS_Store -------------------------------------------------------------------------------- /src/main/resources/META-INF/persistence.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | org.hibernate.jpa.HibernatePersistenceProvider 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # Global DATASOURCE | Global Configurations -> Connect to PostgreSQL 2 | 3 | spring.datasource.url = jdbc:postgresql://ec2-52-71-161-140.compute-1.amazonaws.com:5432/d1p7k5e5kko1ub 4 | spring.datasource.username = ixkgcmbetknaeg 5 | spring.datasource.password = 28f7232f0986beb283740a5bc98fc0cadaee6ead9be32c3047b8450760ee4991 6 | 7 | #spring.datasource.url = jdbc:postgresql://localhost:5432/image 8 | #spring.datasource.username = postgres 9 | #spring.datasource.password = Chitkara@123 10 | 11 | spring.jpa.show-sql=true 12 | 13 | # The SQL Dialect -> makes the SQL queries run faster and efficient | Hibernate to manage the DB 14 | spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect 15 | 16 | # Authorization to Hibernate to perform DLL Operations | create, update, delete 17 | spring.jpa.hibernate.ddl-auto = create 18 | 19 | spring.mvc.hiddenmethod.filter.enabled=true 20 | spring.servlet.multipart.max-file-size=10MB 21 | spring.servlet.multipart.max-request-size=10MB 22 | -------------------------------------------------------------------------------- /src/main/resources/static/css/Upload_style.css: -------------------------------------------------------------------------------- 1 | section { 2 | margin-top: 100px; 3 | } 4 | a, a:hover, a:focus, a:active { 5 | text-decoration: none; 6 | color: inherit; 7 | } 8 | span { 9 | color: #eb9e34; 10 | font-family: 'Dancing Script', cursive; 11 | font-size:25px; 12 | } 13 | .img 14 | { 15 | width:90%; 16 | padding: 0; 17 | margin: 0; 18 | vertical-align:top; 19 | } 20 | .navbar { 21 | height: 80px; 22 | background-color: transparent; 23 | border: none; 24 | color: white; 25 | z-index: 100; 26 | transition: background-color 1s ease 0s; 27 | } 28 | .navbar-default .navbar-brand { 29 | margin-top: 10px; 30 | color: black; 31 | } 32 | .navbar-default .navbar-brand:hover { 33 | color: black; 34 | border: 1px solid #C57ED3; 35 | } 36 | .navbar-default .navbar-nav > li > a { 37 | color: black; 38 | margin: 10px 5px 5px 5px; 39 | } 40 | .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 41 | color: #C57ED3; 42 | border: 1px solid #C57ED3; 43 | } 44 | .navbar-default .navbar-nav > li > a:visited { 45 | color: #C57ED3; 46 | text-decoration: none; 47 | } 48 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { 49 | background-color: transparent; 50 | color: #C57ED3; 51 | } 52 | .navbar-default .navbar-toggle { 53 | border-color: #C57ED3; 54 | } 55 | .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { 56 | background-color: #490D40; 57 | } 58 | .navbar-default .navbar-toggle .icon-bar { 59 | color: #C57ED3; 60 | background-color: #C57ED3; 61 | } 62 | .navbar-default .navbar-collapse.collapse.in ul { 63 | background-color: #490D40; 64 | } 65 | 66 | /* Solid class attached on scroll past first section */ 67 | .navbar.solid { 68 | background-color: #490D40; 69 | transition: background-color 1s ease 0s; 70 | box-shadow: 0 0 4px grey; 71 | } 72 | .navbar.solid .navbar-brand { 73 | color: #C57ED3; 74 | transition: color 1s ease 0s; 75 | } 76 | .navbar.solid .navbar-nav > li > a { 77 | color: #C57ED3; 78 | transition: color 1s ease 0s; 79 | } 80 | 81 | .about { 82 | background-color: #C57ED3; 83 | color: #490D40; 84 | height: 600px; 85 | text-align: center; 86 | margin-top: -20px; 87 | } 88 | .about h2 { 89 | padding-top: 220px; 90 | } 91 | .about p { 92 | padding: 20px 80px; 93 | } 94 | @import url(https://fonts.googleapis.com/css?family=Dancing+Script|Roboto); 95 | *, *:after, *:before { 96 | box-sizing: border-box; 97 | } 98 | h1 { 99 | margin-top: 0 ; 100 | margin-bottom: 0; 101 | } 102 | 103 | body { 104 | background-color:#01002a; 105 | text-align: center; 106 | font-family: 'Roboto', sans-serif; 107 | } 108 | 109 | .panda { 110 | position: relative; 111 | width: 200px; 112 | margin: 50px auto; 113 | } 114 | .a 115 | { 116 | 117 | margin:0px; 118 | } 119 | 120 | .face { 121 | width: 200px; 122 | height: 200px; 123 | background: #fff; 124 | border-radius: 100%; 125 | margin: 50px auto; 126 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 127 | z-index: 50; 128 | position: relative; 129 | } 130 | 131 | .ear, .ear:after { 132 | position: absolute; 133 | width: 80px; 134 | height: 80px; 135 | background: #000; 136 | z-index: 5; 137 | border: 10px solid #fff; 138 | left: -15px; 139 | top: -15px; 140 | border-radius: 100%; 141 | } 142 | .ear:after { 143 | content: ''; 144 | left: 125px; 145 | } 146 | 147 | .eye-shade { 148 | background: #000; 149 | width: 50px; 150 | height: 80px; 151 | margin: 10px; 152 | position: absolute; 153 | top: 35px; 154 | left: 25px; 155 | transform: rotate(220deg); 156 | border-radius: 25px/20px 30px 35px 40px; 157 | } 158 | .eye-shade.rgt { 159 | transform: rotate(140deg); 160 | left: 105px; 161 | } 162 | 163 | .eye-white { 164 | position: absolute; 165 | width: 30px; 166 | height: 30px; 167 | border-radius: 100%; 168 | background: #fff; 169 | z-index: 500; 170 | left: 40px; 171 | top: 80px; 172 | overflow: hidden; 173 | } 174 | .eye-white.rgt { 175 | right: 40px; 176 | left: auto; 177 | } 178 | 179 | .eye-ball { 180 | position: absolute; 181 | width: 0px; 182 | height: 0px; 183 | left: 20px; 184 | top: 20px; 185 | max-width: 10px; 186 | max-height: 10px; 187 | transition: 0.1s; 188 | } 189 | .eye-ball:after { 190 | content: ''; 191 | background: #000; 192 | position: absolute; 193 | border-radius: 100%; 194 | right: 0; 195 | bottom: 0px; 196 | width: 20px; 197 | height: 20px; 198 | } 199 | 200 | .nose { 201 | position: absolute; 202 | height: 20px; 203 | width: 35px; 204 | bottom: 40px; 205 | left: 0; 206 | right: 0; 207 | margin: auto; 208 | border-radius: 50px 20px/30px 15px; 209 | transform: rotate(15deg); 210 | background: #000; 211 | } 212 | 213 | .body { 214 | background: #fff; 215 | position: absolute; 216 | top: 200px; 217 | left: -20px; 218 | border-radius: 100px 100px 100px 100px/126px 126px 96px 96px; 219 | width: 250px; 220 | height: 282px; 221 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); 222 | } 223 | 224 | .hand, .hand:after, .hand:before { 225 | width: 40px; 226 | height: 30px; 227 | border-radius: 50px; 228 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15); 229 | background: #000; 230 | margin: 5px; 231 | position: absolute; 232 | top: 70px; 233 | left: -25px; 234 | } 235 | .hand:after, .hand:before { 236 | content: ''; 237 | left: -5px; 238 | top: 11px; 239 | } 240 | .hand:before { 241 | top: 26px; 242 | } 243 | .hand.rgt, .rgt.hand:after, .rgt.hand:before { 244 | left: auto; 245 | right: -25px; 246 | } 247 | .hand.rgt:after, .hand.rgt:before { 248 | left: auto; 249 | right: -5px; 250 | } 251 | 252 | .foot { 253 | top: 360px; 254 | left: -90px; 255 | position: absolute; 256 | background: #000; 257 | z-index: 1400; 258 | box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2); 259 | border-radius: 40px 40px 39px 40px/26px 26px 63px 63px; 260 | width: 82px; 261 | height: 120px; 262 | } 263 | .foot:after { 264 | content: ''; 265 | width: 55px; 266 | height: 65px; 267 | background: #222; 268 | border-radius: 100%; 269 | position: absolute; 270 | bottom: 10px; 271 | left: 0; 272 | right: 0; 273 | margin: auto; 274 | } 275 | .foot .finger, .foot .finger:after, .foot .finger:before { 276 | position: absolute; 277 | width: 25px; 278 | height: 35px; 279 | background: #222; 280 | border-radius: 100%; 281 | top: 10px; 282 | right: 5px; 283 | } 284 | .foot .finger:after, .foot .finger:before { 285 | content: ''; 286 | right: 30px; 287 | width: 20px; 288 | top: 0; 289 | } 290 | .foot .finger:before { 291 | right: 55px; 292 | top: 5px; 293 | } 294 | .foot.rgt { 295 | left: auto; 296 | right: -90px; 297 | } 298 | .foot.rgt .finger, .foot.rgt .finger:after, .foot.rgt .finger:before { 299 | left: 5px; 300 | right: auto; 301 | } 302 | .foot.rgt .finger:after { 303 | left: 30px; 304 | right: auto; 305 | } 306 | .foot.rgt .finger:before { 307 | left: 55px; 308 | right: auto; 309 | } 310 | 311 | form { 312 | display: none; 313 | max-width: 400px; 314 | padding: 20px 40px; 315 | background: #fff; 316 | height: 307px; 317 | margin: auto; 318 | display: block; 319 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 320 | transition: 0.3s; 321 | position: relative; 322 | transform: translateY(-100px); 323 | z-index: 500; 324 | border: 1px solid #eee; 325 | } 326 | form.up { 327 | transform: translateY(-190px); 328 | } 329 | 330 | h1 { 331 | color: #FF4081; 332 | font-family: 'Dancing Script', cursive; 333 | } 334 | 335 | .btn { 336 | background: #fff; 337 | padding: 5px; 338 | width: 150px; 339 | height: 35px; 340 | border: 1px solid #FF4081; 341 | margin-top: -11px; 342 | cursor: pointer; 343 | transition: 0.3s; 344 | box-shadow: 0 50px #FF4081 inset; 345 | color: #fff; 346 | } 347 | .btn:hover { 348 | box-shadow: 0 0 #FF4081 inset; 349 | color: #FF4081; 350 | } 351 | .btn:focus { 352 | outline: none; 353 | } 354 | 355 | .form-group { 356 | position: relative; 357 | font-size: 15px; 358 | color: #666; 359 | } 360 | .form-group + .form-group { 361 | margin-top: 10px; 362 | } 363 | .form-group .form-label { 364 | position: absolute; 365 | z-index: 1; 366 | left: 0; 367 | top: 2px; 368 | transition: 0.3s; 369 | } 370 | .form-group .form-control { 371 | width: 100%; 372 | position: relative; 373 | z-index: 3; 374 | height: 35px; 375 | background: none; 376 | border: none; 377 | padding: 1px 0; 378 | transition: 0.3s; 379 | border-bottom: 1px solid #777; 380 | color: #555; 381 | } 382 | .form-group .form-control:invalid { 383 | outline: none; 384 | } 385 | .form-group .form-control:focus, .form-group .form-control:valid { 386 | outline: none; 387 | box-shadow: 0 1px #FF4081; 388 | border-color: #FF4081; 389 | } 390 | .form-group .form-control:focus + .form-label, .form-group .form-control:valid + .form-label { 391 | font-size: 12px; 392 | color: #FF4081; 393 | transform: translateY(-10px); 394 | } 395 | #che1 396 | { 397 | display: none; 398 | } 399 | 400 | 401 | .alert { 402 | position: absolute; 403 | color: #f00; 404 | font-size: 16px; 405 | right: -140px; 406 | top: -160px; 407 | z-index: 200; 408 | padding: 30px 25px; 409 | background: #fff; 410 | box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); 411 | border-radius: 50%; 412 | opacity: 0; 413 | transform: scale(0, 0); 414 | -moz-transition: linear 0.4s 0.6s; 415 | -o-transition: linear 0.4s 0.6s; 416 | -webkit-transition: linear 0.4s; 417 | -webkit-transition-delay: 0.6s; 418 | transition: linear 0.4s 0.6s; 419 | } 420 | .alert:after, .alert:before { 421 | content: ''; 422 | position: absolute; 423 | width: 25px; 424 | height: 25px; 425 | background: #fff; 426 | left: -19px; 427 | bottom: -8px; 428 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 429 | border-radius: 50%; 430 | } 431 | .alert:before { 432 | width: 15px; 433 | height: 15px; 434 | left: -35px; 435 | bottom: -25px; 436 | } 437 | 438 | .wrong-entry { 439 | -webkit-animation: wrong-log 0.3s; 440 | animation: wrong-log 0.3s; 441 | } 442 | .wrong-entry .alert { 443 | opacity: 1; 444 | transform: scale(1, 1); 445 | } 446 | @-webkit-keyframes eye-blink { 447 | to { 448 | height: 30px; 449 | } 450 | } 451 | @keyframes eye-blink { 452 | to { 453 | height: 30px; 454 | } 455 | } 456 | @-webkit-keyframes wrong-log { 457 | 0%, 100% { 458 | left: 0px; 459 | } 460 | 20% , 60% { 461 | left: 20px; 462 | } 463 | 40% , 80% { 464 | left: -20px; 465 | } 466 | } 467 | @keyframes wrong-log { 468 | 0%, 100% { 469 | left: 0px; 470 | } 471 | 20% , 60% { 472 | left: 20px; 473 | } 474 | 40% , 80% { 475 | left: -20px; 476 | } 477 | } 478 | -------------------------------------------------------------------------------- /src/main/resources/static/css/edit_pagestyle.css: -------------------------------------------------------------------------------- 1 | section { 2 | margin-top: 100px; 3 | } 4 | a, a:hover, a:focus, a:active { 5 | text-decoration: none; 6 | color: inherit; 7 | } 8 | span { 9 | color: #eb9e34; 10 | font-family: 'Dancing Script', cursive; 11 | font-size:25px; 12 | } 13 | .img 14 | { 15 | width:90%; 16 | padding: 0; 17 | margin: 0; 18 | vertical-align:top; 19 | } 20 | .navbar { 21 | height: 80px; 22 | background-color: transparent; 23 | border: none; 24 | color: white; 25 | z-index: 100; 26 | transition: background-color 1s ease 0s; 27 | } 28 | .navbar-default .navbar-brand { 29 | margin-top: 10px; 30 | color: black; 31 | } 32 | .navbar-default .navbar-brand:hover { 33 | color: black; 34 | border: 1px solid #C57ED3; 35 | } 36 | .navbar-default .navbar-nav > li > a { 37 | color: black; 38 | margin: 10px 5px 5px 5px; 39 | } 40 | .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 41 | color: #C57ED3; 42 | border: 1px solid #C57ED3; 43 | } 44 | .navbar-default .navbar-nav > li > a:visited { 45 | color: #C57ED3; 46 | text-decoration: none; 47 | } 48 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { 49 | background-color: transparent; 50 | color: #C57ED3; 51 | } 52 | .navbar-default .navbar-toggle { 53 | border-color: #C57ED3; 54 | } 55 | .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { 56 | background-color: #490D40; 57 | } 58 | .navbar-default .navbar-toggle .icon-bar { 59 | color: #C57ED3; 60 | background-color: #C57ED3; 61 | } 62 | .navbar-default .navbar-collapse.collapse.in ul { 63 | background-color: #490D40; 64 | } 65 | 66 | /* Solid class attached on scroll past first section */ 67 | .navbar.solid { 68 | background-color: #490D40; 69 | transition: background-color 1s ease 0s; 70 | box-shadow: 0 0 4px grey; 71 | } 72 | .navbar.solid .navbar-brand { 73 | color: #C57ED3; 74 | transition: color 1s ease 0s; 75 | } 76 | .navbar.solid .navbar-nav > li > a { 77 | color: #C57ED3; 78 | transition: color 1s ease 0s; 79 | } 80 | 81 | .about { 82 | background-color: #C57ED3; 83 | color: #490D40; 84 | height: 600px; 85 | text-align: center; 86 | margin-top: -20px; 87 | } 88 | .about h2 { 89 | padding-top: 220px; 90 | } 91 | .about p { 92 | padding: 20px 80px; 93 | } 94 | @import url(https://fonts.googleapis.com/css?family=Dancing+Script|Roboto); 95 | *, *:after, *:before { 96 | box-sizing: border-box; 97 | } 98 | h1 { 99 | margin-top: 0 ; 100 | margin-bottom: 0; 101 | } 102 | 103 | body { 104 | background-color:#01002a; 105 | text-align: center; 106 | font-family: 'Roboto', sans-serif; 107 | } 108 | 109 | .panda { 110 | position: relative; 111 | width: 200px; 112 | margin: 50px auto; 113 | } 114 | .a 115 | { 116 | 117 | margin:0px; 118 | } 119 | 120 | .face { 121 | width: 200px; 122 | height: 200px; 123 | background: #fff; 124 | border-radius: 100%; 125 | margin: 50px auto; 126 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 127 | z-index: 50; 128 | position: relative; 129 | } 130 | 131 | .ear, .ear:after { 132 | position: absolute; 133 | width: 80px; 134 | height: 80px; 135 | background: #000; 136 | z-index: 5; 137 | border: 10px solid #fff; 138 | left: -15px; 139 | top: -15px; 140 | border-radius: 100%; 141 | } 142 | .ear:after { 143 | content: ''; 144 | left: 125px; 145 | } 146 | 147 | .eye-shade { 148 | background: #000; 149 | width: 50px; 150 | height: 80px; 151 | margin: 10px; 152 | position: absolute; 153 | top: 35px; 154 | left: 25px; 155 | transform: rotate(220deg); 156 | border-radius: 25px/20px 30px 35px 40px; 157 | } 158 | .eye-shade.rgt { 159 | transform: rotate(140deg); 160 | left: 105px; 161 | } 162 | 163 | .eye-white { 164 | position: absolute; 165 | width: 30px; 166 | height: 30px; 167 | border-radius: 100%; 168 | background: #fff; 169 | z-index: 500; 170 | left: 40px; 171 | top: 80px; 172 | overflow: hidden; 173 | } 174 | .eye-white.rgt { 175 | right: 40px; 176 | left: auto; 177 | } 178 | 179 | .eye-ball { 180 | position: absolute; 181 | width: 0px; 182 | height: 0px; 183 | left: 20px; 184 | top: 20px; 185 | max-width: 10px; 186 | max-height: 10px; 187 | transition: 0.1s; 188 | } 189 | .eye-ball:after { 190 | content: ''; 191 | background: #000; 192 | position: absolute; 193 | border-radius: 100%; 194 | right: 0; 195 | bottom: 0px; 196 | width: 20px; 197 | height: 20px; 198 | } 199 | 200 | .nose { 201 | position: absolute; 202 | height: 20px; 203 | width: 35px; 204 | bottom: 40px; 205 | left: 0; 206 | right: 0; 207 | margin: auto; 208 | border-radius: 50px 20px/30px 15px; 209 | transform: rotate(15deg); 210 | background: #000; 211 | } 212 | 213 | .body { 214 | background: #fff; 215 | position: absolute; 216 | top: 200px; 217 | left: -20px; 218 | border-radius: 100px 100px 100px 100px/126px 126px 96px 96px; 219 | width: 250px; 220 | height: 282px; 221 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); 222 | } 223 | 224 | .hand, .hand:after, .hand:before { 225 | width: 40px; 226 | height: 30px; 227 | border-radius: 50px; 228 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15); 229 | background: #000; 230 | margin: 5px; 231 | position: absolute; 232 | top: 70px; 233 | left: -25px; 234 | } 235 | .hand:after, .hand:before { 236 | content: ''; 237 | left: -5px; 238 | top: 11px; 239 | } 240 | .hand:before { 241 | top: 26px; 242 | } 243 | .hand.rgt, .rgt.hand:after, .rgt.hand:before { 244 | left: auto; 245 | right: -25px; 246 | } 247 | .hand.rgt:after, .hand.rgt:before { 248 | left: auto; 249 | right: -5px; 250 | } 251 | 252 | .foot { 253 | top: 360px; 254 | left: -90px; 255 | position: absolute; 256 | background: #000; 257 | z-index: 1400; 258 | box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2); 259 | border-radius: 40px 40px 39px 40px/26px 26px 63px 63px; 260 | width: 82px; 261 | height: 120px; 262 | } 263 | .foot:after { 264 | content: ''; 265 | width: 55px; 266 | height: 65px; 267 | background: #222; 268 | border-radius: 100%; 269 | position: absolute; 270 | bottom: 10px; 271 | left: 0; 272 | right: 0; 273 | margin: auto; 274 | } 275 | .foot .finger, .foot .finger:after, .foot .finger:before { 276 | position: absolute; 277 | width: 25px; 278 | height: 35px; 279 | background: #222; 280 | border-radius: 100%; 281 | top: 10px; 282 | right: 5px; 283 | } 284 | .foot .finger:after, .foot .finger:before { 285 | content: ''; 286 | right: 30px; 287 | width: 20px; 288 | top: 0; 289 | } 290 | .foot .finger:before { 291 | right: 55px; 292 | top: 5px; 293 | } 294 | .foot.rgt { 295 | left: auto; 296 | right: -90px; 297 | } 298 | .foot.rgt .finger, .foot.rgt .finger:after, .foot.rgt .finger:before { 299 | left: 5px; 300 | right: auto; 301 | } 302 | .foot.rgt .finger:after { 303 | left: 30px; 304 | right: auto; 305 | } 306 | .foot.rgt .finger:before { 307 | left: 55px; 308 | right: auto; 309 | } 310 | 311 | form { 312 | display: none; 313 | max-width: 400px; 314 | padding: 20px 40px; 315 | background: #fff; 316 | height: 307px; 317 | margin: auto; 318 | display: block; 319 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 320 | transition: 0.3s; 321 | position: relative; 322 | transform: translateY(-100px); 323 | z-index: 500; 324 | border: 1px solid #eee; 325 | } 326 | form.up { 327 | transform: translateY(-190px); 328 | } 329 | 330 | h1 { 331 | color: #FF4081; 332 | font-family: 'Dancing Script', cursive; 333 | } 334 | 335 | .btn { 336 | background: #fff; 337 | padding: 5px; 338 | width: 140px; 339 | height: 30px; 340 | border: 1px solid #FF4081; 341 | margin-top: -11px; 342 | cursor: pointer; 343 | transition: 0.3s; 344 | box-shadow: 0 50px #FF4081 inset; 345 | color: #fff; 346 | } 347 | .btn:hover { 348 | box-shadow: 0 0 #FF4081 inset; 349 | color: #FF4081; 350 | } 351 | .btn:focus { 352 | outline: none; 353 | } 354 | 355 | .form-group { 356 | position: relative; 357 | font-size: 15px; 358 | color: #666; 359 | } 360 | .form-group + .form-group { 361 | margin-top: 10px; 362 | } 363 | .form-group .form-label { 364 | position: absolute; 365 | z-index: 1; 366 | left: 0; 367 | top: 2px; 368 | transition: 0.3s; 369 | } 370 | .form-group .form-control { 371 | width: 100%; 372 | position: relative; 373 | z-index: 3; 374 | height: 35px; 375 | background: none; 376 | border: none; 377 | padding: 1px 0; 378 | transition: 0.3s; 379 | border-bottom: 1px solid #777; 380 | color: #555; 381 | } 382 | .form-group .form-control:invalid { 383 | outline: none; 384 | } 385 | .form-group .form-control:focus, .form-group .form-control:valid { 386 | outline: none; 387 | box-shadow: 0 1px #FF4081; 388 | border-color: #FF4081; 389 | } 390 | .form-group .form-control:focus + .form-label, .form-group .form-control:valid + .form-label { 391 | font-size: 12px; 392 | color: #FF4081; 393 | transform: translateY(-10px); 394 | } 395 | #che1 396 | { 397 | display: none; 398 | } 399 | 400 | 401 | .alert { 402 | position: absolute; 403 | color: #f00; 404 | font-size: 16px; 405 | right: -140px; 406 | top: -160px; 407 | z-index: 200; 408 | padding: 30px 25px; 409 | background: #fff; 410 | box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); 411 | border-radius: 50%; 412 | opacity: 0; 413 | transform: scale(0, 0); 414 | -moz-transition: linear 0.4s 0.6s; 415 | -o-transition: linear 0.4s 0.6s; 416 | -webkit-transition: linear 0.4s; 417 | -webkit-transition-delay: 0.6s; 418 | transition: linear 0.4s 0.6s; 419 | } 420 | .alert:after, .alert:before { 421 | content: ''; 422 | position: absolute; 423 | width: 25px; 424 | height: 25px; 425 | background: #fff; 426 | left: -19px; 427 | bottom: -8px; 428 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 429 | border-radius: 50%; 430 | } 431 | .alert:before { 432 | width: 15px; 433 | height: 15px; 434 | left: -35px; 435 | bottom: -25px; 436 | } 437 | 438 | .wrong-entry { 439 | -webkit-animation: wrong-log 0.3s; 440 | animation: wrong-log 0.3s; 441 | } 442 | .wrong-entry .alert { 443 | opacity: 1; 444 | transform: scale(1, 1); 445 | } 446 | @-webkit-keyframes eye-blink { 447 | to { 448 | height: 30px; 449 | } 450 | } 451 | @keyframes eye-blink { 452 | to { 453 | height: 30px; 454 | } 455 | } 456 | @-webkit-keyframes wrong-log { 457 | 0%, 100% { 458 | left: 0px; 459 | } 460 | 20% , 60% { 461 | left: 20px; 462 | } 463 | 40% , 80% { 464 | left: -20px; 465 | } 466 | } 467 | @keyframes wrong-log { 468 | 0%, 100% { 469 | left: 0px; 470 | } 471 | 20% , 60% { 472 | left: 20px; 473 | } 474 | 40% , 80% { 475 | left: -20px; 476 | } 477 | } 478 | -------------------------------------------------------------------------------- /src/main/resources/static/css/index_style.css: -------------------------------------------------------------------------------- 1 | html 2 | { 3 | scroll-behavior: smooth; 4 | } 5 | * 6 | { 7 | padding: 0; margin: 0; 8 | } 9 | .link 10 | { 11 | color: #eb9e34; 12 | font-family: 'Dancing Script', cursive; 13 | font-size:25px; 14 | } 15 | body 16 | { 17 | background-color:#01002a; 18 | } 19 | .flex-container 20 | { 21 | display: flex; 22 | justify-content: space-between; 23 | align-items: center; 24 | background-color:#C57ED3; 25 | } 26 | .navbar { 27 | height: 80px; 28 | background-color: transparent; 29 | border: none; 30 | color: white; 31 | z-index: 100; 32 | transition: background-color 1s ease 0s; 33 | } 34 | .navbar-default .navbar-brand { 35 | margin-top: 10px; 36 | color: black; 37 | } 38 | .navbar-default .navbar-brand:hover { 39 | color: black; 40 | border: 1px solid #C57ED3; 41 | } 42 | .navbar-default .navbar-nav > li > a { 43 | color: black; 44 | margin: 10px 5px 5px 5px; 45 | } 46 | .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 47 | color: #C57ED3; 48 | border: 1px solid #C57ED3; 49 | } 50 | .navbar-default .navbar-nav > li > a:visited { 51 | color: #C57ED3; 52 | text-decoration: none; 53 | } 54 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { 55 | background-color: transparent; 56 | color: #C57ED3; 57 | } 58 | .navbar-default .navbar-toggle { 59 | border-color: #C57ED3; 60 | } 61 | .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { 62 | background-color: #490D40; 63 | } 64 | .navbar-default .navbar-toggle .icon-bar { 65 | color: #C57ED3; 66 | background-color: #C57ED3; 67 | } 68 | .navbar-default .navbar-collapse.collapse.in ul { 69 | background-color: #490D40; 70 | } 71 | /* Solid class attached on scroll past first section */ 72 | .navbar.solid { 73 | background-color: #490D40; 74 | transition: background-color 1s ease 0s; 75 | box-shadow: 0 0 4px grey; 76 | } 77 | .navbar.solid .navbar-brand { 78 | color: #C57ED3; 79 | transition: color 1s ease 0s; 80 | } 81 | .navbar.solid .navbar-nav > li > a { 82 | color: #C57ED3; 83 | transition: color 1s ease 0s; 84 | } 85 | .navigation 86 | { 87 | display: flex; 88 | } 89 | .navigation a 90 | { 91 | display: block; 92 | padding: 1em; 93 | } 94 | .navigation a:hover 95 | { 96 | background: #c5b8ff; 97 | } 98 | @media all and (max-width: 990px) 99 | { 100 | .flex-container 101 | { 102 | flex-direction: column; 103 | } 104 | .logo 105 | { 106 | margin: 0; 107 | } 108 | .navigation 109 | { 110 | width: 100%; 111 | justify-content: space-around; 112 | } 113 | } 114 | @media all and (max-width: 600px) { 115 | .logo 116 | { 117 | margin: .25em 0; 118 | align-self: center; 119 | } 120 | .navigation { 121 | flex-direction: column; 122 | } 123 | .navigation a { 124 | text-align: center; 125 | padding: 10px; 126 | } 127 | } 128 | .container { 129 | position: relative; 130 | text-align: center; 131 | color: white; 132 | } 133 | .bgImage{ 134 | 135 | width: 100%; 136 | height: 100vh; 137 | } 138 | .line 139 | { 140 | display:inline; 141 | } 142 | .flipCardContainer{ 143 | display: flex; 144 | align-items: center; 145 | justify-content: space-between; 146 | } 147 | .flip-card { 148 | background-color: transparent; 149 | width: 300px; 150 | height: 300px; 151 | perspective: 1000px; 152 | } 153 | .avtarImg{ 154 | width: 100%; 155 | height: 300px; 156 | } 157 | .flip-card-inner { 158 | position: relative; 159 | width: 100%; 160 | height: 100%; 161 | text-align: center; 162 | transition: transform 0.6s; 163 | transform-style: preserve-3d; 164 | box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); 165 | } 166 | .flip-card:hover .flip-card-inner { 167 | transform: rotateY(180deg); 168 | } 169 | .flip-card-front, .flip-card-back { 170 | position: absolute; 171 | width: 100%; 172 | height: 100%; 173 | -webkit-backface-visibility: hidden; 174 | backface-visibility: hidden; 175 | } 176 | .flip-card-front { 177 | background-color: #bbb; 178 | color: black; 179 | } 180 | #card1{ 181 | background-color: #FF9A8B; 182 | background-image: linear-gradient(90deg, #FF9A8B 0%, #FF6A88 55%, #FF99AC 100%); 183 | color: white; 184 | transform: rotateY(180deg); 185 | } 186 | #card2{ 187 | background-color: #21D4FD; 188 | background-image: linear-gradient(19deg, #21D4FD 0%, #B721FF 100%); 189 | color: white; 190 | transform: rotateY(180deg); 191 | } 192 | #card3{ 193 | background-color: #F4D03F; 194 | background-image: linear-gradient(132deg, #F4D03F 0%, #16A085 100%); 195 | color: black; 196 | transform: rotateY(180deg); 197 | } 198 | #card4{ 199 | background-color: #FAD961; 200 | background-image: linear-gradient(90deg, #FAD961 0%, #F76B1C 100%); 201 | color: white; 202 | transform: rotateY(180deg); 203 | } 204 | footer { 205 | text-align: center; 206 | padding: 5px; 207 | background-color:#01002a; 208 | font-weight: 800; 209 | color: #eb9e34; 210 | } -------------------------------------------------------------------------------- /src/main/resources/static/css/panda.css: -------------------------------------------------------------------------------- 1 | section { 2 | margin-top: 100px; 3 | } 4 | a, a:hover, a:focus, a:active { 5 | text-decoration: none; 6 | color: inherit; 7 | } 8 | .img 9 | { 10 | width:90%; 11 | padding: 0; 12 | margin: 0; 13 | vertical-align:top; 14 | } 15 | .navbar { 16 | height: 80px; 17 | background-color: transparent; 18 | border: none; 19 | color: white; 20 | z-index: 100; 21 | transition: background-color 1s ease 0s; 22 | } 23 | .navbar-default .navbar-brand { 24 | margin-top: 10px; 25 | color: black; 26 | } 27 | .navbar-default .navbar-brand:hover { 28 | color: black; 29 | border: 1px solid #C57ED3; 30 | } 31 | .navbar-default .navbar-nav > li > a { 32 | color: black; 33 | margin: 10px 5px 5px 5px; 34 | } 35 | .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 36 | color: #C57ED3; 37 | border: 1px solid #C57ED3; 38 | } 39 | .navbar-default .navbar-nav > li > a:visited { 40 | color: #C57ED3; 41 | text-decoration: none; 42 | } 43 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { 44 | background-color: transparent; 45 | color: #C57ED3; 46 | } 47 | .navbar-default .navbar-toggle { 48 | border-color: #C57ED3; 49 | } 50 | .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { 51 | background-color: #490D40; 52 | } 53 | .navbar-default .navbar-toggle .icon-bar { 54 | color: #C57ED3; 55 | background-color: #C57ED3; 56 | } 57 | .navbar-default .navbar-collapse.collapse.in ul { 58 | background-color: #490D40; 59 | } 60 | /* Solid class attached on scroll past first section */ 61 | .navbar.solid { 62 | background-color: #490D40; 63 | transition: background-color 1s ease 0s; 64 | box-shadow: 0 0 4px grey; 65 | } 66 | .navbar.solid .navbar-brand { 67 | color: #C57ED3; 68 | transition: color 1s ease 0s; 69 | } 70 | .navbar.solid .navbar-nav > li > a { 71 | color: #C57ED3; 72 | transition: color 1s ease 0s; 73 | } 74 | .about { 75 | background-color: #C57ED3; 76 | color: #490D40; 77 | height: 600px; 78 | text-align: center; 79 | margin-top: -20px; 80 | } 81 | .about h2 { 82 | padding-top: 220px; 83 | } 84 | .about p { 85 | padding: 20px 80px; 86 | } 87 | @import url(https://fonts.googleapis.com/css?family=Dancing+Script|Roboto); 88 | *, *:after, *:before { 89 | box-sizing: border-box; 90 | } 91 | 92 | body { 93 | background-color:#01002a; 94 | text-align: center; 95 | font-family: 'Roboto', sans-serif; 96 | } 97 | .panda { 98 | position: relative; 99 | width: 200px; 100 | margin: 50px auto; 101 | } 102 | .face { 103 | width: 200px; 104 | height: 200px; 105 | background: #fff; 106 | border-radius: 100%; 107 | margin: 50px auto; 108 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 109 | z-index: 50; 110 | position: relative; 111 | } 112 | .ear, .ear:after { 113 | position: absolute; 114 | width: 80px; 115 | height: 80px; 116 | background: #000; 117 | z-index: 5; 118 | border: 10px solid #fff; 119 | left: -15px; 120 | top: -15px; 121 | border-radius: 100%; 122 | } 123 | .ear:after { 124 | content: ''; 125 | left: 125px; 126 | } 127 | 128 | .eye-shade { 129 | background: #000; 130 | width: 50px; 131 | height: 80px; 132 | margin: 10px; 133 | position: absolute; 134 | top: 35px; 135 | left: 25px; 136 | transform: rotate(220deg); 137 | border-radius: 25px/20px 30px 35px 40px; 138 | } 139 | .eye-shade.rgt { 140 | transform: rotate(140deg); 141 | left: 105px; 142 | } 143 | 144 | .eye-white { 145 | position: absolute; 146 | width: 30px; 147 | height: 30px; 148 | border-radius: 100%; 149 | background: #fff; 150 | z-index: 500; 151 | left: 40px; 152 | top: 80px; 153 | overflow: hidden; 154 | } 155 | .eye-white.rgt { 156 | right: 40px; 157 | left: auto; 158 | } 159 | 160 | .eye-ball { 161 | position: absolute; 162 | width: 0px; 163 | height: 0px; 164 | left: 20px; 165 | top: 20px; 166 | max-width: 10px; 167 | max-height: 10px; 168 | transition: 0.1s; 169 | } 170 | .eye-ball:after { 171 | content: ''; 172 | background: #000; 173 | position: absolute; 174 | border-radius: 100%; 175 | right: 0; 176 | bottom: 0px; 177 | width: 20px; 178 | height: 20px; 179 | } 180 | 181 | .nose { 182 | position: absolute; 183 | height: 20px; 184 | width: 35px; 185 | bottom: 40px; 186 | left: 0; 187 | right: 0; 188 | margin: auto; 189 | border-radius: 50px 20px/30px 15px; 190 | transform: rotate(15deg); 191 | background: #000; 192 | } 193 | 194 | .body { 195 | background: #fff; 196 | position: absolute; 197 | top: 200px; 198 | left: -20px; 199 | border-radius: 100px 100px 100px 100px/126px 126px 96px 96px; 200 | width: 250px; 201 | height: 282px; 202 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); 203 | } 204 | 205 | .hand, .hand:after, .hand:before { 206 | width: 40px; 207 | height: 30px; 208 | border-radius: 50px; 209 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15); 210 | background: #000; 211 | margin: 5px; 212 | position: absolute; 213 | top: 70px; 214 | left: -25px; 215 | } 216 | .hand:after, .hand:before { 217 | content: ''; 218 | left: -5px; 219 | top: 11px; 220 | } 221 | .hand:before { 222 | top: 26px; 223 | } 224 | .hand.rgt, .rgt.hand:after, .rgt.hand:before { 225 | left: auto; 226 | right: -25px; 227 | } 228 | .hand.rgt:after, .hand.rgt:before { 229 | left: auto; 230 | right: -5px; 231 | } 232 | 233 | .foot { 234 | top: 360px; 235 | left: -80px; 236 | position: absolute; 237 | background: #000; 238 | z-index: 1400; 239 | box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2); 240 | border-radius: 40px 40px 39px 40px/26px 26px 63px 63px; 241 | width: 82px; 242 | height: 120px; 243 | } 244 | .foot:after { 245 | content: ''; 246 | width: 55px; 247 | height: 65px; 248 | background: #222; 249 | border-radius: 100%; 250 | position: absolute; 251 | bottom: 10px; 252 | left: 0; 253 | right: 0; 254 | margin: auto; 255 | } 256 | .foot .finger, .foot .finger:after, .foot .finger:before { 257 | position: absolute; 258 | width: 25px; 259 | height: 35px; 260 | background: #222; 261 | border-radius: 100%; 262 | top: 10px; 263 | right: 5px; 264 | } 265 | .foot .finger:after, .foot .finger:before { 266 | content: ''; 267 | right: 30px; 268 | width: 20px; 269 | top: 0; 270 | } 271 | .foot .finger:before { 272 | right: 55px; 273 | top: 5px; 274 | } 275 | .foot.rgt { 276 | left: auto; 277 | right: -80px; 278 | } 279 | .foot.rgt .finger, .foot.rgt .finger:after, .foot.rgt .finger:before { 280 | left: 5px; 281 | right: auto; 282 | } 283 | .foot.rgt .finger:after { 284 | left: 30px; 285 | right: auto; 286 | } 287 | .foot.rgt .finger:before { 288 | left: 55px; 289 | right: auto; 290 | } 291 | 292 | form { 293 | display: none; 294 | max-width: 400px; 295 | padding: 20px 40px; 296 | background: #fff; 297 | height: 300px; 298 | margin: auto; 299 | display: block; 300 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 301 | transition: 0.3s; 302 | position: relative; 303 | transform: translateY(-100px); 304 | z-index: 500; 305 | border: 1px solid #eee; 306 | } 307 | form.up { 308 | transform: translateY(-150px); 309 | } 310 | 311 | h1 { 312 | color: #FF4081; 313 | font-family: 'Dancing Script', cursive; 314 | 315 | } 316 | span { 317 | color: #eb9e34; 318 | font-family: 'Dancing Script', cursive; 319 | font-size:25px; 320 | } 321 | 322 | .btn { 323 | background: #fff; 324 | padding: 5px; 325 | width: 150px; 326 | height: 35px; 327 | border: 1px solid #FF4081; 328 | margin-top: 25px; 329 | cursor: pointer; 330 | transition: 0.3s; 331 | box-shadow: 0 50px #FF4081 inset; 332 | color: #fff; 333 | } 334 | .btn:hover { 335 | box-shadow: 0 0 #FF4081 inset; 336 | color: #FF4081; 337 | } 338 | .btn:focus { 339 | outline: none; 340 | } 341 | 342 | .form-group { 343 | position: relative; 344 | font-size: 15px; 345 | color: #666; 346 | } 347 | .form-group + .form-group { 348 | margin-top: 30px; 349 | } 350 | .form-group .form-label { 351 | position: absolute; 352 | z-index: 1; 353 | left: 0; 354 | top: 5px; 355 | transition: 0.3s; 356 | } 357 | .form-group .form-control { 358 | width: 100%; 359 | position: relative; 360 | z-index: 3; 361 | height: 35px; 362 | background: none; 363 | border: none; 364 | padding: 5px 0; 365 | transition: 0.3s; 366 | border-bottom: 1px solid #777; 367 | color: #555; 368 | } 369 | .form-group .form-control:invalid { 370 | outline: none; 371 | } 372 | .form-group .form-control:focus, .form-group .form-control:valid { 373 | outline: none; 374 | box-shadow: 0 1px #FF4081; 375 | border-color: #FF4081; 376 | } 377 | .form-group .form-control:focus + .form-label, .form-group .form-control:valid + .form-label { 378 | font-size: 12px; 379 | color: #FF4081; 380 | transform: translateY(-15px); 381 | } 382 | 383 | .alert { 384 | position: absolute; 385 | color: #f00; 386 | font-size: 16px; 387 | right: -120px; 388 | top: -300px; 389 | z-index: 200; 390 | padding: 30px 25px; 391 | background: #fff; 392 | box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); 393 | border-radius: 50%; 394 | opacity: 0; 395 | transform: scale(0, 0); 396 | -moz-transition: linear 0.4s 0.6s; 397 | -o-transition: linear 0.4s 0.6s; 398 | -webkit-transition: linear 0.4s; 399 | -webkit-transition-delay: 0.6s; 400 | transition: linear 0.4s 0.6s; 401 | } 402 | .alert:after, .alert:before { 403 | content: ''; 404 | position: absolute; 405 | width: 25px; 406 | height: 25px; 407 | background: #fff; 408 | left: -19px; 409 | bottom: -8px; 410 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 411 | border-radius: 50%; 412 | } 413 | .alert:before { 414 | width: 15px; 415 | height: 15px; 416 | left: -35px; 417 | bottom: -25px; 418 | } 419 | 420 | .wrong-entry { 421 | -webkit-animation: wrong-log 0.3s; 422 | animation: wrong-log 0.3s; 423 | } 424 | .wrong-entry .alert { 425 | opacity: 1; 426 | transform: scale(1, 1); 427 | } 428 | @-webkit-keyframes eye-blink { 429 | to { 430 | height: 30px; 431 | } 432 | } 433 | @keyframes eye-blink { 434 | to { 435 | height: 30px; 436 | } 437 | } 438 | @-webkit-keyframes wrong-log { 439 | 0%, 100% { 440 | left: 0px; 441 | } 442 | 20% , 60% { 443 | left: 20px; 444 | } 445 | 40% , 80% { 446 | left: -20px; 447 | } 448 | } 449 | @keyframes wrong-log { 450 | 0%, 100% { 451 | left: 0px; 452 | } 453 | 20% , 60% { 454 | left: 20px; 455 | } 456 | 40% , 80% { 457 | left: -20px; 458 | } 459 | } 460 | -------------------------------------------------------------------------------- /src/main/resources/static/css/signup_style.css: -------------------------------------------------------------------------------- 1 | section { 2 | margin-top: 100px; 3 | } 4 | a, a:hover, a:focus, a:active { 5 | text-decoration: none; 6 | color: inherit; 7 | } 8 | span { 9 | color: #eb9e34; 10 | font-family: 'Dancing Script', cursive; 11 | font-size:25px; 12 | } 13 | .img 14 | { 15 | width:90%; 16 | padding: 0; 17 | margin: 0; 18 | vertical-align:top; 19 | } 20 | .navbar { 21 | height: 80px; 22 | background-color: transparent; 23 | border: none; 24 | color: white; 25 | z-index: 100; 26 | transition: background-color 1s ease 0s; 27 | } 28 | .navbar-default .navbar-brand { 29 | margin-top: 10px; 30 | color: black; 31 | } 32 | .navbar-default .navbar-brand:hover { 33 | color: black; 34 | border: 1px solid #C57ED3; 35 | } 36 | .navbar-default .navbar-nav > li > a { 37 | color: black; 38 | margin: 10px 5px 5px 5px; 39 | } 40 | .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 41 | color: #C57ED3; 42 | border: 1px solid #C57ED3; 43 | } 44 | .navbar-default .navbar-nav > li > a:visited { 45 | color: #C57ED3; 46 | text-decoration: none; 47 | } 48 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { 49 | background-color: transparent; 50 | color: #C57ED3; 51 | } 52 | .navbar-default .navbar-toggle { 53 | border-color: #C57ED3; 54 | } 55 | .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { 56 | background-color: #490D40; 57 | } 58 | .navbar-default .navbar-toggle .icon-bar { 59 | color: #C57ED3; 60 | background-color: #C57ED3; 61 | } 62 | .navbar-default .navbar-collapse.collapse.in ul { 63 | background-color: #490D40; 64 | } 65 | 66 | /* Solid class attached on scroll past first section */ 67 | .navbar.solid { 68 | background-color: #490D40; 69 | transition: background-color 1s ease 0s; 70 | box-shadow: 0 0 4px grey; 71 | } 72 | .navbar.solid .navbar-brand { 73 | color: #C57ED3; 74 | transition: color 1s ease 0s; 75 | } 76 | .navbar.solid .navbar-nav > li > a { 77 | color: #C57ED3; 78 | transition: color 1s ease 0s; 79 | } 80 | 81 | .about { 82 | background-color: #C57ED3; 83 | color: #490D40; 84 | height: 600px; 85 | text-align: center; 86 | margin-top: -20px; 87 | } 88 | .about h2 { 89 | padding-top: 220px; 90 | } 91 | .about p { 92 | padding: 20px 80px; 93 | } 94 | @import url(https://fonts.googleapis.com/css?family=Dancing+Script|Roboto); 95 | *, *:after, *:before { 96 | box-sizing: border-box; 97 | } 98 | h1 { 99 | margin-top: 0 ; 100 | margin-bottom: 0; 101 | } 102 | 103 | body { 104 | background-color:#01002a; 105 | text-align: center; 106 | font-family: 'Roboto', sans-serif; 107 | } 108 | 109 | .panda { 110 | position: relative; 111 | width: 200px; 112 | margin: 50px auto; 113 | } 114 | .a 115 | { 116 | margin:0px; 117 | } 118 | .face { 119 | width: 200px; 120 | height: 200px; 121 | background: #fff; 122 | border-radius: 100%; 123 | margin: 50px auto; 124 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 125 | z-index: 50; 126 | position: relative; 127 | } 128 | .ear, .ear:after { 129 | position: absolute; 130 | width: 80px; 131 | height: 80px; 132 | background: #000; 133 | z-index: 5; 134 | border: 10px solid #fff; 135 | left: -15px; 136 | top: -15px; 137 | border-radius: 100%; 138 | } 139 | .ear:after { 140 | content: ''; 141 | left: 125px; 142 | } 143 | .eye-shade { 144 | background: #000; 145 | width: 50px; 146 | height: 80px; 147 | margin: 10px; 148 | position: absolute; 149 | top: 35px; 150 | left: 25px; 151 | transform: rotate(220deg); 152 | border-radius: 25px/20px 30px 35px 40px; 153 | } 154 | .eye-shade.rgt { 155 | transform: rotate(140deg); 156 | left: 105px; 157 | } 158 | 159 | .eye-white { 160 | position: absolute; 161 | width: 30px; 162 | height: 30px; 163 | border-radius: 100%; 164 | background: #fff; 165 | z-index: 500; 166 | left: 40px; 167 | top: 80px; 168 | overflow: hidden; 169 | } 170 | .eye-white.rgt { 171 | right: 40px; 172 | left: auto; 173 | } 174 | 175 | .eye-ball { 176 | position: absolute; 177 | width: 0px; 178 | height: 0px; 179 | left: 20px; 180 | top: 20px; 181 | max-width: 10px; 182 | max-height: 10px; 183 | transition: 0.1s; 184 | } 185 | .eye-ball:after { 186 | content: ''; 187 | background: #000; 188 | position: absolute; 189 | border-radius: 100%; 190 | right: 0; 191 | bottom: 0px; 192 | width: 20px; 193 | height: 20px; 194 | } 195 | 196 | .nose { 197 | position: absolute; 198 | height: 20px; 199 | width: 35px; 200 | bottom: 40px; 201 | left: 0; 202 | right: 0; 203 | margin: auto; 204 | border-radius: 50px 20px/30px 15px; 205 | transform: rotate(15deg); 206 | background: #000; 207 | } 208 | 209 | .body { 210 | background: #fff; 211 | position: absolute; 212 | top: 200px; 213 | left: -20px; 214 | border-radius: 100px 100px 100px 100px/126px 126px 96px 96px; 215 | width: 265px; 216 | height: 288px; 217 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); 218 | } 219 | 220 | .hand, .hand:after, .hand:before { 221 | width: 40px; 222 | height: 30px; 223 | border-radius: 50px; 224 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15); 225 | background: #000; 226 | margin: 5px; 227 | position: absolute; 228 | top: 70px; 229 | left: -25px; 230 | } 231 | .hand:after, .hand:before { 232 | content: ''; 233 | left: -5px; 234 | top: 11px; 235 | } 236 | .hand:before { 237 | top: 26px; 238 | } 239 | .hand.rgt, .rgt.hand:after, .rgt.hand:before { 240 | left: auto; 241 | right: -25px; 242 | } 243 | .hand.rgt:after, .hand.rgt:before { 244 | left: auto; 245 | right: -5px; 246 | } 247 | 248 | .foot { 249 | top: 400px; 250 | left: -100px; 251 | position: absolute; 252 | background: #000; 253 | z-index: 1400; 254 | box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2); 255 | border-radius: 40px 40px 39px 40px/26px 26px 63px 63px; 256 | width: 80px; 257 | height: 110px; 258 | } 259 | .foot:after { 260 | content: ''; 261 | width: 52px; 262 | height: 62px; 263 | background: #222; 264 | border-radius: 100%; 265 | position: absolute; 266 | bottom: 10px; 267 | left: 0; 268 | right: 0; 269 | margin: auto; 270 | } 271 | .foot .finger, .foot .finger:after, .foot .finger:before { 272 | position: absolute; 273 | width: 22px; 274 | height: 32px; 275 | background: #222; 276 | border-radius: 100%; 277 | top: 5px; 278 | right: 5px; 279 | } 280 | .foot .finger:after, .foot .finger:before { 281 | content: ''; 282 | right: 30px; 283 | width: 20px; 284 | top: 0; 285 | } 286 | .foot .finger:before { 287 | right: 55px; 288 | top: 5px; 289 | } 290 | .foot.rgt { 291 | left: auto; 292 | right: -100px; 293 | } 294 | .foot.rgt .finger, .foot.rgt .finger:after, .foot.rgt .finger:before { 295 | left: 5px; 296 | right: auto; 297 | } 298 | .foot.rgt .finger:after { 299 | left: 30px; 300 | right: auto; 301 | } 302 | .foot.rgt .finger:before { 303 | left: 55px; 304 | right: auto; 305 | } 306 | 307 | form { 308 | display: none; 309 | max-width: 350px; 310 | padding: 10px 40px; 311 | background: #fff; 312 | height: 307px; 313 | margin: auto; 314 | display: block; 315 | box-shadow: 0 10px 15px rgba(0, 0, 0, 0.15); 316 | transition: 0.3s; 317 | position: relative; 318 | transform: translateY(-100px); 319 | z-index: 500; 320 | border: 1px solid #eee; 321 | } 322 | form.up { 323 | transform: translateY(-167px); 324 | } 325 | 326 | h1 { 327 | color: #FF4081; 328 | font-family: 'Dancing Script', cursive; 329 | } 330 | 331 | .btn { 332 | background: #fff; 333 | padding: 3px; 334 | width: 140px; 335 | height: 33px; 336 | border: 1px solid #FF4081; 337 | margin-top: -13px; 338 | cursor: pointer; 339 | transition: 0.3s; 340 | box-shadow: 0 50px #FF4081 inset; 341 | color: #fff; 342 | } 343 | .btn:hover { 344 | box-shadow: 0 0 #FF4081 inset; 345 | color: #FF4081; 346 | } 347 | .btn:focus { 348 | outline: none; 349 | } 350 | 351 | .form-group { 352 | position: relative; 353 | font-size: 15px; 354 | color: #666; 355 | } 356 | .form-group + .form-group { 357 | margin-top: 10px; 358 | } 359 | .form-group .form-label { 360 | position: absolute; 361 | z-index: 1; 362 | left: 0; 363 | top: 2px; 364 | transition: 0.3s; 365 | } 366 | .form-group .form-control { 367 | width: 100%; 368 | position: relative; 369 | z-index: 3; 370 | height: 35px; 371 | background: none; 372 | border: none; 373 | padding: 1px 0; 374 | transition: 0.3s; 375 | border-bottom: 1px solid #777; 376 | color: #555; 377 | } 378 | .form-group .form-control:invalid { 379 | outline: none; 380 | } 381 | .form-group .form-control:focus, .form-group .form-control:valid { 382 | outline: none; 383 | box-shadow: 0 1px #FF4081; 384 | border-color: #FF4081; 385 | } 386 | .form-group .form-control:focus + .form-label, .form-group .form-control:valid + .form-label { 387 | font-size: 12px; 388 | color: #FF4081; 389 | transform: translateY(-11px); 390 | } 391 | 392 | .alert { 393 | position: absolute; 394 | color: #f00; 395 | font-size: 16px; 396 | right: -80px; 397 | top: -150px; 398 | z-index: 200; 399 | padding: 30px 25px; 400 | background: #fff; 401 | box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); 402 | border-radius: 50%; 403 | opacity: 0; 404 | transform: scale(0, 0); 405 | -moz-transition: linear 0.4s 0.6s; 406 | -o-transition: linear 0.4s 0.6s; 407 | -webkit-transition: linear 0.4s; 408 | -webkit-transition-delay: 0.6s; 409 | transition: linear 0.4s 0.6s; 410 | } 411 | .alert:after, .alert:before { 412 | content: ''; 413 | position: absolute; 414 | width: 25px; 415 | height: 25px; 416 | background: #fff; 417 | left: -19px; 418 | bottom: -8px; 419 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 420 | border-radius: 50%; 421 | } 422 | .alert:before { 423 | width: 15px; 424 | height: 15px; 425 | left: -35px; 426 | bottom: -25px; 427 | } 428 | 429 | .wrong-entry { 430 | -webkit-animation: wrong-log 0.3s; 431 | animation: wrong-log 0.3s; 432 | } 433 | .wrong-entry .alert { 434 | opacity: 1; 435 | transform: scale(1, 1); 436 | } 437 | @-webkit-keyframes eye-blink { 438 | to { 439 | height: 30px; 440 | } 441 | } 442 | @keyframes eye-blink { 443 | to { 444 | height: 30px; 445 | } 446 | } 447 | @-webkit-keyframes wrong-log { 448 | 0%, 100% { 449 | left: 0px; 450 | } 451 | 20% , 60% { 452 | left: 20px; 453 | } 454 | 40% , 80% { 455 | left: -20px; 456 | } 457 | } 458 | @keyframes wrong-log { 459 | 0%, 100% { 460 | left: 0px; 461 | } 462 | 20% , 60% { 463 | left: 20px; 464 | } 465 | 40% , 80% { 466 | left: -20px; 467 | } 468 | } 469 | -------------------------------------------------------------------------------- /src/main/resources/static/css/style.css: -------------------------------------------------------------------------------- 1 | 2 | .ashu input[type="submit"]:hover{ 3 | cursor:pointer; 4 | background:#ffc107; 5 | color:#000; 6 | } 7 | img.image:hover, 8 | img.image:focus { 9 | width:99%; 10 | transition: 0.1s; 11 | cursor:pointer; 12 | } 13 | 14 | .grid 15 | { 16 | display:grid; 17 | grid-template-columns: repeat(auto-fill,minmax(400px,1fr)); 18 | grid-gap: 20px; 19 | align-items: center; 20 | margin: 20px; 21 | } 22 | 23 | .grid article 24 | { 25 | border: 4px solid black; 26 | box-shadow: 2px 2px 8px 5px rgb(235,158,52); 27 | border-radius: 15px; 28 | } 29 | .grid article img 30 | { 31 | max-width: 100%; 32 | border-radius: 13px; 33 | } 34 | .grid article .text 35 | { 36 | padding: 0 0 0 20px; 37 | font-family: 'kelem',cursive; 38 | font-size:20px; 39 | margin-bottom: -10px; 40 | margin-top: -10px ; 41 | } 42 | .ashu 43 | { 44 | display: inline; 45 | } 46 | html 47 | { 48 | scroll-behavior: smooth; 49 | } 50 | * 51 | { 52 | padding: 0; margin: 0; 53 | } 54 | div 55 | { 56 | display: inline; 57 | } 58 | form 59 | { 60 | background: transparent; 61 | } 62 | section 63 | { 64 | margin-top: 100px; 65 | } 66 | a, a:hover, a:focus, a:active 67 | { 68 | text-decoration: none; 69 | color: inherit; 70 | } 71 | .link 72 | { 73 | color: #eb9e34; 74 | font-family: 'Dancing Script', cursive; 75 | font-size:25px; 76 | } 77 | .link1 78 | { 79 | color: #eb9e34; 80 | font-family: 'Dancing Script', cursive; 81 | font-size:15px; 82 | } 83 | .img 84 | { 85 | width:90%; 86 | padding: 0; 87 | margin: 0; 88 | vertical-align:top; 89 | } 90 | .navbar 91 | { 92 | height: 80px; 93 | background-color: transparent; 94 | border: none; 95 | color: white; 96 | z-index: 100; 97 | transition: background-color 1s ease 0s; 98 | } 99 | .navbar-default .navbar-brand 100 | { 101 | margin-top: 10px; 102 | color: black; 103 | } 104 | .navbar-default .navbar-brand:hover 105 | { 106 | /*color: #black;*/ 107 | border: 1px solid #C57ED3; 108 | } 109 | .navbar-default .navbar-nav > li > a 110 | { 111 | color: black; 112 | margin: 10px 5px 5px 5px; 113 | } 114 | .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:active, .navbar-default .navbar-nav > li > a:focus { 115 | color: #C57ED3; 116 | border: 1px solid #C57ED3; 117 | } 118 | .navbar-default .navbar-nav > li > a:visited 119 | { 120 | color: #C57ED3; 121 | text-decoration: none; 122 | } 123 | .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { 124 | background-color: transparent; 125 | color: #C57ED3; 126 | } 127 | .navbar-default .navbar-toggle { 128 | border-color: #C57ED3; 129 | } 130 | .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus 131 | { 132 | background-color: #490D40; 133 | } 134 | .navbar-default .navbar-toggle .icon-bar 135 | { 136 | color: #C57ED3; 137 | background-color: #C57ED3; 138 | } 139 | .navbar-default .navbar-collapse.collapse.in ul 140 | { 141 | background-color: #490D40; 142 | } 143 | 144 | /* Solid class attached on scroll past first section */ 145 | .navbar.solid 146 | { 147 | background-color: #490D40; 148 | transition: background-color 1s ease 0s; 149 | box-shadow: 0 0 4px grey; 150 | } 151 | .navbar.solid .navbar-brand 152 | { 153 | color: #C57ED3; 154 | transition: color 1s ease 0s; 155 | } 156 | .navbar.solid .navbar-nav > li > a 157 | { 158 | color: #C57ED3; 159 | transition: color 1s ease 0s; 160 | } 161 | 162 | .about 163 | { 164 | background-color: #C57ED3; 165 | color: #490D40; 166 | height: 600px; 167 | text-align: center; 168 | margin-top: -20px; 169 | } 170 | .about h2 171 | { 172 | padding-top: 220px; 173 | } 174 | .about p 175 | { 176 | padding: 20px 80px; 177 | } 178 | @import url(https://fonts.googleapis.com/css?family=Dancing+Script|Roboto); 179 | *, *:after, *:before { 180 | box-sizing: border-box; 181 | } 182 | h1 { 183 | margin-top: 0 ; 184 | margin-bottom: 0; 185 | } 186 | 187 | body { 188 | 189 | text-align: center; 190 | font-family: 'Roboto', sans-serif; 191 | } 192 | 193 | .panda { 194 | position: relative; 195 | width: 200px; 196 | margin: 50px auto; 197 | } 198 | .a 199 | { 200 | 201 | margin:0px; 202 | } 203 | 204 | .body { 205 | background: #fff; 206 | position: absolute; 207 | top: 200px; 208 | left: -20px; 209 | border-radius: 100px 100px 100px 100px/126px 126px 96px 96px; 210 | width: 250px; 211 | height: 282px; 212 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); 213 | } 214 | 215 | 216 | h1 { 217 | color: #FF4081; 218 | font-family: 'Dancing Script', cursive; 219 | } 220 | 221 | 222 | -------------------------------------------------------------------------------- /src/main/resources/static/image/Ashish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/Ashish.png -------------------------------------------------------------------------------- /src/main/resources/static/image/arun_sir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/arun_sir.png -------------------------------------------------------------------------------- /src/main/resources/static/image/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/icon.png -------------------------------------------------------------------------------- /src/main/resources/static/image/im.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/im.jpg -------------------------------------------------------------------------------- /src/main/resources/static/image/important.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/important.jpg -------------------------------------------------------------------------------- /src/main/resources/static/image/maini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/maini.png -------------------------------------------------------------------------------- /src/main/resources/static/image/n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/n.png -------------------------------------------------------------------------------- /src/main/resources/static/image/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/pic1.png -------------------------------------------------------------------------------- /src/main/resources/static/image/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/pic3.png -------------------------------------------------------------------------------- /src/main/resources/static/image/rahul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/rahul.png -------------------------------------------------------------------------------- /src/main/resources/static/image/tohan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ashish2030/Image-Hosting-Application-Using-Spring-Boot-Technology/2027d3e91ce8943b82e0035a4c07f810efeb1b6d/src/main/resources/static/image/tohan.png -------------------------------------------------------------------------------- /src/main/resources/static/js/Upload_script.js: -------------------------------------------------------------------------------- 1 | $('#image').focusin(function(){ 2 | $('form').addClass('up') 3 | setTimeout(function(){ 4 | $('form').removeClass('up'); 5 | },3000 ); 6 | }); 7 | $('#image').focusout(function(){ 8 | $('form').removeClass('up') 9 | }); 10 | $('#Description').focusin(function(){ 11 | $('form').addClass('up') 12 | setTimeout(function(){ 13 | $('form').removeClass('up'); 14 | },3000 ); 15 | }); 16 | 17 | 18 | // Panda Eye move 19 | $( document ).on( "mousemove", function( event ) { 20 | var x = event.pageX/50; 21 | var y = event.pageY/25; 22 | $('.eye-ball').css({ 23 | width : x, 24 | height : y 25 | }); 26 | }); 27 | 28 | 29 | // validation 30 | $('.btn').click(function() 31 | { 32 | var x=document.getElementById("title").value; 33 | var y=document.getElementById("tags").value; 34 | var a=document.getElementById("description").value; 35 | if(x.length<3||y.length<3||a.length<3||a>25||x.length>25||y.length>25) 36 | { 37 | document.getElementById("che").innerHTML="Invalid Input"; 38 | } 39 | else 40 | { 41 | document.getElementById("che").innerHTML="Uploaded Successfully"; 42 | } 43 | setTimeout(function(){ 44 | $('form').removeClass('wrong-entry'); 45 | },3000 ); 46 | }); 47 | -------------------------------------------------------------------------------- /src/main/resources/static/js/edit_pagescript.js: -------------------------------------------------------------------------------- 1 | $('#image').focusin(function(){ 2 | $('form').addClass('up') 3 | setTimeout(function(){ 4 | $('form').removeClass('up'); 5 | },1000 ); 6 | }); 7 | $('#image').focusout(function(){ 8 | $('form').removeClass('up') 9 | }); 10 | $('#Description').focusin(function(){ 11 | $('form').addClass('up') 12 | setTimeout(function(){ 13 | $('form').removeClass('up'); 14 | },2000 ); 15 | }); 16 | 17 | 18 | // Panda Eye move 19 | $( document ).on( "mousemove", function( event ) { 20 | var x = event.pageX/50; 21 | var y = event.pageY/25; 22 | $('.eye-ball').css({ 23 | width : x, 24 | height : y 25 | }); 26 | }); 27 | 28 | 29 | // validation 30 | $('.btn').click(function() 31 | { 32 | var x=document.getElementById("title").value; 33 | var y=document.getElementById("tags").value; 34 | var a=document.getElementById("Description").value; 35 | if(x.length==0||y.length==0||a.length==0) 36 | { 37 | document.getElementById("che").innerHTML="Invalid Input"; 38 | } 39 | else 40 | { 41 | document.getElementById("che").innerHTML="Updated Successfully"; 42 | } 43 | 44 | setTimeout(function(){ 45 | $('form').removeClass('wrong-entry'); 46 | },3000 ); 47 | }); 48 | -------------------------------------------------------------------------------- /src/main/resources/static/js/index_style.js: -------------------------------------------------------------------------------- 1 | function autoType(elementClass, typingSpeed){ 2 | var thhis = $(elementClass); 3 | thhis.css({ 4 | "position": "relative", 5 | "display": "inline-block" 6 | }); 7 | thhis.prepend('
'); 8 | thhis = thhis.find(".text-js"); 9 | var text = thhis.text().trim().split(''); 10 | var amntOfChars = text.length; 11 | var newString = ""; 12 | thhis.text("|"); 13 | setTimeout(function(){ 14 | thhis.css("opacity",1); 15 | thhis.prev().removeAttr("style"); 16 | thhis.text(""); 17 | for(var i = 0; i < amntOfChars; i++){ 18 | (function(i,char){ 19 | setTimeout(function() { 20 | newString += char; 21 | thhis.text(newString); 22 | },i*typingSpeed); 23 | })(i+1,text[i]); 24 | } 25 | },1500); 26 | } 27 | 28 | $(document).ready(function(){ 29 | // Now to start autoTyping just call the autoType function with the 30 | // class of outer div 31 | // The second paramter is the speed between each letter is typed. 32 | autoType(".type-js",200); 33 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/login1.js: -------------------------------------------------------------------------------- 1 | $('#password').focusin(function(){ 2 | $('form').addClass('up') 3 | setTimeout(function(){ 4 | $('form').removeClass('up'); 5 | },2000 ); 6 | }); 7 | $('#password').focusout(function(){ 8 | $('form').removeClass('up') 9 | }); 10 | 11 | // Panda Eye move 12 | $(document).on( "mousemove", function( event ) { 13 | var dw = $(document).width() / 15; 14 | var dh = $(document).height() / 15; 15 | var x = event.pageX/ dw; 16 | var y = event.pageY/ dh; 17 | $('.eye-ball').css({ 18 | width : x, 19 | height : y 20 | }); 21 | }); 22 | 23 | // validation 24 | 25 | 26 | $('.btn').click(function(){ 27 | var x=document.getElementById("username").value; 28 | var y=document.getElementById("password").value; 29 | if(x.length==0||y.length==0) 30 | { 31 | document.getElementById("che").innerHTML="Invalid Input"; 32 | } 33 | else 34 | { 35 | document.getElementById("che").innerHTML="Login Successful"; 36 | } 37 | 38 | $('form').addClass('wrong-entry'); 39 | setTimeout(function(){ 40 | $('form').removeClass('wrong-entry'); 41 | },3000 ); 42 | }); 43 | $(document).ready(function() { 44 | // Transition effect for navbar 45 | $(window).scroll(function() { 46 | // checks if window is scrolled more than 500px, adds/removes solid class 47 | if($(this).scrollTop() > 500) { 48 | $('.navbar').addClass('solid'); 49 | } else { 50 | $('.navbar').removeClass('solid'); 51 | } 52 | }); 53 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/script.js: -------------------------------------------------------------------------------- 1 | $('#image').focusin(function(){ 2 | $('form').addClass('up') 3 | }); 4 | $('#Description').focusin(function(){ 5 | $('form').addClass('up') 6 | }); 7 | $('#image').focusout(function(){ 8 | $('form').removeClass('up') 9 | }); 10 | $('#Description').focusout(function(){ 11 | $('form').removeClass('up') 12 | }); 13 | 14 | // Panda Eye move 15 | $( document ).on( "mousemove", function( event ) { 16 | var x = event.pageX/50; 17 | var y = event.pageY/25; 18 | $('.eye-ball').css({ 19 | width : x, 20 | height : y 21 | }); 22 | }); 23 | 24 | // validation 25 | 26 | 27 | $('.btn').click(function(){ 28 | $('form').addClass('wrong-entry'); 29 | setTimeout(function(){ 30 | $('form').removeClass('wrong-entry'); 31 | },3000 ); 32 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/signup_script.js: -------------------------------------------------------------------------------- 1 | $('#password').focusin(function(){ 2 | $('form').addClass('up') 3 | }); 4 | $('#password').focusout(function(){ 5 | $('form').removeClass('up') 6 | }); 7 | // Panda Eye move 8 | $( document ).on( "mousemove", function( event ) { 9 | var x = event.pageX/50; 10 | var y = event.pageY/25; 11 | $('.eye-ball').css({ 12 | width : x, 13 | height : y 14 | }); 15 | }); 16 | 17 | // validation 18 | $('.btn').click(function() 19 | { 20 | var x=document.getElementById("username").value; 21 | var y=document.getElementById("fullName").value; 22 | var z=document.getElementById("email").value; 23 | var a=document.getElementById("number").value; 24 | var b=document.getElementById("password").value; 25 | 26 | if(x.length<3||y.length<3||z.length<10||b.length==0||x==null||a.length!=10) 27 | { 28 | document.getElementById("che").innerHTML="Invalid Input"; 29 | console.log("k"); 30 | } 31 | else 32 | { 33 | document.getElementById("che").innerHTML="Account Successfully Created"; 34 | } 35 | $('form').addClass('wrong-entry'); 36 | setTimeout(function(){ 37 | $('form').removeClass('wrong-entry'); 38 | },3000 ); 39 | }); 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/main/resources/templates/Edit_Page/edit_page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 𝐈𝐦𝐚𝐠𝐞 𝐇𝐨𝐬𝐭𝐞𝐫 12 | 13 | 14 |
15 | 34 |
35 | 36 |
37 | 38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | 62 |
63 |
64 |

Edit

65 | 66 |
67 | 68 | 69 |
70 | 71 |
72 | 73 | 74 |
75 | 76 |
77 | 78 | 79 |
80 | 81 |
82 |   83 | 84 |
85 |

Invalid Input

86 | 87 |
88 | 104 | 105 | 106 |
107 | 108 | 109 | -------------------------------------------------------------------------------- /src/main/resources/templates/Login/login_page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 𝐈𝐦𝐚𝐠𝐞 𝐇𝐨𝐬𝐭𝐞𝐫 13 | 14 | 15 |
16 | 35 |
36 | 37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |

Login

64 |
65 | 66 | 67 |
68 |
69 | 70 | 71 |

Welcome to Image Hosting !!

72 | 73 |
74 |
75 |
76 |
77 | Success! Operation performed successfully. 78 |
79 |
80 | Failure! Operation failed. Please try again 81 |
82 |
83 | 84 | 85 |
86 | 87 | 88 | -------------------------------------------------------------------------------- /src/main/resources/templates/Print/print.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 𝐈𝐦𝐚𝐠𝐞 𝐇𝐨𝐬𝐭𝐞𝐫 12 | 13 | 14 |
15 | 35 |
36 | 37 |
38 |
39 |
40 | 41 | 42 |
43 |
44 | Avatar 45 |
46 |
47 | Title: 
48 | Tags: 
49 | Description: 
50 | Posted On: 
51 |
52 | 53 |
54 | 55 |
56 |
57 |   58 | 59 |
60 | 61 |
62 |
63 |
64 |
65 |
66 |
67 | 68 | 69 |
70 | 71 | -------------------------------------------------------------------------------- /src/main/resources/templates/Signup/signup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 𝐈𝐦𝐚𝐠𝐞 𝐇𝐨𝐬𝐭𝐞𝐫 12 | 13 | 14 |
15 | 34 |
35 | 36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |

SignUp

63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 |
71 | 72 | 73 | 74 |
75 | 76 |
77 | 78 | 79 |
80 | 81 |
82 | 83 | 84 | 85 |
86 |
87 | 88 | 89 |
90 |

91 | 92 | 93 |
94 | 95 | 96 |
97 | 98 | 99 | -------------------------------------------------------------------------------- /src/main/resources/templates/Upload/Upload.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Assignment 2 12 | 13 |
14 | 33 |
34 | 35 |
36 | 37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |

Upload

63 | 64 |
65 | 66 | 67 |
68 | 69 |
70 | 71 | 72 |
73 | 74 |
75 | 76 | 77 |
78 | 79 |
80 |   81 | 82 |
83 |

Invalid Input

84 | 85 |
86 | 102 | 103 | 104 |
105 | 106 | -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 𝐈𝐦𝐚𝐠𝐞 𝐇𝐨𝐬𝐭𝐞𝐫 14 | 15 | 16 | 17 |
18 | 38 |
39 | 40 | 41 | 42 |
43 | Background Cover Image 44 | 45 |
46 |
47 | 48 | 49 |

About Us

50 |
51 |
52 |
53 |
54 |
55 | Avatar 56 |
57 |
58 |

𝐀𝐫𝐮𝐧 𝐊𝐮𝐝𝐢𝐲𝐚𝐥

59 |
60 |

𝐀𝐁𝐎𝐔𝐓   : 𝐒𝐮𝐛𝐣𝐞𝐜𝐭 𝐌𝐚𝐭𝐭𝐞𝐫 𝐄𝐱𝐩𝐞𝐫𝐭|𝐀𝐩𝐩𝐥𝐞 𝐈𝐧𝐜.|𝐓𝐞𝐜𝐡. 𝐄𝐧𝐭𝐡𝐮𝐬𝐢𝐚𝐬𝐭|𝐓𝐞𝐜𝐡𝐧𝐢𝐜𝐚𝐥 𝐈𝐧𝐬𝐭𝐫𝐮𝐜𝐭𝐨𝐫|𝐄𝐝𝐮𝐜𝐚𝐭𝐢𝐨𝐧𝐚𝐥𝐢𝐬𝐭|𝐌𝐞𝐧𝐭𝐨𝐫|𝐅𝐫𝐢𝐞𝐧𝐝

61 |


62 |

𝐑𝐎𝐋𝐄   : ᴍᴇɴᴛᴏʀ(ᴜᴘɢʀᴀᴅ)    Linkdin Profile

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | Avatar 71 |
72 |
73 |

𝐑𝐚𝐡𝐮𝐥 𝐊𝐮𝐦𝐚𝐫

74 |
75 |

𝐀𝐁𝐎𝐔𝐓: 𝐒𝐨𝐟𝐭𝐰𝐚𝐫𝐞 𝐄𝐧𝐠𝐢𝐧𝐞𝐞𝐫 𝐚𝐭 𝐕𝐞𝐥𝐨𝐭𝐢𝐨 𝐓𝐞𝐜𝐡𝐧𝐨𝐥𝐨𝐠𝐢𝐞𝐬

76 |


77 |

𝐑𝐎𝐋𝐄: 𝐔𝐩𝐠𝐫𝐚𝐝(𝐌𝐞𝐧𝐭𝐨𝐫):      Linkdin Profile

78 |
79 |
80 |
81 | 82 |
83 |
84 |
85 | Avatar 86 |
87 |
88 |

𝐍𝐢𝐭𝐢𝐤𝐚 𝐒𝐡𝐚𝐫𝐦𝐚

89 |
90 |

𝐀𝐁𝐎𝐔𝐓: 𝐏𝐫𝐨𝐠𝐫𝐚𝐦 𝐀𝐬𝐬𝐨𝐜𝐢𝐚𝐭𝐞 𝐚𝐭 𝐮𝐩𝐆𝐫𝐚𝐝;

91 |


92 |

𝐑𝐎𝐋𝐄:  𝐔𝐩𝐠𝐫𝐚𝐝(𝐏𝐫𝐨𝐠𝐫𝐚𝐦 𝐀𝐬𝐬𝐨𝐜𝐢𝐚𝐭𝐞) Linkdin Profile

93 |
94 |
95 |
96 | 97 | 98 | 99 |
100 |
101 |
102 | Avatar 103 |
104 |
105 |

𝐀𝐬𝐡𝐢𝐬𝐡 𝐊𝐮𝐦𝐚𝐫

106 |
107 |

𝐀𝐁𝐎𝐔𝐓:    𝐅𝐮𝐥𝐥 𝐒𝐭𝐚𝐜𝐤 𝐃𝐞𝐯𝐞𝐥𝐨𝐩𝐞𝐫||⭐⭐⭐⭐⭐ 𝐚𝐭 𝐇𝐚𝐜𝐤𝐞𝐫𝐫𝐚𝐧𝐤||⭐⭐ 𝐚𝐭 𝐂𝐨𝐝𝐞𝐂𝐡𝐞𝐟||𝐌𝐞𝐧𝐭𝐨𝐫 𝐚𝐭 𝐆𝐢𝐫𝐥𝐒𝐜𝐫𝐢𝐩𝐭 𝐒𝐮𝐦𝐦𝐞𝐫 𝐨𝐟 𝐂𝐨𝐝𝐞||𝐁𝐚𝐜𝐤-𝐞𝐧𝐝 𝐥𝐨𝐯𝐞𝐫

108 |


109 |

𝐑𝐎𝐋𝐄:  ᴘʀᴏᴊᴇᴄᴛ ᴀᴅᴍɪɴ      Linkdin Profile

110 | 111 |
112 |
113 |
114 | 115 | 116 | 117 | 118 | 119 | 120 |
121 | 122 | 123 | 124 |
125 |
126 |

Image Hosting
127 | ©2021 By Ashish Arya 128 |

129 |
130 |
131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /src/main/resources/templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 |
9 | Login 10 | Register 11 |
12 |
13 | 14 |
15 |
16 | Create Post 17 |
18 | 19 |
20 |
21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /src/main/resources/templates/users/registration.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 72 | Signup- Image Hoster 73 | 74 | 75 | 76 | 77 |

Upload Image

78 |

Please Register

79 |

Ashish Arya

80 |

Login

81 |

Signup

82 |
83 |
84 |
85 |       86 |

87 |       88 |

89 |       90 |

91 |       92 |

93 |       94 |

95 |            96 | 97 |
98 |
99 | 100 | 101 | -------------------------------------------------------------------------------- /src/test/java/com/imagehoster/ImageHosterApplication/ImageHosterApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.imagehoster.ImageHosterApplication; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class ImageHosterApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | --------------------------------------------------------------------------------