Challenge Overview
Project Overview
This project, the CSFV Community Gaming website project will provide the web site infrastructure and integration of the games. This will be a web site that is available on the Internet, and also will be delivered in a form where the server and the games can be installed and used behind a firewall.
Challenge Task Overview
In this challenge we are making few imrpovements to Registration flow and related functionality. Also some other areas affected by registration will be updated as well.
We are addressing the following in this challenge :
-
Force checking terms of use before registering via social network.
-
Allow users to skip filling registration form with registering using social networks (google, twitter, and facebook)
-
Add ‘Resend Activation code’ email functionality.
-
Allow users to use the website without verifying their email or without having email associated with their accounts.
Simplify the Register Email Verification requirement
We want to allow users to use the website even if they have not verified their email. This needs to be updated as follow :
-
When register method is execute or when completing registration in general we will execute the steps in verifyEmail, it will create a user, associate it with RegistrationRequest, associate with social networks, and initiate friends.
-
The above steps should exclude setting registration request entry as verified, it will remain false. Until user verify his/her email.
-
Email should not be set in created User. It should be null.
-
Update csfv_misc_module#NotificationService to exist method silently when email is not provided.
-
The steps we move to #register method should be no more executed in verifyEmail.
-
-
User who has not verified his email cannot update his profile and will not receive any notification email as no email is set in his profile, When user click “Edit Profile” in his/her profile we need to add logic to check if user has verified the email, if not, we need to show a page same as screenshot
-
Clicking on the link will send user verification email same as the one sent during registration. The logic should check if there is email associated with the user, if not, then we show the resend activation link page (check Re-send activation link section below).
-
The following routes should have a validation check if user has activated account or not, if NOT then redirect user to the page as in screenshot above :
-
"GET /userPrivateProfile": "UserPrivateProfile#viewPrivateProfile",
-
"GET /userPrivateProfile/basicData": "UserPrivateProfile#viewBasicProfile",
-
"GET /userPrivateProfile/configuration": "UserPrivateProfile#viewProfileConfiguration",
-
"GET /userPrivateProfile/notifications": "UserPrivateProfile#viewNotificationData",
-
"GET /userPrivateProfile/privacySettings": "UserPrivateProfile#viewPrivacySettings",
-
"GET /userPrivateProfile/connections": "UserPrivateProfile#viewProfileConnections",
-
"GET /userPrivateProfile/unregister": "UserPrivateProfile#viewProfileUnregistration",
-
"POST /userPrivateProfile/saveBasicData": "UserPrivateProfile#saveBasicProfile",
-
"POST /userPrivateProfile/saveConfiguration": "UserPrivateProfile#saveProfileConfiguration",
-
"POST /userPrivateProfile/saveNotifications": "UserPrivateProfile#saveNotificationsData",
-
"POST /userPrivateProfile/savePrivacySettings": "UserPrivateProfile#savePrivacySettings",
-
"DELETE /userPrivateProfile/removeProfilePicture/:id": "UserPrivateProfile#removeProfilePicture",
-
"GET /userPrivateProfile/getProfilePicture/:username": "UserPrivateProfile#getProfilePicture",
-
"GET /userPrivateProfile/getProfilePicture/:username/:width/:height": "UserPrivateProfile#getProfilePicture"
-
-
Register via Google/Twitter/Facebook
Right now when user register via Google/Twitter/Facebook we take him/her back to Register Form to accept terms of use and fill remaining fields. This should be changed as follow :
-
When user click on any of the three social icons (google, facebook or twitter), a js function should check that terms of use is checked, if not then display error message that user must check terms of use. If the terms of use checkbox is checked then users can click on any social icon and it will take user to social network website to authorize the app and continue registration.
-
You need to add a new session variable to check if terms of use was checked before proceed in any social network registration flow.
-
When user register via Facebook/Google the logic should register the user and send activation email directly. We need to update logic in Registration.js to address this :
-
Update social networks strategies to set valid username when populating socialNetworkConnDTO entity here. If username retrieved from social network already exists then append digit incrementally to the username until the username generated is valid and available
-
Facebook and Google callback functions should be updated to create registration request and send verification email as done here instead of redirecting user to registration form page.
-
-
When user register via twitter, then we will not be able to send user activation email, so the logic change should be same as google/facebook as mentioned above but we will not send email notification, since we are silently skipping sending email if provided email is null to notification service, then no further action or changes to logic is needed here.
Register Form
- Remove confirm password field from form.
- Update related code.
Re-Send Activation Link
Right now we don't have a logic/functionality that allow user to send activation link again, there can be many reasons why a user would not be able to activate his email right after registration, we are implementing the following to enable this feature :
-
Add 'Resend Account Activation Link?' link to Login page and Login windows modal :
-
The styling should match the screenshot above.
-
The views you are updating are :
-
-
Add ‘Resend Activation Link’ to Registration pages
-
Add it to Informed Consent and Terms Of Use pages
-
Add it to Registration form header
-
The views you are updating for this change are :
-
-
Add new controller method and view to handle the ‘Resend Activation Link’ request :
-
Send Activation page
-
This page is the RecoverForgettenPassword.jade but it will have different route, metadata and title :
-
Route to the page is /login/activate
-
The page will have same JS frontend validation as recover password page.
-
-
Send activation controller method :
-
Add it to csfv_social_network_module/Registration.js controller.
-
New method name : sendActivationEmail
-
The logic flow is as follow :
-
Ensure valid email is provided
-
Retrieve record with provided email from ‘RegisterationRequest’ model
-
If user already activated, then redirect user to login/emailAlreadyVerified , this is same logic as here.
-
If user is not activated, then send email verification again. Same logic as here.
-
If no user exists with provided email, send email to email notifying that no user associated with provided email. Same as we are doing it in forget password flow here.
-
-
-
Forgot Password Flow
During reset password flow, if user (registerationRequest) entry is not verified, we change it to be verified.
Notification Service
Update csfv_misc_module to silently ignore sending email if the provided email is null/undefined.
Test Scenarios
Update the attached test scenario to include all new scenarios implemented in this challenge.
General Notes
-
When adding new styling, you must place in proper css file as outlined here
-
When adding new rule, it should follow naming convention defined here. (Ignore lint requirements)
-
When you create a view that is identical to existing view, DO NOT COPY/PASTE it, create it from scratch so you don’t include useless or incorrect css rules or js classes that would trigger js frontend functions.
-
If you are not sure about implementing any specific functionality, post in challenge forums and Copilot will give you some high level overview of what needed to be done.
Testing
For registration test scenarios not affected by this update, you need to check them against your submission before submitting to make sure you have not broken any functionality.
Source Code
Source code exists in private github repo https://github.com/topcoderinc/
If you get 404 then you need permission to access it. Request it in challenge forums, copilot will add you to the repository and you should receive email about you being added to github. Post your *github* account name when requesting access.
-
csfv_socialnetwork_module
-
csfv_cms_module
-
csfv_misc_module
-
Other CSFV dependencies are listed in package.json of csfv_frontend_module, you can also search the topcoderinc repository to search for them.
Deploying the apps
Post in challenge forums if you have any issue during deploying the apps.
Final Submission Guidelines
Submission Deliverables
Below is an overview of the deliverables:
- Patch file of changes.
- Detailed document about structure of CMS posts and metadata, and configuration needed by the page.
- Deployment document with verification screens for reviewers.
- Updated csfv_test_data_generator module if needed.
Final Submission
For each member, the final submission should be uploaded to the Online Review Tool.