Add target _blank to all external links in challenges: - applied-visual-design - basic-html-and-html5 - quality-assurance-and-information-security-projects
299 lines
14 KiB
JSON
299 lines
14 KiB
JSON
{
|
|
"name": "Information Security and Quality Assurance Projects",
|
|
"order": 4,
|
|
"time": "150 hours",
|
|
"helpRoom": "HelpBackend",
|
|
"challenges": [
|
|
{
|
|
"id": "587d8249367417b2b2512c41",
|
|
"title": "Metric-Imperial Converter",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://hard-twilight.gomix.me/' target='_blank'>https://hard-twilight.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/fcc-convert' target='_blank'>https://gomix.com/#!/project/fcc-convert</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "I will prevent the client from trying to guess(sniff) the MIME type.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I will prevent cross-site scripting (XSS) attacks.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can GET /api/convert with a single parameter containing an accepted number and unit and have it converted. (Hint: Split the input by looking for the index of the first character which will mark the start of the unit)",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can convert 'gal' to 'L' and vice versa. (1 gal to 3.78541 L)",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can convert 'lbs' to 'kg' and vice versa. (1 lbs to 0.453592 kg)",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can convert 'mi' to 'km' and vice versa. (1 mi to 1.60934 km)",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If my unit of measurement is invalid, returned will be 'invalid unit'.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If my number is invalid, returned with will 'invalid number'.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If both are invalid, return will be 'invalid number and unit'.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can use fractions, decimals or both in my parameter(ie. 5, 1/2, 2.5/6), but if nothing is provided it will default to 1.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "My return will consist of the initNum, initUnit, returnNum, returnUnit, and string spelling out units in format '{initNum} {initial_Units} converts to {returnNum} {return_Units}' with the result rounded to 5 decimals in the string.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "All 16 unit tests are complete and passing.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "All 5 functional tests are complete and passing.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 15, 2017",
|
|
"challengeType": 4,
|
|
"translations": {}
|
|
},
|
|
{
|
|
"id": "587d8249367417b2b2512c42",
|
|
"title": "Issue Tracker",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://protective-garage.gomix.me/' target='_blank'>https://protective-garage.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/fcc-issue' target='_blank'>https://gomix.com/#!/project/fcc-issue</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "Prevent cross site scripting (XSS) attacks.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can POST /api/issues/{projectname} with form data containing required issue_title, issue_text, created_by, and optional assigned_to and status_text.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "The object saved (and returned) will include all of those fields (blank for optional no input) and also include created_on(date/time), updated_on(date/time), open(boolean, true for open, false for closed), and _id.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can PUT /api/issues/{projectname} with a id and any fields in the object with a value to object said object. Returned will be 'successfully updated' or 'could not update '+id. This should always update updated_on. If no fields are sent return 'no updated field sent'.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can DELETE /api/issues/{projectname} with a id to completely delete an issue. If no _id is sent return 'id error', success: 'deleted '+id, failed: 'could not delete '+id.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can GET /api/issues/{projectname} for an array of all issues on that specific project with all the information for each issue as was returned when posted.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can filter my get request by also passing along any field and value in the query(ie. /api/issues/{project}?open=false). I can pass along as many fields/values as I want.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "All 11 functional tests are complete and passing.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 15, 2017",
|
|
"challengeType": 4,
|
|
"translations": {}
|
|
},
|
|
{
|
|
"id": "587d824a367417b2b2512c43",
|
|
"title": "Personal Library",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://spark-cathedral.gomix.me/' target='_blank'>https://spark-cathedral.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/fcc-library' target='_blank'></a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "Nothing from my website will be cached in my client.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "The headers will say that the site is powered by 'PHP 4.2.0' even though it isn't (as a security measure).",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can post a title to /api/books to add a book and returned will be the object with the title and a unique _id.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can get /api/books to retrieve an array of all books containing title, _id, and commentcount.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can get /api/books/{id} to retrieve a single object of a book containing _title, _id, & an array of comments (empty array if no comments present).",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can post a comment to /api/books/{id} to add a comment to a book and returned will be the books object similar to get /api/books/{id} including the new comment.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can delete /api/books/{_id} to delete a book from the collection. Returned will be 'delete successful' if successful.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If I try to request a book that doesn't exist I will be returned 'no book exists'.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can send a delete request to /api/books to delete all books in the database. Returned will be 'complete delete successful' if successful.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "All 6 functional tests required are complete and passing.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 15, 2017",
|
|
"challengeType": 4,
|
|
"translations": {}
|
|
},
|
|
{
|
|
"id": "587d824a367417b2b2512c44",
|
|
"title": "Stock Price Checker",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://giant-chronometer.gomix.me/' target='_blank'>https://giant-chronometer.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/fcc-stock' target='_blank'>https://gomix.com/#!/project/fcc-stock</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "Set the content security policies to only allow loading of scripts and css from your server.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can GET /api/stock-prices with form data containing a Nasdaq stock ticker and recieve back an object stockData.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "In stockData, I can see the stock(string, the ticker), price(decimal in string format), and likes(int).",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can also pass along field like as true(boolean) to have my like added to the stock(s). Only 1 like per ip should be accepted.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "If I pass along 2 stocks, the return object will be an array with both stock's info. Instead of likes, it will display rel_likes(the difference between the likes on both stocks) on both.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "A good way to receive current price is the following external API(replacing 'GOOG' with your stock): https://finance.google.com/finance/info?q=NASDAQ%3aGOOG",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "All 5 functional tests are complete and passing.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 15, 2017",
|
|
"challengeType": 4,
|
|
"translations": {}
|
|
},
|
|
{
|
|
"id": "587d824a367417b2b2512c45",
|
|
"title": "Anonymous Message Board",
|
|
"description": [
|
|
"Build a full stack JavaScript app that is functionally similar to this: <a href='https://horn-celery.gomix.me/' target='_blank'>https://horn-celery.gomix.me/</a> on GoMix or on your own publicly accessible domain.",
|
|
"Start by remixing this boilerplate GoMix project: <a href='https://gomix.com/#!/project/fcc-message' target='_blank'>https://gomix.com/#!/project/fcc-message</a>. Then get all the tests for the below user stories to pass."
|
|
],
|
|
"challengeSeed": [],
|
|
"tests": [
|
|
{
|
|
"text": "Only allow your site to be loading in an iFrame on your own pages.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "Do not allow DNS prefetching.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "Only allow your site to send the referrer for your own pages.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can POST a thread to a specific message board by passing form data text and deletepassword_ to /api/threads/{board}.(Recommend res.redirect to board page /b/{board}) Saved will be at least _id, text, createdon_(date&time), bumpedon_(date&time, starts same as created_on), reported(boolean), deletepassword_, & replies(array).",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can POST a reply to a thread on a specific board by passing form data text, deletepassword_, & threadid_ to /api/replies/{board} and it will also update the bumped_on date to the comments date.(Recommend res.redirect to thread page /b/{board}/{thread_id}) In the thread's replies array will be saved _id, text, createdon_, deletepassword_, & reported.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can GET an array of the most recent 10 bumped threads on the board with only the most recent 3 replies each from /api/threads/{board}. The reported and deletepasswords_ fields will not be sent to the client.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can GET an entire thread with all it's replies from /api/replies/{board}?thread_id={thread_id}. Also hiding the same fields the client should be see.",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can delete a thread completely if I send a DELETE request to /api/threads/{board} and pass along the threadid_ & deletepassword_. (Text response will be 'incorrect password' or 'success')",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can delete a post(just changing the text to '[deleted]' instead of removing completely like a thread) if I send a DELETE request to /api/replies/{board} and pass along the threadid_, replyid_, & deletepassword_. (Text response will be 'incorrect password' or 'success')",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can report a thread and change it's reported value to true by sending a PUT request to /api/threads/{board} and pass along the threadid_. (Text response will be 'success')",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "I can report a reply and change it's reported value to true by sending a PUT request to /api/replies/{board} and pass along the threadid_ & replyid_. (Text response will be 'success')",
|
|
"testString": ""
|
|
},
|
|
{
|
|
"text": "Complete functional tests that wholly test routes and pass.",
|
|
"testString": ""
|
|
}
|
|
],
|
|
"solutions": [],
|
|
"hints": [],
|
|
"type": "basejump",
|
|
"isRequired": true,
|
|
"releasedOn": "January 15, 2017",
|
|
"challengeType": 4,
|
|
"translations": {}
|
|
}
|
|
]
|
|
}
|