Skip to main content Link Search Menu Expand Document (external link)

1.1 Design Document

Before you start writing any code for this project, we’d like you to create a design plan for each feature, and convince yourself that your design meets all requirements outlined in this spec.

Like any techinical writing, your design document needs to be clean and well formatted. In addition, it must contain the following sections:

Data Structures

What data structures are you going to use? List any struct definitions that you plan on including, along with the attributes these structs will contain. We’d recommend starting with a few core data structures (e.g. struct user, struct file, etc.), and adding additional attributes and structs as you need them.

User Authentication

How will you authenticate users? What information will you store in Datastore/Keystore for each user? How will you ensure that a user can have multiple client instances (e.g. laptop, phone, etc.) running simultaneously?

Relevant Client API Methods: InitUser, GetUser

File Storage and Retrieval

How will a user store their files? How will a user retrieve their files from the server? How will your design support efficient file append?

Relevant Client API Methods: LoadFile, StoreFile, AppendToFile

File Sharing and Revocation

How will a user share files with another user? How does this shared user access the shared file after accepting the invitation? How will a user revoke a different user’s access to a file? How will you ensure a revoked user cannot take any malicious actions on a file?

Relevant Client API Methods: CreateInvitation, AcceptInvitation

Helper Methods

Are there helper methods that you’ll create? There are a few in particular that may help simplify your implementation.

Hint: think about authenticated encryption.