diff --git a/portfolio/pom.xml b/portfolio/pom.xml index c339b6d..ece5086 100644 --- a/portfolio/pom.xml +++ b/portfolio/pom.xml @@ -7,7 +7,7 @@ portfolio 1 war - + 1.8 @@ -24,6 +24,12 @@ provided + + com.google.appengine + appengine-api-1.0-sdk + 1.9.59 + + com.google.code.gson gson diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index e9ac9b0..9d6ec6b 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -55,7 +55,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro response.setContentType("application/json;"); String json = new Gson().toJson(tasks); - System.out.println("get: " + tasks); + // System.out.println("get: " + tasks); response.getWriter().println(json); } diff --git a/portfolio/src/main/java/com/google/sps/servlets/HomeServlet.java b/portfolio/src/main/java/com/google/sps/servlets/HomeServlet.java new file mode 100644 index 0000000..4872be2 --- /dev/null +++ b/portfolio/src/main/java/com/google/sps/servlets/HomeServlet.java @@ -0,0 +1,84 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.sps.servlets; + +import com.google.appengine.api.datastore.*; +import com.google.appengine.api.users.UserService; +import com.google.appengine.api.users.UserServiceFactory; +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; + +@WebServlet("/home") +public class HomeServlet extends HttpServlet { + + @Override + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + UserService userService = UserServiceFactory.getUserService(); + + // If user is not logged in, show a login form (could also redirect to a login page) + if (!userService.isUserLoggedIn()) { + String loginUrl = userService.createLoginURL("/home"); + out.println("

You must login to comment

"); + // response.sendRedirect("/index.html"); + return; + } + + // If user has not set a nickname, redirect to nickname page + String nickname = getUserNickname(userService.getCurrentUser().getUserId()); + if (nickname == null) { + response.sendRedirect("/nickname"); + //in implementation, redirect to index + return; + } + + // User is logged in and has a nickname, so the request can proceed + String logoutUrl = userService.createLogoutURL("/home"); + List login = new ArrayList<>(); + login.add(nickname); + login.add(logoutUrl); + + // out.println("

Hello " + nickname + "!

"); + // out.println("

Logout here.

"); + // out.println("

Change your nickname here.

"); + + response.setContentType("application/json;"); + response.getWriter().println(login); + response.sendRedirect("/index.html"); + } + + /** Returns the nickname of the user with id, or null if the user has not set a nickname. */ + private String getUserNickname(String id) { + DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + Query query = + new Query("UserInfo") + .setFilter(new Query.FilterPredicate("id", Query.FilterOperator.EQUAL, id)); + PreparedQuery results = datastore.prepare(query); + Entity entity = results.asSingleEntity(); + if (entity == null) { + return null; + } + String nickname = (String) entity.getProperty("nickname"); + return nickname; + } +} diff --git a/portfolio/src/main/java/com/google/sps/servlets/NicknameServlet.java b/portfolio/src/main/java/com/google/sps/servlets/NicknameServlet.java new file mode 100644 index 0000000..07fadbc --- /dev/null +++ b/portfolio/src/main/java/com/google/sps/servlets/NicknameServlet.java @@ -0,0 +1,92 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.sps.servlets; + +import com.google.appengine.api.datastore.DatastoreService; +import com.google.appengine.api.datastore.DatastoreServiceFactory; +import com.google.appengine.api.datastore.Entity; +import com.google.appengine.api.datastore.PreparedQuery; +import com.google.appengine.api.datastore.Query; +import com.google.appengine.api.users.UserService; +import com.google.appengine.api.users.UserServiceFactory; +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet("/nickname") +public class NicknameServlet extends HttpServlet { + + @Override + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + out.println("

Set Nickname

"); + + UserService userService = UserServiceFactory.getUserService(); + if (userService.isUserLoggedIn()) { + String nickname = getUserNickname(userService.getCurrentUser().getUserId()); + out.println("

Set your nickname here:

"); + out.println("
"); + out.println(""); + out.println("
"); + out.println(""); + out.println("
"); + } else { + String loginUrl = userService.createLoginURL("/nickname"); + out.println("

Login here.

"); + } + } + + @Override + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + UserService userService = UserServiceFactory.getUserService(); + if (!userService.isUserLoggedIn()) { + response.sendRedirect("/nickname"); + return; + } + + String nickname = request.getParameter("nickname"); + String id = userService.getCurrentUser().getUserId(); + + DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + Entity entity = new Entity("UserInfo", id); + entity.setProperty("id", id); + entity.setProperty("nickname", nickname); + // The put() function automatically inserts new data or updates existing data based on ID + datastore.put(entity); + + response.sendRedirect("/home"); + } + + /** + * Returns the nickname of the user with id, or empty String if the user has not set a nickname. + */ + private String getUserNickname(String id) { + DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + Query query = + new Query("UserInfo") + .setFilter(new Query.FilterPredicate("id", Query.FilterOperator.EQUAL, id)); + PreparedQuery results = datastore.prepare(query); + Entity entity = results.asSingleEntity(); + if (entity == null) { + return ""; + } + String nickname = (String) entity.getProperty("nickname"); + return nickname; + } +} diff --git a/portfolio/src/main/webapp/index.html b/portfolio/src/main/webapp/index.html index d896219..aadfeb0 100644 --- a/portfolio/src/main/webapp/index.html +++ b/portfolio/src/main/webapp/index.html @@ -56,11 +56,12 @@

Noelle's Portfolio

-
+ - + + logout

Wanna see my resume?

diff --git a/portfolio/src/main/webapp/script.js b/portfolio/src/main/webapp/script.js index 95777e5..0df7dfe 100644 --- a/portfolio/src/main/webapp/script.js +++ b/portfolio/src/main/webapp/script.js @@ -31,16 +31,30 @@ function randMessage() { } function servlet() { console.log("servlet has been called") - fetch('/data').then(response => response.text())//fetch from data - .then(text => { - console.log(text); - parsed = JSON.parse(text); - parsed.reverse(); - console.log(parsed); - - parsed = parsed.join('\n'); - document.getElementById('quote-container').innerText = parsed; - }); + fetch('/home').then((response) => response.text()).then(out => { + // out = JSON.parse(out); //not an array so it doesn't work + console.log(out); + + if (out.includes('login?continue=%2')) { + // out.html(); + document.getElementById('form').innerHTML = out; + // document.getElementById('quote-container').innerText = out; + document.getElementById("text-field").style.display = "none"; + } + else { + fetch('/data').then(response => response.text())//fetch from data + .then(text => { + // console.log(text); + parsed = JSON.parse(text); + parsed.reverse(); + // console.log(parsed); + + parsed = parsed.join('\n'); + document.getElementById('quote-container').innerText = parsed; + }); + } + + }); } function addRandomGreeting() {