Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion portfolio/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<artifactId>portfolio</artifactId>
<version>1</version>
<packaging>war</packaging>

<properties>
<!-- This project uses Java 8 -->
<maven.compiler.source>1.8</maven.compiler.source>
Expand All @@ -24,6 +24,12 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.9.59</version>
</dependency>

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
84 changes: 84 additions & 0 deletions portfolio/src/main/java/com/google/sps/servlets/HomeServlet.java
Original file line number Diff line number Diff line change
@@ -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("<p>You must <a href=\"" + loginUrl + "\">login</a> to comment</p>");
// 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<String> login = new ArrayList<>();
login.add(nickname);
login.add(logoutUrl);

// out.println("<p>Hello " + nickname + "!</p>");
// out.println("<p>Logout <a href=\"" + logoutUrl + "\">here</a>.</p>");
// out.println("<p>Change your nickname <a href=\"/nickname\">here</a>.</p>");

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;
}
}
Original file line number Diff line number Diff line change
@@ -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("<h1>Set Nickname</h1>");

UserService userService = UserServiceFactory.getUserService();
if (userService.isUserLoggedIn()) {
String nickname = getUserNickname(userService.getCurrentUser().getUserId());
out.println("<p>Set your nickname here:</p>");
out.println("<form method=\"POST\" action=\"/nickname\">");
out.println("<input name=\"nickname\" value=\"" + nickname + "\" />");
out.println("<br/>");
out.println("<button>Submit</button>");
out.println("</form>");
} else {
String loginUrl = userService.createLoginURL("/nickname");
out.println("<p>Login <a href=\"" + loginUrl + "\">here</a>.</p>");
}
}

@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;
}
}
5 changes: 3 additions & 2 deletions portfolio/src/main/webapp/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,12 @@ <h1>Noelle's Portfolio</h1>
<!-- comment stream -->
<p name="quote-container" id="quote-container"></p>

<form action="/data" method="POST">
<form action="/data" method="POST" id="form">
<!-- here you can post a comment -->
<label for="textarea_field">post your comment:</label>
<label id= "text-field" for="textarea_field">post your comment:</label>
<textarea name="textarea_field" class="nes-textarea"></textarea>
<input type="submit" />
<a href="/_ah/logout?continue=%2Fhome">logout</a>
</form>
</div>
<p><a href=" resume.html">Wanna see my resume? </a></p>
Expand Down
34 changes: 24 additions & 10 deletions portfolio/src/main/webapp/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down