Problem Statement


The project aims to provide authors (but not only) the possibility of an affordable way to protect their work while they produce it. The idea is simply of automate the process of certifying a copy of their work with a unique serial code and the date of protection. This way, any copyright infringement following from that date can be proved with the aid of the certified copy. Furthermore, the service will be available not only to authors, but any person that has creative work that needs to be protected as the website will accept non only PDF documents, but also images (whether they are a book cover or photographs or drawings).


On top of that, the project aimed to construct an API to allow third party applications to interact with the web application database in order to retrieve protected files and upload new ones. This requirement first identified on the first part of the project, was subsequently dropped, on agreement with the client, due to time constraints and lack of resources. This project website however, still contains some content on the research conducted on the design of the API, for sake of completeness and for possibility of further developments.


Requirements


Cease and Desist Letter:
email sent in order to urge somebody to stop infringing copyright and desist from doing it again in the future.

Functional Requirements
IDDescriptionCategoryPriorityImplemented
R1The website shall allow storing and updating personal information.Personal AccountMust
R2The website shall allow storing and updating payment details.Personal AccountShould
R3The website shall be integrated with third party cloud services such as Dropbox and Google Drive in order to allow users easy upload of existing documents.Uploading DocumentsCould
R4The website shall allow users to upload multiple files at the same time. (Drag & Drop functionality).Uploading DocumentsMust
R5The website shall feedback the user on the uploading status (with a progress bar).Uploading DocumentsMust
R6The system shall stamp each document with a unique serial code.Uploading DocumentsMust
R7The website shall allow renaming of files once uploaded.Uploading DocumentsCould
R8The website shall allow uploading and copyright protection for Video and Audio files.Uploading DocumentsWould
R9The website shall allow payment through Paypal.PaymentMust
R10The website shall allow payment with major credit and debit cards.PaymentShould
R11The website shall allow searching and reordering of protected documents.Managing Protected DocumentsShould
R12The website shall allow browsing of previously protected documents.Managing Protected DocumentsMust
R13The website shall allow downloading, printing and emailing protected version of the document.Managing Protected DocumentsShould
R14The website shall allow to send a Cease and Desist letter.Managing Protected DocumentsMust
Non-Functional Requirements
IDDescriptionCategoryPriorityImplemented
R15The backend shall be implemented as a RESTful API in order to facilitate interfacing with the database.APIDropped
R16Interfacing with the database should be made public through the publication of an API, keeping integrity and security a priority.APIDropped
R17The system shall be able to create serial codes for millions of documents uploaded.ReliabilityMust
R18The serial code must not be replicable from outside the system.SecurityMust
R19The user flow shall count the minimum possible number of steps in the workflow of protecting files in order to keep the website simple to use.UsabilityMust
R20The website shall have an updated and minimalistic GUI.User InterfaceMust

Use Cases

During the process of requirement analyses we came up with a list of Use Cases in order to indetify the interactions between different entities and the system.

Furthermore, the Use Cases helped us refine our requiremetns and understand how to model the system.

The Use Case diagram we created:


Use Case Diagram


Research


PHP Logo

From the very beginning of the project it was clear that we would have to familiarise ourselves with web development techniques, hence, we spent the first two weeks learning and practising with HTML, CSS, Javascript and PHP. To do so we made use of many different resources available: books from the library, documentation online and Lynda.com online courses.


Front End

BootStrap

Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web.
Boostrap Logo

In order to design the front-end for the website we decided to make use of Bootstrap. The grid-system and the inherited web-responsiveness of it perfectly match our requirements for the website being mobile optimized.


Despite it already provides a clean and appealing style, we plan to override some of it in order to adapt it to our client's requirements and personalise it.

Dropzone.js

DropzoneJS is an open source library that provides drag’n’drop file uploads with image previews.

Dropzone is an open-source library written in Javascript, HTML and CSS that provides a GUI for the upload of files. It supports both Drag&Drop functionalities and a file-manager window selection of files. Furthermore, it provides a graphic feedback of the files uploaded and image previews.


Back End

Symfony 2

Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
Symfony 2 Logo

In order to facilitate the development of the back-end we decided to make use of one of the most used open-source PHP frameworks available online. Out of many frameworks available, (both full-stack like Laravel or CakePHP and micro-frameworks such as Slim and Silex), we decided to opt for Symfony basing our decision on a list of characteristics we deemed fundamental for our project:


  • extensive documentation available on the website, piled during all years of its existence that also guarantees a prolific community and stability.
  • availability of third-party bundles that we could make use of, in order to satisfy the requirements outlined in the first phases of the project (refer to the "Requirements" section).
  • the high emphasis symfony puts into testing. In particular the perfect integration with PHPUnit that could ease the testing of our code.

Finally, Symfony naturally integrates the Model-View-Controller (MVC) architecture in its structure.

Third-Party Bundles.

One of the most valuable properties about Symfony is the substantial list of third-party components available to use in order to avoid having to write from scratch code that has already been written and thoroughly tested.


Symfony Standard Edition comes with a list of useful bundles already integrated that we decided to stick with:


Twig:
Twig: a template engine for PHP. It is powered by a flexible lexer and parser that provides conciseness and full featured syntax.
SwiftMailer:
a bundle that offers an Object Oriented approach for sending emails while providing optional additional features.
Doctrine:
an Object-Relational Mapping (ORM) library that facilitates integration with the mySQL database.

Furthermore, after careful research we decided to make use of these additional components:


OneupUploaderBundle:
provides the backend for the uploading of files using the Dropzone Javascript library as front-end. Among its features, it provides the possibility of using an Orphanage for handling of files from anonymous users.
FOSRestBundle:
it provides several tools for building RESTful APIs. We are going to make use of this component when creating the API for the website in order to allow third-party applications to interface with the CreateSafe resources.
FOSAuthServerBundle:
bundle that provides a security layer in dealings with resources. In particular it helps integrating the OAuth 2 protocol for grating access to the User’s resources.
HWIOAuthBundle:
supports the OAuth protocol from the client side. We plan to use this to access services like Google Drive and Dropbox and to test our own API.