Challenge Overview
Project Overview
Currently, TopCoder Competition Engine used a customized way for communication between the client side (Arena applet) and the backend listeners. We are planning to implement a Web-based Arena based Web Socket protocol.
Previously, we have run contests to build a standalone web socket listener, which provides a good solution by using the combination of socket.io (web client) and netty.io (server side).
We are continuing to support more features needed by the new Web-Based Arena.
Competition Task Overview
This contest is going to add support for SSO Login.
SSO Login
Previously, the Java applet-based arena only support standard handle/password login. since we are moving to web-based arena, we added social login functionality by using auth0 and SSO login based on tcsso cookie.
Currently, all systems including (main topcoder site, online review system, TopCoder cockpit) are reusning the tcsso cookie to auto login.
So we'd like to add support of login by tcsso cookie beside the standard handle/password approach.
Instead of passing the handle/password info to the web socket listner, the tcsso cookie, the listener will validate the tcsso cookie and login the specific user. Please notes,
- We'd like to make the web socket listener as a wrapper connector to main listener, the main logic should be implemented inside the main listener, we will provide the winning submission for Module Assembly - TopCoder Competition Engine - Connecting Web Socket Listener and Main Listener as the base code for this development. The winning submission will be provided in forum.
- Please check the Tips.txt file as a base knowledge to connecting the web socket listener and main listener, and follow the similar approach to implement.
- the SSO Login functionality is already implemented in the main site, please invesigate and reuse them as much as possible.
- com.topcoder.web.common.security.SSOCookieServiceImpl
- com.topcoder.web.common.security.BasicAuthentication
- the above class can be found in web_module trunk, the code base is available in VM. If you want checkout locally, please send svn access request to support@topcoder.com if you can not access it.
- For SSO login, beside storing the tcsso cookie, we also persist the tcjwt cookie will will be used for calling TC APIs, after successfully login with tcsso, we'd like to the value for tcjwt cookie also be persist in the backend (listener), so that can be reused in the furture to call TC API.
One Login Per User
In the the winning submission for Module Assembly - TopCoder Competition Engine - Connecting Web Socket Listener and Main Listener, it is demonstrates that a user login in web demo, will auto logout the same user in arena applet, if that user is login.
We'd like complete it for standard login and sso login.
- a user login in the arena applet, will automatically logout the same user in web demo.
- a user login the web demo, will automatically logout the same user in arena applet.
Web Demo
In order to demonstrate your solution, you are expected to create a NEW demo, that will do
- an Auth0 Login Widget that will utilize the TopCoder Reg2 callback for login and set the cookies, the auth0 related configuration can be found in TC.properties file in VM.
- If there is no tcsso cookie, the login page will be shown.
- If there is the tcsso cookie, it will connect to the web scoket listener and login user.
You can customize this example provided by auth0, and demonstrate the cases.
Arena VMBefore asking your own VM, you need to have a public key on your profile before asking for the VM.
You can find more details on how to generate a key http://apps.topcoder.com/wiki/display/projects/Generate+SSH+Key and how to connect using it http://apps.topcoder.com/wiki/display/projects/Connect+Using+SSH+Key.
To use the Arena VM, please follow http://apps.topcoder.com/wiki/display/docs/Competition+Engine+VM+Setup
Currently, we moved several main projects to github, please check http://apps.topcoder.com/wiki/display/~fireice/Source+Code+Management+For+TopCoder+Competition+Engine
If you want to have local access to github, please create your own github account, and ask access in forum.
Final Submission Guidelines
Submission Deliverables
Below is an overview of the deliverables:
- Code Changes for the solution
- A complete and detailed deployment documented explaining how to deploy the application including configuration information.
Final Submission
For each member, the final submission should be uploaded to the Online Review Tool.