Skip to content
Snippets Groups Projects
Commit 1922f439 authored by Riccardo Busetti's avatar Riccardo Busetti
Browse files

First commit

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 766 additions and 0 deletions
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="lib" path="C:/Users/Francesco/Documents/UnibzProjects/Information Security Project/apache-tomcat-10.0.13/lib/servlet-api.jar"/>
<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/mssql-jdbc-10.2.0.jre11.jar"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
### Java ###
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
### Eclipse ###
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.recommenders
\ No newline at end of file
.project 0 → 100644
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ExamProject</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>
1) Download SQL Server (I used this, but you can use whichever you want)
| FOR WINDOWS
| You can download the developer version at "https://www.microsoft.com/it-it/sql-server/sql-server-downloads" (scroll down a bit to find it)
| Then follow the installer instructions
|
| FOR MACOS AND LINUX
| You have to make it work through Docker
| Please follow this guide "https://phoenixnap.com/kb/install-sql-server-macos" until the Step 3
2) Download DBeaver (Windows has even an app in the Marketplace)
3) In DBeaver create a connection to SQL Server DB
Go to Database -> New Database Connection -> Search for 'SQL Server' -> Insert a username and password -> Click Finish
4) Under 'master', create a new DB by right-clicking on 'Databases' (I called it 'examDB')
5) Let's create the DB tables used in the exam project
Right click on the newly created DB -> SQL Editor -> New SQL Script
Copy-Paste the SQL script in sqlScript.txt file -> Right click on the editor -> Execute -> Execute SQL Script
--- Now you are ready to populate databases and/or run the Java web application ---
\ No newline at end of file
--- Environment setup ---
1) Install Java JDK 11 (that's the one used by me)
2) Install Eclipse latest version (currently 2021-12)
3.1) Go to Help -> Install new software... -> Work with: "Latest Eclipse Simultaneous Release - https://download.eclipse.org/releases/latest"
3.2) In the tab below, expand the "Web, XML, Java EE and OSGi Enterprise Development" checkbox
3.3) Check the following elements:
- Eclipse Java EE Developer Tools
- Eclipse Java Web Developer Tools
- Eclipse Java Web Developer Tools - JavaScript Support
- Eclipse Web Developer Tools
- Eclipse Web JavaScript Developer Tools
- JST Server Adapters
- JST Server Adapters Extension (Apache Tomcat)
3.4) Click Next two times, then accept the licence and click Finish
4) Restart Eclipse
5) Go to Window -> Preferences -> Server -> Runtime Environments -> Add... -> Apache -> Apache Tomcat v10.0 -> Thick 'Create new a local server' -> Next
6) Click 'Download and install...', that should install the latest stable version (currently 10.0.13) -> Choose your favourite folder for Tomcat installation
7) Since now you can see your installed web servers in the Eclipse 'Server' tab, if it is not displayed by default, you can enable it by going to Window -> Show view -> Server
--- Project setup ---
IF YOU WANT TO CREATE A NEW PROJECT
1) Go to File -> New -> Project... -> Web -> Dynamic Web Application
2) Name your project as you want (e.g. ExamProject) -> click Next two times -> Thick 'Generate web.xml deployment descriptor' -> click Finish
3) Right click on the newly created project -> Build path -> Configure build path...
4) Go to Libraries -> Click on classpath -> Add External Jars... -> Add the file "servlet-api.jar" from lib directory inside the Apache Tomcat folder
IF YOU WANT TO IMPORT IT FROM GITHUB
1) Download the project from GitHub link "https://github.com/francxx96/ExamProject"
2) Import it with Eclipse
3) Right click on the project -> Build path -> Configure build path...
4) Go to Libraries -> Click on classpath -> Add External Jars... -> Add the file "servlet-api.jar" from lib directory inside the Apache Tomcat folder
--- You're ready now to build your Web Application using Java and Tomcat! ---
By using Eclipse you can...
1) create Servlets: right click on project -> New -> Servlet
(note that Eclipse auto-generated servlets import the old 'javax' package still, replace it with 'jakarta' to work properly)
2) create HTTP/JSP/CSS/JavaScript files: right click on project -> New -> HTTP/JSP/CSS/JavaScript file
3) run your web application: right click on project -> Run As -> Run on Server -> Select the Apache Tomcat server -> Run -> Go to your browser on URL "http://localhost:8080/ExamProject/"
\ No newline at end of file
CREATE TABLE [user] (
name varchar(50) NOT NULL,
surname varchar(50) NOT NULL,
email varchar(50) NOT NULL,
password varchar(50) NOT NULL,
CONSTRAINT user_PK PRIMARY KEY (email)
);
CREATE TABLE mail (
sender varchar(50) NOT NULL,
receiver varchar(50) NOT NULL,
subject varchar(100) NULL,
body text NOT NULL,
[time] datetime2(3) NOT NULL,
CONSTRAINT mail_FK FOREIGN KEY (sender) REFERENCES [user](email),
CONSTRAINT mail_FK_1 FOREIGN KEY (receiver) REFERENCES [user](email)
);
\ No newline at end of file
package servlet;
import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloWorldServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String USER = "sa";
private static final String PWD = "Riva96_shared_db";
private static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=examDB;encrypt=true;trustServerCertificate=true;";
private static Connection conn;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
}
public void init() throws ServletException {
try {
Class.forName(DRIVER_CLASS);
Properties connectionProps = new Properties();
connectionProps.put("user", USER);
connectionProps.put("password", PWD);
conn = DriverManager.getConnection(DB_URL, connectionProps);
//System.out.println("User \"" + USER + "\" connected to database.");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String email = request.getParameter("email").replace("'", "''");;
String pwd = request.getParameter("password").replace("'", "''");;
try (Statement st = conn.createStatement()) {
ResultSet sqlRes = st.executeQuery(
"SELECT * "
+ "FROM [user] "
+ "WHERE email='" + email + "' "
+ "AND password='" + pwd + "'"
);
if (sqlRes.next()) {
request.setAttribute("email", sqlRes.getString(3));
request.setAttribute("password", sqlRes.getString(4));
System.out.println("Login succeeded!");
request.setAttribute("content", "");
request.getRequestDispatcher("home.jsp").forward(request, response);
} else {
System.out.println("Login failed!");
request.getRequestDispatcher("login.html").forward(request, response);
}
} catch (SQLException e) {
e.printStackTrace();
request.getRequestDispatcher("login.html").forward(request, response);
}
}
}
package servlet;
import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Servlet implementation class NavigationServlet
*/
@WebServlet("/NavigationServlet")
public class NavigationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String USER = "sa";
private static final String PWD = "Riva96_shared_db";
private static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=examDB;encrypt=true;trustServerCertificate=true;";
private static Connection conn;
/**
* @see HttpServlet#HttpServlet()
*/
public NavigationServlet() {
super();
}
public void init() throws ServletException {
try {
Class.forName(DRIVER_CLASS);
Properties connectionProps = new Properties();
connectionProps.put("user", USER);
connectionProps.put("password", PWD);
conn = DriverManager.getConnection(DB_URL, connectionProps);
//System.out.println("User \"" + USER + "\" connected to database.");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String email = request.getParameter("email").replace("'", "''");;
String pwd = request.getParameter("password").replace("'", "''");;
if (request.getParameter("newMail") != null)
request.setAttribute("content", getHtmlForNewMail(email, pwd));
else if (request.getParameter("inbox") != null)
request.setAttribute("content", getHtmlForInbox(email));
else if (request.getParameter("sent") != null)
request.setAttribute("content", getHtmlForSent(email));
request.setAttribute("email", email);
request.getRequestDispatcher("home.jsp").forward(request, response);
}
private String getHtmlForInbox(String email) {
try (Statement st = conn.createStatement()) {
ResultSet sqlRes = st.executeQuery(
"SELECT * FROM mail "
+ "WHERE receiver='" + email + "'"
+ "ORDER BY [time] DESC"
);
StringBuilder output = new StringBuilder();
output.append("<div>\r\n");
while (sqlRes.next()) {
output.append("<div style=\"white-space: pre-wrap;\"><span style=\"color:grey;\">");
output.append("FROM:&emsp;" + sqlRes.getString(1) + "&emsp;&emsp;AT:&emsp;" + sqlRes.getString(5));
output.append("</span>");
output.append("<br><b>" + sqlRes.getString(3) + "</b>\r\n");
output.append("<br>" + sqlRes.getString(4));
output.append("</div>\r\n");
output.append("<hr style=\"border-top: 2px solid black;\">\r\n");
}
output.append("</div>");
return output.toString();
} catch (SQLException e) {
e.printStackTrace();
return "ERROR IN FETCHING INBOX MAILS!";
}
}
private String getHtmlForNewMail(String email, String pwd) {
return
"<form id=\"submitForm\" class=\"form-resize\" action=\"SendMailServlet\" method=\"post\">\r\n"
+ " <input type=\"hidden\" name=\"email\" value=\""+email+"\">\r\n"
+ " <input type=\"hidden\" name=\"password\" value=\""+pwd+"\">\r\n"
+ " <input class=\"single-row-input\" type=\"email\" name=\"receiver\" placeholder=\"Receiver\" required>\r\n"
+ " <input class=\"single-row-input\" type=\"text\" name=\"subject\" placeholder=\"Subject\" required>\r\n"
+ " <textarea class=\"textarea-input\" name=\"body\" placeholder=\"Body\" wrap=\"hard\" required></textarea>\r\n"
+ " <input type=\"submit\" name=\"sent\" value=\"Send\">\r\n"
+ " </form>";
}
private String getHtmlForSent(String email) {
try (Statement st = conn.createStatement()) {
ResultSet sqlRes = st.executeQuery(
"SELECT * FROM mail "
+ "WHERE sender='" + email + "'"
+ "ORDER BY [time] DESC"
);
StringBuilder output = new StringBuilder();
output.append("<div>\r\n");
while (sqlRes.next()) {
output.append("<div style=\"white-space: pre-wrap;\"><span style=\"color:grey;\">");
output.append("TO:&emsp;" + sqlRes.getString(2) + "&emsp;&emsp;AT:&emsp;" + sqlRes.getString(5));
output.append("</span>");
output.append("<br><b>" + sqlRes.getString(3) + "</b>\r\n");
output.append("<br>" + sqlRes.getString(4));
output.append("</div>\r\n");
output.append("<hr style=\"border-top: 2px solid black;\">\r\n");
}
output.append("</div>");
return output.toString();
} catch (SQLException e) {
e.printStackTrace();
return "ERROR IN FETCHING INBOX MAILS!";
}
}
}
package servlet;
import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Servlet implementation class RegisterServlet
*/
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String USER = "sa";
private static final String PWD = "Riva96_shared_db";
private static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=examDB;encrypt=true;trustServerCertificate=true;";
private static Connection conn;
/**
* @see HttpServlet#HttpServlet()
*/
public RegisterServlet() {
super();
}
public void init() throws ServletException {
try {
Class.forName(DRIVER_CLASS);
Properties connectionProps = new Properties();
connectionProps.put("user", USER);
connectionProps.put("password", PWD);
conn = DriverManager.getConnection(DB_URL, connectionProps);
//System.out.println("User \"" + USER + "\" connected to database.");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
// The replacement escapes apostrophe special character in order to store it in SQL
String name = request.getParameter("name").replace("'", "''");
String surname = request.getParameter("surname").replace("'", "''");;
String email = request.getParameter("email").replace("'", "''");;
String pwd = request.getParameter("password").replace("'", "''");;
try (Statement st = conn.createStatement()) {
ResultSet sqlRes = st.executeQuery(
"SELECT * "
+ "FROM [user] "
+ "WHERE email='" + email + "'"
);
if (sqlRes.next()) {
System.out.println("Email already registered!");
request.getRequestDispatcher("register.html").forward(request, response);
} else {
st.execute(
"INSERT INTO [user] ( name, surname, email, password ) "
+ "VALUES ( '" + name + "', '" + surname + "', '" + email + "', '" + pwd + "' )"
);
request.setAttribute("email", email);
request.setAttribute("password", pwd);
System.out.println("Registration succeeded!");
request.getRequestDispatcher("home.jsp").forward(request, response);
}
} catch (SQLException e) {
e.printStackTrace();
request.getRequestDispatcher("register.html").forward(request, response);
}
}
}
package servlet;
import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SendMailServlet
*/
@WebServlet("/SendMailServlet")
public class SendMailServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String USER = "sa";
private static final String PWD = "Riva96_shared_db";
private static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=examDB;encrypt=true;trustServerCertificate=true;";
private static Connection conn;
/**
* @see HttpServlet#HttpServlet()
*/
public SendMailServlet() {
super();
// TODO Auto-generated constructor stub
}
public void init() throws ServletException {
try {
Class.forName(DRIVER_CLASS);
Properties connectionProps = new Properties();
connectionProps.put("user", USER);
connectionProps.put("password", PWD);
conn = DriverManager.getConnection(DB_URL, connectionProps);
//System.out.println("User \"" + USER + "\" connected to database.");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String sender = request.getParameter("email").replace("'", "''");;
String receiver = request.getParameter("receiver").replace("'", "''");;
String subject = request.getParameter("subject").replace("'", "''");;
String body = request.getParameter("body").replace("'", "''");;
String timestamp = new Date(System.currentTimeMillis()).toInstant().toString();
try (Statement st = conn.createStatement()) {
st.execute(
"INSERT INTO mail ( sender, receiver, subject, body, [time] ) "
+ "VALUES ( '" + sender + "', '" + receiver + "', '" + subject + "', '" + body + "', '" + timestamp + "' )"
);
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("email", sender);
request.getRequestDispatcher("home.jsp").forward(request, response);
}
}
Manifest-Version: 1.0
Class-Path:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>ExamProject</display-name>
<welcome-file-list>
<welcome-file>login.html</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
\ No newline at end of file
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css" type="text/css" />
<title>Home page</title>
</head>
<body>
<nav class="navbar">
<div class="box">
<div>
<img src="images/email_icon.jpg" align="left" />
<p>E-MAIL CLIENT
<br><% out.println(request.getAttribute("email")); %>
</p>
</div>
<div id="right"><a href="login.html">Logout</a></div>
</div>
</nav>
<div class="grid-container">
<form class="btn-group" action="NavigationServlet" method="post">
<input type="hidden" name="email" value="<%= request.getAttribute("email") %>">
<input type="hidden" name="password" value="<%= request.getAttribute("password") %>">
<input type="submit" name="newMail" value="New Mail">
<input type="submit" name="inbox" value="Inbox">
<input type="submit" name="sent" value="Sent">
</form>
<%= request.getAttribute("content")!=null ? request.getAttribute("content") : "" %>
</div>
</body>
</html>
\ No newline at end of file
src/main/webapp/images/email_icon.jpg

116 KiB

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Login</title>
</head>
<body>
<form action="LoginServlet" method="post">
<table>
<tr>
<td><font face="verdana" size="2px">Email address:</font></td>
<td><input type="text" name="email" required></td>
</tr>
<tr>
<td><font face="verdana" size="2px">Password:</font></td>
<td><input type="password" name="password" required></td>
</tr>
</table>
<input type="hidden" name="inbox">
<input type="submit" value="Login">
</form>
<p> Or <a href="register.html">register</a></p>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Register</title>
</head>
<body>
<form action="RegisterServlet" method="post">
<table>
<tr>
<td><font face="verdana" size="2px">Name:</font></td>
<td><input type="text" name="name" required></td>
</tr>
<tr>
<td><font face="verdana" size="2px">Surname:</font></td>
<td><input type="text" name="surname" required></td>
</tr>
<tr>
<td><font face="verdana" size="2px">Email address:</font></td>
<td><input type="text" name="email" required></td>
</tr>
<tr>
<td><font face="verdana" size="2px">Password:</font></td>
<td><input type="password" name="password" required></td>
</tr>
</table>
<input type="submit" value="Register">
</form>
</body>
</html>
\ No newline at end of file
@charset "ISO-8859-1";
/* Navigation bar */
.navbar {
color:#fff!important;
background-color:#000!important;
overflow: hidden; /* Hide overflow */
}
/* Navigation bar links */
.navbar a {
display: block; /* Change the display to block, for responsive reasons (see below) */
color: white; /* White text color */
}
/* Navigation bar images */
.navbar img {
max-width: 6%;
max-height: 6%;
}
.box {
display: flex;
align-items:center;
}
.btn-group {
border-right: 5px solid;
}
.btn-group input {
background-color: #04AA6D; /* Green background */
border: 1px solid green; /* Green border */
color: white; /* White text */
padding: 10px 24px; /* Some padding */
cursor: pointer; /* Pointer/hand icon */
width: 100%;
display: block; /* Make the buttons appear below each other */
}
.single-row-input {
border: 1px solid green; /* Green border */
padding: 10px 24px; /* Some padding */
cursor: pointer; /* Pointer/hand icon */
width: 100%;
display: block; /* Make the buttons appear below each other */
}
.textarea-input {
resize: none;
border: 1px solid green; /* Green border */
padding: 10px 24px; /* Some padding */
cursor: pointer; /* Pointer/hand icon */
width: 100%;
height: 100%;
display: block; /* Make the buttons appear below each other */
}
.btn-group button:not(:last-child) {
border-bottom: none; /* Prevent double borders */
}
/* Add a background color on hover */
.btn-group button:hover {
background-color: #3e8e41;
}
.grid-container {
display: grid;
grid-template-columns: 10% 90%;
grid-template-rows: 100%;
}
.form-resize {
width: 95%;
height: 100%;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment