From 68e15398e5c9c7b78c1bea3cd83968aa84f5f03c Mon Sep 17 00:00:00 2001
From: Nanne Baars <nanne.baars@owasp.org>
Date: Sat, 8 Apr 2017 22:15:58 +0200
Subject: [PATCH] Challenge 3: First setup completed

---
 .../webgoat/plugin/challenge3/Challenge3.java | 106 +++++++++
 .../webgoat/plugin/challenge3/Comment.java    |  21 ++
 .../plugin/challenge3/CommentsEndpoint.java   |  33 +++
 .../src/main/resources/css/challenge3.css     |  75 ++++++
 .../src/main/resources/html/Challenge.html    | 213 +++++++++++++-----
 .../src/main/resources/images/avatar1.png     | Bin 0 -> 28394 bytes
 .../src/main/resources/images/cat.jpg         | Bin 0 -> 9095 bytes
 .../src/main/resources/js/challenge3.js       |  15 ++
 .../resources/lessonPlans/en/Challenge_1.adoc |   2 +-
 .../resources/lessonPlans/en/Challenge_2.adoc |   2 +-
 .../resources/lessonPlans/en/Challenge_3.adoc |   1 +
 .../xxe/src/main/resources/js/xxe.js          |   5 +-
 12 files changed, 409 insertions(+), 64 deletions(-)
 create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Challenge3.java
 create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Comment.java
 create mode 100644 webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/CommentsEndpoint.java
 create mode 100644 webgoat-lessons/challenge/src/main/resources/css/challenge3.css
 create mode 100644 webgoat-lessons/challenge/src/main/resources/images/avatar1.png
 create mode 100644 webgoat-lessons/challenge/src/main/resources/images/cat.jpg
 create mode 100644 webgoat-lessons/challenge/src/main/resources/js/challenge3.js
 create mode 100644 webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_3.adoc

diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Challenge3.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Challenge3.java
new file mode 100644
index 000000000..b1d22364a
--- /dev/null
+++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Challenge3.java
@@ -0,0 +1,106 @@
+package org.owasp.webgoat.plugin.challenge3;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.EvictingQueue;
+import org.joda.time.DateTime;
+import org.owasp.webgoat.assignments.AssignmentEndpoint;
+import org.owasp.webgoat.assignments.AssignmentPath;
+import org.owasp.webgoat.assignments.AttackResult;
+import org.owasp.webgoat.plugin.Flag;
+import org.owasp.webgoat.session.WebSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Collection;
+
+import static org.springframework.http.MediaType.ALL_VALUE;
+import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
+import static org.springframework.web.bind.annotation.RequestMethod.GET;
+import static org.springframework.web.bind.annotation.RequestMethod.POST;
+
+/**
+ * @author nbaars
+ * @since 4/8/17.
+ */
+@AssignmentPath("/challenge3")
+public class Challenge3 extends AssignmentEndpoint {
+
+    @Autowired
+    private WebSession webSession;
+    private static final EvictingQueue<Comment> comments = EvictingQueue.create(100);
+
+    static {
+        comments.add(new Comment("webgoat", DateTime.now().toString(), "Silly cat...."));
+        comments.add(new Comment("guest", DateTime.now().toString(), "I think I will use this picture in one of my projects."));
+        comments.add(new Comment("guest", DateTime.now().toString(), "Lol!! :-)."));
+    }
+
+    @RequestMapping(method = GET, produces = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public Collection<Comment> retrieveComments() {
+        return comments;
+    }
+
+    @RequestMapping(method = POST, consumes = ALL_VALUE, produces = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public AttackResult createNewUser(@RequestBody String commentStr, @RequestHeader("Content-Type") String contentType) throws Exception {
+        Comment comment = new Comment();
+        AttackResult attackResult = failed().build();
+        if (APPLICATION_JSON_VALUE.equals(contentType)) {
+            comment = parseJson(commentStr);
+            comment.setDateTime(DateTime.now().toString());
+            comment.setUser(webSession.getUserName());
+        }
+        if (MediaType.APPLICATION_XML_VALUE.equals(contentType)) {
+            comment = parseXml(commentStr);
+            comment.setDateTime(DateTime.now().toString());
+            comment.setUser(webSession.getUserName());
+        }
+
+        if (checkSolution(comment)) {
+            attackResult = success().feedback("challenge.solved").feedbackArgs(Flag.FLAGS.get(2)).build();
+        }
+        return attackResult;
+    }
+
+    private boolean checkSolution(Comment comment) {
+        if (comment.getComment().contains("Congratulations you may now collect your flag")) {
+            comment.setComment("Congratulations to " + webSession.getUserName() + " for finding the flag!!");
+            return true;
+        }
+        return false;
+    }
+
+    public static Comment parseXml(String xml) throws Exception {
+        JAXBContext jc = JAXBContext.newInstance(Comment.class);
+
+        XMLInputFactory xif = XMLInputFactory.newFactory();
+        xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, true);
+        xif.setProperty(XMLInputFactory.IS_VALIDATING, false);
+
+        xif.setProperty(XMLInputFactory.SUPPORT_DTD, true);
+        XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xml));
+
+        Unmarshaller unmarshaller = jc.createUnmarshaller();
+        return (Comment) unmarshaller.unmarshal(xsr);
+    }
+
+    private Comment parseJson(String comment) {
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            return mapper.readValue(comment, Comment.class);
+        } catch (IOException e) {
+            return new Comment();
+        }
+    }
+
+
+}
+
diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Comment.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Comment.java
new file mode 100644
index 000000000..0effcab0b
--- /dev/null
+++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/Comment.java
@@ -0,0 +1,21 @@
+package org.owasp.webgoat.plugin.challenge3;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author nbaars
+ * @since 4/8/17.
+ */
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class Comment {
+    private String user;
+    private String dateTime;
+    private String comment;
+}
+
diff --git a/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/CommentsEndpoint.java b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/CommentsEndpoint.java
new file mode 100644
index 000000000..afee36dac
--- /dev/null
+++ b/webgoat-lessons/challenge/src/main/java/org/owasp/webgoat/plugin/challenge3/CommentsEndpoint.java
@@ -0,0 +1,33 @@
+package org.owasp.webgoat.plugin.challenge3;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author nbaars
+ * @since 4/8/17.
+ */
+@RestController
+@RequestMapping("challenge-comments")
+public class CommentsEndpoint {
+
+//
+//    private final WebSession webSession;
+//
+//    public CommentsEndpoint(WebSession webSession) {
+//        this.webSession = webSession;
+//
+//    }
+//
+//
+//
+//
+//
+//    @PostMapping
+//    public Collection<Comment> addComment(String comment) {
+//        String s = StringUtils.abbreviate(comment, 100);
+//        comments.add(new Comment(webSession.getUserName(), DateTime.now().toString(), s));
+//        return comments;
+//    }
+
+}
diff --git a/webgoat-lessons/challenge/src/main/resources/css/challenge3.css b/webgoat-lessons/challenge/src/main/resources/css/challenge3.css
new file mode 100644
index 000000000..3bc2ca4eb
--- /dev/null
+++ b/webgoat-lessons/challenge/src/main/resources/css/challenge3.css
@@ -0,0 +1,75 @@
+/* Component: Posts */
+.post .post-heading {
+    height: 95px;
+    padding: 20px 15px;
+}
+.post .post-heading .avatar {
+    width: 60px;
+    height: 60px;
+    display: block;
+    margin-right: 15px;
+}
+.post .post-heading .meta .title {
+    margin-bottom: 0;
+}
+.post .post-heading .meta .title a {
+    color: black;
+}
+.post .post-heading .meta .title a:hover {
+    color: #aaaaaa;
+}
+.post .post-heading .meta .time {
+    margin-top: 8px;
+    color: #999;
+}
+.post .post-image .image {
+    width:20%;
+    height: 40%;
+}
+.post .post-description {
+    padding: 5px;
+}
+.post .post-footer {
+    border-top: 1px solid #ddd;
+    padding: 15px;
+}
+.post .post-footer .input-group-addon a {
+    color: #454545;
+}
+.post .post-footer .comments-list {
+    padding: 0;
+    margin-top: 20px;
+    list-style-type: none;
+}
+.post .post-footer .comments-list .comment {
+    display: block;
+    width: 100%;
+    margin: 20px 0;
+}
+.post .post-footer .comments-list .comment .avatar {
+    width: 35px;
+    height: 35px;
+}
+.post .post-footer .comments-list .comment .comment-heading {
+    display: block;
+    width: 100%;
+}
+.post .post-footer .comments-list .comment .comment-heading .user {
+    font-size: 14px;
+    font-weight: bold;
+    display: inline;
+    margin-top: 0;
+    margin-right: 10px;
+}
+.post .post-footer .comments-list .comment .comment-heading .time {
+    font-size: 12px;
+    color: #aaa;
+    margin-top: 0;
+    display: inline;
+}
+.post .post-footer .comments-list .comment .comment-body {
+    margin-left: 50px;
+}
+.post .post-footer .comments-list .comment > .comments-list {
+    margin-left: 50px;
+}
\ No newline at end of file
diff --git a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html
index ee1e3363d..e1baebd44 100644
--- a/webgoat-lessons/challenge/src/main/resources/html/Challenge.html
+++ b/webgoat-lessons/challenge/src/main/resources/html/Challenge.html
@@ -65,77 +65,76 @@
               method="POST" name="form"
               action="/WebGoat/challenge/2"
               enctype="application/json;charset=UTF-8">
-            <div class="container">
-                <input id="discount" type="hidden" value="0"/>
-                <div class="row">
-                    <div class="col-xs-3 item-photo">
-                        <img style="max-width:100%;" th:src="@{/images/samsung-black.jpg}"/>
-                    </div>
-                    <div class="col-xs-5" style="border:0px solid gray">
-                        <h3>Samsung Galaxy S8 Plus Android Phone</h3>
-                        <h5 style="color:#337ab7"><a href="http://www.samsung.com">Samsung</a> ·
-                            <small style="color:#337ab7">(124421 reviews)</small>
-                        </h5>
 
-                        <h6 class="title-price">
-                            <small>PRICE</small>
+            <input id="discount" type="hidden" value="0"/>
+            <div class="row">
+
+                <div class="col-xs-3 item-photo">
+                    <img style="max-width:100%;" th:src="@{/images/samsung-black.jpg}"/>
+                </div>
+                <div class="col-xs-5" style="border:0px solid gray">
+                    <h3>Samsung Galaxy S8</h3>
+                    <h5 style="color:#337ab7"><a href="http://www.samsung.com">Samsung</a> ·
+                        <small style="color:#337ab7">(124421 reviews)</small>
+                    </h5>
+
+                    <h6 class="title-price">
+                        <small>PRICE</small>
+                    </h6>
+                    <h3 style="margin-top:0px;"><span>US $</span><span id="price">899</span></h3>
+
+                    <div class="section">
+                        <h6 class="title-attr" style="margin-top:15px;">
+                            <small>COLOR</small>
                         </h6>
-                        <h3 style="margin-top:0px;"><span>US $</span><span id="price">899</span></h3>
-
-                        <div class="section">
-                            <h6 class="title-attr" style="margin-top:15px;">
-                                <small>COLOR</small>
-                            </h6>
-                            <div>
-                                <div class="attr" style="width:25px;background:lightgrey;"></div>
-                                <div class="attr" style="width:25px;background:black;"></div>
-                            </div>
+                        <div>
+                            <div class="attr" style="width:25px;background:lightgrey;"></div>
+                            <div class="attr" style="width:25px;background:black;"></div>
                         </div>
-                        <div class="section" style="padding-bottom:5px;">
-                            <h6 class="title-attr">
-                                <small>CAPACITY</small>
-                            </h6>
-                            <div>
-                                <div class="attr2">64 GB</div>
-                                <div class="attr2">128 GB</div>
-                            </div>
+                    </div>
+                    <div class="section" style="padding-bottom:5px;">
+                        <h6 class="title-attr">
+                            <small>CAPACITY</small>
+                        </h6>
+                        <div>
+                            <div class="attr2">64 GB</div>
+                            <div class="attr2">128 GB</div>
                         </div>
-                        <div class="section" style="padding-bottom:20px;">
-                            <h6 class="title-attr">
-                                <small>QUANTITY</small>
-                            </h6>
-                            <div>
-                                <div class="btn-minus"><span class="glyphicon glyphicon-minus"></span></div>
-                                <input class="quantity" value="1"/>
-                                <div class="btn-plus"><span class="glyphicon glyphicon-plus"></span></div>
-                            </div>
+                    </div>
+                    <div class="section" style="padding-bottom:5px;">
+                        <h6 class="title-attr">
+                            <small>QUANTITY</small>
+                        </h6>
+                        <div>
+                            <div class="btn-minus"><span class="glyphicon glyphicon-minus"></span></div>
+                            <input class="quantity" value="1"/>
+                            <div class="btn-plus"><span class="glyphicon glyphicon-plus"></span></div>
                         </div>
+                    </div>
 
-                        <div class="section" style="padding-bottom:20px;">
-                            <h6 class="title-attr">
-                                <small>CHECKOUT CODE</small>
-                            </h6>
+                    <div class="section" style="padding-bottom:5px;">
+                        <h6 class="title-attr">
+                            <small>CHECKOUT CODE</small>
+                        </h6>
+                        <!--
+                          Checkout code: webgoat, owasp, owasp-webgoat
+                        -->
+                        <input name="checkoutCode" class="checkoutCode" value=""/>
 
-                            <!--
-                              Checkout code: webgoat, owasp, owasp-webgoat
-                            -->
-                            <input name="checkoutCode" class="checkoutCode" value=""/>
+                    </div>
 
-                        </div>
-
-                        <div class="section" style="padding-bottom:20px;">
-                            <button type="submit" class="btn btn-success"><span style="margin-right:20px"
-                                                                                class="glyphicon glyphicon-shopping-cart"
-                                                                                aria-hidden="true"></span>Buy
-                            </button>
-                            <h6><a href="#"><span class="glyphicon glyphicon-heart-empty"
-                                                  style="cursor:pointer;"></span>
-                                Like</a></h6>
-                        </div>
+                    <div class="section" style="padding-bottom:20px;">
+                        <button type="submit" class="btn btn-success"><span style="margin-right:20px"
+                                                                            class="glyphicon glyphicon-shopping-cart"
+                                                                            aria-hidden="true"></span>Buy
+                        </button>
+                        <h6><a href="#"><span class="glyphicon glyphicon-heart-empty"
+                                              style="cursor:pointer;"></span>
+                            Like</a></h6>
                     </div>
                 </div>
-
             </div>
+
         </form>
         <br/>
         <div>
@@ -158,4 +157,98 @@
     </div>
 </div>
 
+
+<div class="lesson-page-wrapper">
+    <div class="adoc-content" th:replace="doc:Challenge_3.adoc"></div>
+    <link rel="stylesheet" type="text/css" th:href="@{/lesson_css/challenge3.css}"/>
+    <script th:src="@{/lesson_js/challenge3.js}" language="JavaScript"></script>
+    <div class="attack-container">
+        <div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
+        <div class="panel post">
+            <div class="post-heading">
+                <div class="pull-left image">
+                    <img th:src="@{/images/avatar1.png}"
+                         class="img-circle avatar" alt="user profile image"/>
+                </div>
+                <div class="pull-left meta">
+                    <div class="title h5">
+                        <a href="#"><b>John Doe</b></a>
+                        uploaded a photo.
+                    </div>
+                    <h6 class="text-muted time">24 days ago</h6>
+                </div>
+            </div>
+
+            <div class="post-image">
+                <img th:src="@{images/cat.jpg}" class="image" alt="image post"/>
+            </div>
+
+            <div class="post-description">
+
+            </div>
+            <div class="post-footer">
+                <div class="input-group">
+                    <input class="form-control" id="commentInput" placeholder="Add a comment" type="text"/>
+                    <span class="input-group-addon">
+                                <i id="postComment" class="fa fa-edit"></i>
+                            </span>
+                </div>
+                <ul class="comments-list">
+                    <div id="list">
+                        <li class="comment">
+                            <div class="pull-left">
+                                <img class="avatar"
+                                     src="http://bootdey.com/img/Content/avatar/avatar1.png"
+                                     alt="avatar"/>
+                            </div>
+                            <div class="comment-body">
+                                <div class="comment-heading">
+                                    <h4 class="user">John dOE</h4>
+                                    <h5 class="time">7 minutes ago</h5>
+                                </div>
+                                <p>I really love this picture. I really wish i could have been
+                                    there.</p>
+                            </div>
+                        </li>
+                        <li class="comment">
+                            <div class="pull-left" href="javascript:void(0);">
+                                <img class="avatar"
+                                     src="http://bootdey.com/img/Content/avatar/avatar2.png"
+                                     alt="avatar"/>
+                            </div>
+                            <div class="comment-body">
+                                <div class="comment-heading">
+                                    <h4 class="user">John Doe</h4>
+                                    <h5 class="time">3 minutes ago</h5>
+                                </div>
+                                <p>I think I might you this for one of my projects.</p>
+                            </div>
+                        </li>
+                        <li class="comment">
+                            <div class="pull-left" href="javascript:void(0);">
+                                <img class="avatar"
+                                     src="http://bootdey.com/img/Content/avatar/avatar4.png"
+                                     alt="avatar"/>
+                            </div>
+                            <div class="comment-body">
+                                <div class="comment-heading">
+                                    <h4 class="user">John Doe</h4>
+                                    <h5 class="time">10 seconds ago</h5>
+                                </div>
+                                <p>Wow! This is gorgeous.</p>
+                            </div>
+                        </li>
+                    </div>
+                </ul>
+            </div>
+        </div>
+
+
+        <br/>
+        <div class="attack-feedback"></div>
+        <div class="attack-output"></div>
+    </div>
+</div>
+
+
 </html>
\ No newline at end of file
diff --git a/webgoat-lessons/challenge/src/main/resources/images/avatar1.png b/webgoat-lessons/challenge/src/main/resources/images/avatar1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ea864f90009013d7d30ea3fb8c70b1f49c7e4b8
GIT binary patch
literal 28394
zcmeI(<yRZe8z}JL?#10(Bv^rB#fk=ZcPkn!XekcGic4{Kx8R|;6k4=+fa31X_wu{<
zocmYsBFT%{otfRUJDGXr`FvATk;B2HzytsQI12KgG+ut^|Mx*hefj?OrN0>f5ENDT
zB&p@Sc=YAQ>&<*i$#bO7-o&Gu?VKUsO?QUKLA9X!NhjL%0D`5Zr6Vlefig3uH=W86
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

literal 0
HcmV?d00001

diff --git a/webgoat-lessons/challenge/src/main/resources/images/cat.jpg b/webgoat-lessons/challenge/src/main/resources/images/cat.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e0e1fb983d4a3215381a3373fe69b02d5ee3a73f
GIT binary patch
literal 9095
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

literal 0
HcmV?d00001

diff --git a/webgoat-lessons/challenge/src/main/resources/js/challenge3.js b/webgoat-lessons/challenge/src/main/resources/js/challenge3.js
new file mode 100644
index 000000000..be9cb11f0
--- /dev/null
+++ b/webgoat-lessons/challenge/src/main/resources/js/challenge3.js
@@ -0,0 +1,15 @@
+$(document).ready(function () {
+    $("#postComment").on("blur", function () {
+        var comment = $("#commentInput").val();
+        $.post("challenge3", function (result, status) {
+            var json;
+            json = '{' +
+                '   "comment":' + '"' + comment + '"'
+                '}';
+        })
+    })
+
+    $.get("challenge3", function (result, status) {
+        alert("Hello");
+    })
+})
\ No newline at end of file
diff --git a/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc
index 3a0b7ee9f..4f77d8158 100644
--- a/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc
+++ b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_1.adoc
@@ -1 +1 @@
-=== Admin forgot password can you help?
\ No newline at end of file
+==== Admin forgot password can you help?
\ No newline at end of file
diff --git a/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_2.adoc b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_2.adoc
index 6849340ea..526593266 100644
--- a/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_2.adoc
+++ b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_2.adoc
@@ -1 +1 @@
-=== No need to pay...
\ No newline at end of file
+No need to pay...
\ No newline at end of file
diff --git a/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_3.adoc b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_3.adoc
new file mode 100644
index 000000000..ac1f2776e
--- /dev/null
+++ b/webgoat-lessons/challenge/src/main/resources/lessonPlans/en/Challenge_3.adoc
@@ -0,0 +1 @@
+Changing language can have dramatic effects
\ No newline at end of file
diff --git a/webgoat-lessons/xxe/src/main/resources/js/xxe.js b/webgoat-lessons/xxe/src/main/resources/js/xxe.js
index b38c2d9c2..3cf292d83 100644
--- a/webgoat-lessons/xxe/src/main/resources/js/xxe.js
+++ b/webgoat-lessons/xxe/src/main/resources/js/xxe.js
@@ -7,8 +7,9 @@ webgoat.customjs.register = function () {
     return xml;
 }
 webgoat.customjs.registerJson = function () {
-    var json = '{' +
-        '  "user":' + '"test"' +
+   var json;
+    json = '{' +
+        '   "user":' + '"test"' +
         '  "password":' + '"test"' +
         '}';
     return json;