Coder Social home page Coder Social logo

droppod's Introduction

DropPod

A podcasting application built in JavaEE usinng Servlets/JSP, AJAX and MySQL.

Purpose

Droppod was a 5 person team project for my CST8218 Web Enterprise Applications class at Algonquin College.

This project was an opportunity to learn how to build scalable, enterprise-ready web applications, with a design focused around internationalization and horizontal scalability.

What we learned

To achieve site-wide translation, we used a combination of resource bundles for menu strings, and Google Translation API for dynamic content such as podcast names and descriptions. In order to minimize the number of requests to the Google API, the translated strings were stored in the database so that future requests could be served using only the database.

Screenshots

Login Screen

Create Account (French)

Droppod Main Page

Viewing a single podcast

Recommended network graph

Admin console

Admin console editing a user

droppod's People

Contributors

lucasmelin avatar mcle0463 avatar farquads avatar mellowm00se avatar danielgraziano avatar

Watchers

 avatar  avatar

droppod's Issues

Save translated strings to the database

Related to #20
When we query the translate API, we should save the resulting data so that we can return the information from the database on subsequent queries, rather than hitting the translate API for every single request.

Confirm account creation via email

Users signing up should be able to enter an email address and receive a registration email.

We could also generate a unique value for each user, and emailing the user a link to the account verification page containing their unique value as a query parameter. If the link is visited, the account is set as verified in the system.

Parse info from RSS feed into proper db tables

User should be presented with a submission form. After entering a valid RSS link, the podcast info should be parsed, and the podcasts and episodes tables should be populated accordingly.

Add playlist queue

Users should be able to queue individual podcast episodes, creating a playlist instead of listening to a single episode at a time.

Integrate Google Translate API

Translate the RSS provided strings using Google translate API. Since we can't control all the strings directly, and therefore can't provide adequate translations, integrate the Google translate API to handle this instead.

Create signup page

Need a page for users to sign up to droppod. Ideally, we would generate a temporary UUID upon creation, and email that to users so that we can verify their account info.

ISO-8859-1 vs UTF-8 encoding mismatch

Em dashes and other special characters display as ? on HTML pages.

MySQL column defaults to UTF-8, whereas JavaEE prefers ISO-8859-1. Simply modifying the meta, content-type and encoding tags to UTF-8 in the HTML does not solve the issue.

Add french login page

Requires adding french and english resource bundles and properly configuring the login servlet to pull the text from the appropriate bundle.

Might also be a good idea to have a sevlet dedicated to changing the language site-wide for the user.

Avoid having to sign in when already authenticated

Currently, there is no way to skip the login page, even if the user is already authenticated. We should be able to verify if the user is logged in. If they are, they should redirect to the welcome page, otherwise, they should be redirected to the login page.

Utilize client sided password hashing

We don't want to store user passwords in plaintext, so we need to use the salting+hashing libraries on the passwords before storing them.

This also is needed in the login page, since we'll need to be able to verify the hashes as well.

Sanitize HTML input

When parsing RSS feeds, sometimes descriptions and other text fields contain unwanted HTML tags. A basic regex filter is in use, but is not a complete solution, since HTML is not a regular grammar.

Possible fix for this would be to add a JSoup dependency and use Jsoup.parse(html).text();

Add podcast thumbnails to welcome page

Display a list of podcast thumbnails along with some basic info about each on the welcome page after login.

Requires querying the db and returning appropriate dynamic html.

Foreign key not unique

The droppod db schema has a non-unique foreign key "podcasts_id".

Rename the column to match convention, and change associated Java calling code to use the new column name.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.