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.