diff options
| -rw-r--r-- | docs/API-Endpoints.md | 864 | ||||
| -rw-r--r-- | docs/Authentication.md | 52 | ||||
| -rw-r--r-- | docs/File-Structure.md | 495 | ||||
| -rw-r--r-- | docs/Privacy-Policy.md | 23 |
4 files changed, 1434 insertions, 0 deletions
diff --git a/docs/API-Endpoints.md b/docs/API-Endpoints.md new file mode 100644 index 0000000..503bfc4 --- /dev/null +++ b/docs/API-Endpoints.md @@ -0,0 +1,864 @@ +### Contents: +- [/api/User](#apiuser) + - [/Login](#login) + - [/Register](#register) + - [/GetUser](#getuser) + - [/ProfilePicture](#profilepicture) + - [Get User By Id](#get-user-by-id) + - [Update User By Id](#update-user-by-id) + - [Delete User By Id](#delete-user-by-id) +- [/api/Role](#apirole) + - [Create Role](#create-role) + - [Get Role By Id](#get-role-by-id) + - [Update Role By Id](#update-role-by-id) + - [Delete Role By Id](#delete-role-by-id) +- [/api/Feed](#apifeed) + - [/GetPosts](#getposts) + - [/GetUserPosts](#getuserposts) +- [/api/Post](#apipost) + - [Create Post](#create-post) + - [Get Post By Id](#get-post-by-id) + - [Update Post By Id](#update-post-by-id) + - [Delete Post By Id](#delete-post-by-id) +- [/api/Comment](#apicomment) + - [Create Comment](#create-comment) + - [Get Comment By Id](#get-comment-by-id) + - [Update Comment By Id](#update-comment-by-id) + - [Delete Comment By Id](#delete-comment-by-id) +- [/api/Language](#apilanguage) + - [/GetLanguages](#getlanguages) + - [Create Language](#create-language) + - [Get Language By Id](#get-language-by-id) + - [Update Language By Id](#update-language-by-id) + - [Delete Language By Id](#delete-language-by-id) +- [/api/Technology](#apitechnology) + - [/GetTechnologies](#gettechnologies) + - [Create Technology](#create-technology) + - [Get Technology By Id](#get-technology-by-id) + - [Update Technology By Id](#update-technology-by-id) + - [Delete Technology By Id](#delete-technology-by-id) + +*** + +# /api/User + +## /Login + +||| +|---|---| +|Description|Get a JWT for an existing user| +|Type|POST| +|URL structure|`http://localhost:5000/api/User/login`| +|Authentication|None| +|Body|JSON| +|Returns|JSON; The JWT| +||| + +Sample body: +```json +{ + "userName": "string", + "password": "string" +} +``` +Sample response: +```json +{ + "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJJRCI6IjFiMTU2ZTY3LTVhZmItNGZmMi1hYzRmLTY4NjVmZWI5NzFiYiIsIlVzZXJuYW1lIjoieW9yZ3VzIiwicm9sZSI6IlVzZXIiLCJuYmYiOjE2MTIzMzg5NzIsImV4cCI6MTYxMjkwODAwMCwiaWF0IjoxNjEyMzM4OTcyfQ.dneQidggMu9FD7UXBzn5td3phX3OIgp7y4BygHTqq5Un5D67xH1jZTRQpi9Zqcq76mODvUToAo7j4PFdJtIdtg" +} +``` + +## /Register + +||| +|---|---| +|Description|Add an account to the database and get a JWT| +|Type|POST| +|URL structure|`http://localhost:5000/api/User/register`| +|Authentication|None| +|Body|JSON| +|Returns|JSON; The JWT| + +Sample body: +```json +{ + "userName": "string", + "email": "user@example.com", + "firstName": "string", + "lastName": "string", + "password": "string" +} +``` +Sample response: +```json +{ + "token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJJRCI6IjFiMTU2ZTY3LTVhZmItNGZmMi1hYzRmLTY4NjVmZWI5NzFiYiIsIlVzZXJuYW1lIjoieW9yZ3VzIiwicm9sZSI6IlVzZXIiLCJuYmYiOjE2MTIzMzg5NzIsImV4cCI6MTYxMjkwODAwMCwiaWF0IjoxNjEyMzM4OTcyfQ.dneQidggMu9FD7UXBzn5td3phX3OIgp7y4BygHTqq5Un5D67xH1jZTRQpi9Zqcq76mODvUToAo7j4PFdJtIdtg" +} +``` + +## /GetUser + +||| +|---|---| +|Description|Get a user via his UserName| +|Type|GET| +|URL structure|`http://localhost:5000/api/User/GetUser?UserName=test`| +|Authentication|None| +|Body|None| +|Returns|JSON; The object of the user| +||| + +Sample response: +```json +{ + "profilePictureURL": "https://avatars.githubusercontent.com/u/75525529?s=60&v=4", + "roles": [ + { + "name": "User" + } + ], + "friends": [ + ], + "languages": [ + { + "id": "cf40034d-75d7-4792-821d-c16220a5b928" + } + ], + "technologies": [ + { + "id": "907421d9-1b60-411b-b780-85e65a004b56" + } + ], + "posts": [ + { + "id": "850d0655-72cb-4477-b69b-35e8645db266" + } + ], + "userName": "test", + "email": "test@bg.com", + "firstName": "Test", + "lastName": "Test" +} +``` + +## /ProfilePicture + +||| +|---|---| +|Description|Update the profile picture of the given User| +|Type|PUT| +|URL structure|`http://localhost:5000/api/User/ProfilePicture?UserId=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|Multipart Form| +|Returns|JSON; The link to the uploaded profile picture| +||| + +Sample body: +|Name|Value| +|---|---| +|Picture|`new-profile-picture.png` (this is the actual file)| + +Sample response: +```json +{ + "profilePictureURL": "https://avatars.githubusercontent.com/u/75525529?s=60&v=4" +} +``` + +## Get User By Id + +||| +|---|---| +|Description|Get a user via his Id| +|Type|GET| +|URL structure|`http://localhost:5000/api/User?Id=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|JSON; The object of the user| +||| + +Sample response: +```json +{ + "profilePictureURL": "https://avatars.githubusercontent.com/u/75525529?s=60&v=4", + "roles": [ + { + "name": "User" + } + ], + "friends": [ + ], + "languages": [ + { + "id": "cf40034d-75d7-4792-821d-c16220a5b928" + } + ], + "technologies": [ + { + "id": "907421d9-1b60-411b-b780-85e65a004b56" + } + ], + "posts": [ + { + "id": "850d0655-72cb-4477-b69b-35e8645db266" + } + ], + "userName": "test", + "email": "test@bg.com", + "firstName": "Test", + "lastName": "Test" +} +``` + +## Update User By Id + +||| +|---|---| +|Description|Modify the values in an existing user (account)| +|Type|PUT| +|URL structure|`http://localhost:5000/api/User?Id=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|JSON; The updated user object| +||| + +Sample body: +```json +{ + "userName": "string", + "email": "user@example.com", + "firstName": "string", + "lastName": "string", + "password": "string", + "friends": [ + { + "userName": "string" + } + ], + "roles": [ + { + "name": "string" + } + ], + "languages": [ + { + "name": "string" + } + ], + "technologies": [ + { + "name": "string" + } + ] +} +``` +Sample response: +```json +{ + "profilePictureURL": "https://avatars.githubusercontent.com/u/75525529?s=60&v=4", + "roles": [ + { + "name": "User" + } + ], + "friends": [], + "languages": [ + { + "id": "33397a3b-46eb-424f-8e19-d88dbf3e953b" + }, + { + "id": "cea85a74-4820-42ff-b64f-61d7e9bfc696" + } + ], + "technologies": [ + { + "id": "907421d9-1b60-411b-b780-85e65a004b56" + } + ], + "posts": [], + "userName": "test", + "email": "test1@bg.com", + "firstName": "Tester", + "lastName": "Tester" +} +``` + +## Delete User By Id + +||| +|---|---| +|Description|Delete an existing user from the database `WARNING: THIS IS IRREVERSIBLE`| +|Type|DELETE| +|URL structure|`http://localhost:5000/api/User?Id=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|Nothing| +||| + +*** + +# /api/Role + +## Create Role + +||| +|---|---| +|Description|Add a new Role to the DataBase| +|Type|POST| +|URL structure|`http://localhost:5000/api/Role`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|JSON; The result role object, only with the role Id| +||| + +Sample body: +```json +{ + "name": "string" +} +``` +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39" +} +``` + +## Get Role By Id + +||| +|---|---| +|Description|Get an existing Role via it's Id| +|Type|GET| +|URL structure|`http://localhost:5000/api/Role?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|Bearer Token (JWT), [Authorization Type 1](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|JSON; The role object, only with it's name| +||| + +Sample response: +```json +{ + "name": "Test" +} +``` + +## Update Role By Id + +||| +|---|---| +|Description|Modify the values (name) of an existing role| +|Type|PUT| +|URL structure|`http://localhost:5000/api/Role?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|Nothing| +||| + +Sample body: +```json +{ + "name": "string" +} +``` + +## Delete Role By Id + +||| +|---|---| +|Description|Remove an existing Role from the DataBase| +|Type|POST| +|URL structure|`http://localhost:5000/api/Role?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|Nothing| +||| + +*** + +# /api/Feed + +## /GetPosts + +||| +|---|---| +|Description|Get a certain amount of the latest posts of a User's friends| +|Type|POST| +|URL structure|`http://localhost:5000/api/Feed/GetPosts?UserId=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 1](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|JSON; An array with the selected posts| +||| + +Sample body: +```json +{ + "pageNumber": 1, + "firstPageTimeIssued": "2022-01-30T18:43:01.082Z", + "pageSize": 5 +} +``` +Sample response: +```json +{ + "posts": [ + { + "postId": "850d0655-72cb-4477-b69b-35e8645db266", + "creatorFirstName": "test", + "creatorLastName": "Test", + "creatorUsername": "Test", + "message": "A sample post", + "timeCreated": "2021-02-03T10:52:38.271647", + "comments": [], + "fileUrls": [] + } + ] +} +``` + +## /GetUserPosts + +||| +|---|---| +|Description|Get a certain amount of the latest posts from a User| +|Type|POST| +|URL structure|`http://localhost:5000/api/GetUserPosts?UserName=test`| +|Authentication|None| +|Body|JSON| +|Returns|JSON; An array with the selected posts| +||| + +Sample body: +```json +{ + "pageNumber": 1, + "firstPageTimeIssued": "2022-01-30T18:43:01.082Z", + "pageSize": 5 +} +``` +Sample response: +```json +{ + "posts": [ + { + "postId": "850d0655-72cb-4477-b69b-35e8645db266", + "creatorFirstName": "test", + "creatorLastName": "Test", + "creatorUsername": "Test", + "message": "A sample post", + "timeCreated": "2021-02-03T10:52:38.271647", + "comments": [], + "fileUrls": [] + } + ] +} +``` + +*** + +# /api/Post + +## Create Post + +||| +|---|---| +|Description|Add a new Post to the DataBase| +|Type|POST| +|URL structure|`http://localhost:5000/api/Post?UserId=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 1](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|Multipart Form| +|Returns|JSON; The result Post object, only with the Post Id| +||| + +Sample body: +|Name|Value| +|---|---| +|Message|The message of my post| +|Files|`attachment.txt` (that is the actual file)| +|Files|`attachment2.txt` (that is the actual file)| +|...|| + +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39" +} +``` + +## Get Post By Id + +||| +|---|---| +|Description|Get an existing Post from the DataBase| +|Type|GET| +|URL structure|`http://localhost:5000/api/Post?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|None| +|Body|None| +|Returns|JSON; The result Post object| +||| + +Sample response: +```json +{ + "postId": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39", + "creatorFirstName": "Test", + "creatorLastName": "Test", + "creatorUsername": "test", + "message": "A sample post", + "timeCreated": "2021-02-02T18:29:31.942772", + "comments": [], + "fileUrls": [] +} +``` + +## Update Post By Id + +||| +|---|---| +|Description|Update the values of an existing post| +|Type|PUT| +|URL structure|`http://localhost:5000/api/Post?UserId=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|Multipart Form| +|Returns|JSON; The result Post object, only with the Post Id| +||| + +**Note:** When editing a post's files, they all get replaced, you cannot just add new files. After post is edited, it's "timeCreated" get's updated. + +Sample body: +|Name|Value| +|---|---| +|PostId|1cc9773f-8d9a-4bfd-83ca-2099dc787a39| +|NewMessage|The new message of the post| +|Files|`attachment3.txt` (that is the actual file)| +|Files|`attachment4.txt` (that is the actual file)| +|...| + +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39" +} +``` + +## Delete Post By Id + +||| +|---|---| +|Description|Remove an existing Post from the DataBase| +|Type|DELETE| +|URL structure|`http://localhost:5000/api/Post?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|None| +||| + +*** + +# /api/Comment + +## Add comment + +||| +|---|---| +|Description|Add a new Comment to an existing Post| +|Type|POST| +|URL structure|`http://localhost:5000/api/Comment?UserId=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 1](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|JSON; The result Comment object, only with the Comment Id| +||| + +Sample body: +```json +{ + "postId": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39", + "message": "First comment" +} +``` +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39" +} +``` + +## Get Comment By Id + +||| +|---|---| +|Description|Get an existing Comment from the DataBase| +|Type|GET| +|URL structure|`http://localhost:5000/api/Comment?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|None| +|Body|None| +|Returns|JSON; The result Comment object| +||| + +Sample response: +```json +{ + "commentId": "086d1a23-c977-4cdc-9bdf-dc81992b3a12", + "postId": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39", + "issuerFirstName": "Test", + "issuerLastName": "Test", + "issuerUsername": "test", + "message": "First coment", + "timeCreated": "2021-02-01T13:18:57.434512" +} +``` + +## Update Comment By Id + +||| +|---|---| +|Description|Update the values of an existing comment| +|Type|PUT| +|URL structure|`http://localhost:5000/api/Comment?UserId=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|JSON; The result Comment object, only with the Comment Id| +||| + +Sample body: +```json +{ + "commentId": "086d1a23-c977-4cdc-9bdf-dc81992b3a12", + "postId": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39", + "newMessage": "string" +} +``` +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39" +} +``` + +## Delete Comment By Id + +||| +|---|---| +|Description|Remove an existing Comment from the DataBase| +|Type|DELETE| +|URL structure|`http://localhost:5000/api/Comment?Id=086d1a23-c977-4cdc-9bdf-dc81992b3a12`| +|Authentication|Bearer Token (JWT), [Authorization Type 2](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|None| +||| + +*** + +# /api/Language + +## /GetLanguages + +||| +|---|---| +|Description|Get all available Languages from the DataBase| +|Type|GET| +|URL structure|`http://localhost:5000/api/Language/GetLanguages`| +|Authentication|Bearer Token (JWT), [Authorization Type 1](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|JSON; The result Language array object| +||| + +Sample response: +```json +[ + { + "id": "5286821a-1407-4daf-ac3e-49153c2d3f66", + "name": "CSharp" + }, + { + "id": "cea85a74-4820-42ff-b64f-61d7e9bfc696", + "name": "Perl" + }, + { + "id": "6dc1cb1a-1c4f-41af-8b44-86441cb60136", + "name": "Java" + } +] +``` + +## Create Language + +||| +|---|---| +|Description|Add a new Language in the DataBase| +|Type|POST| +|URL structure|`http://localhost:5000/api/Comment`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|JSON; The result Comment object, only with the Comment Id| +||| + +Sample body: +```json +{ + "name": "Perl" +} +``` +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39" +} +``` + +## Get Language By Id + +||| +|---|---| +|Description|Get an existing Language from the DataBase| +|Type|GET| +|URL structure|`http://localhost:5000/api/Language?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|None| +|Body|None| +|Returns|JSON; The result Language object| +||| + +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39", + "name": "Perl" +} +``` + +## Update Language By Id + +||| +|---|---| +|Description|Update the values of an existing Language| +|Type|PUT| +|URL structure|`http://localhost:5000/api/Language?Id=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|None| +||| + +Sample body: +```json +{ + "name": "string" +} +``` + +## Delete Language By Id + +||| +|---|---| +|Description|Remove an existing Language from the DataBase| +|Type|DELETE| +|URL structure|`http://localhost:5000/api/Language?Id=086d1a23-c977-4cdc-9bdf-dc81992b3a12`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|None| +||| + +*** + +# /api/Technology + +## /GetTechnologies + +||| +|---|---| +|Description|Get all available Technologies from the DataBase| +|Type|GET| +|URL structure|`http://localhost:5000/api/Language/GetTechnologies`| +|Authentication|Bearer Token (JWT), [Authorization Type 1](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|JSON; The result Technology array object| +||| + +Sample response: +```json +[ + { + "id": "5286821a-1407-4daf-ac3e-49153c2d3f66", + "name": "ASP.NET" + }, + { + "id": "cea85a74-4820-42ff-b64f-61d7e9bfc696", + "name": "Angular" + } +] +``` + +## Create Technology + +||| +|---|---| +|Description|Add a new Technology in the DataBase| +|Type|POST| +|URL structure|`http://localhost:5000/api/Technology`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|JSON; The result Technology object, only with the Technology Id| +||| + +Sample body: +```json +{ + "name": "Angular" +} +``` +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39" +} +``` + +## Get Technology By Id + +||| +|---|---| +|Description|Get an existing Technology from the DataBase| +|Type|GET| +|URL structure|`http://localhost:5000/api/Technology?Id=1cc9773f-8d9a-4bfd-83ca-2099dc787a39`| +|Authentication|None| +|Body|None| +|Returns|JSON; The result Technology object| +||| + +Sample response: +```json +{ + "id": "1cc9773f-8d9a-4bfd-83ca-2099dc787a39", + "name": "Angular" +} +``` + +## Update Technology By Id + +||| +|---|---| +|Description|Update the values of an existing Technology| +|Type|PUT| +|URL structure|`http://localhost:5000/api/Technology?Id=27e203bd-5312-4831-9334-cd3c20e5d672`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|JSON| +|Returns|None| +||| + +Sample body: +```json +{ + "name": "string" +} +``` + +## Delete Technology By Id + +||| +|---|---| +|Description|Remove an existing Technology from the DataBase| +|Type|DELETE| +|URL structure|`http://localhost:5000/api/Technology?Id=086d1a23-c977-4cdc-9bdf-dc81992b3a12`| +|Authentication|Bearer Token (JWT), [Authorization Type 3](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication#token-validation)| +|Body|None| +|Returns|None| +|||
\ No newline at end of file diff --git a/docs/Authentication.md b/docs/Authentication.md new file mode 100644 index 0000000..f9e6525 --- /dev/null +++ b/docs/Authentication.md @@ -0,0 +1,52 @@ +Certain actions with the API require User authentication. In DevHive, all authentication is done with [JSON Web Tokens](https://en.wikipedia.org/wiki/JSON_Web_Token). + +The JWTs must be sent as a [Bearer Token](https://www.oauth.com/oauth2-servers/differences-between-oauth-1-2/bearer-tokens/). + +## Structure of tokens + +The main contents of a User's token are the `UserName`, `ID` and `Roles`. + +Sample token: +``` +eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJJRCI6IjI3ZTIwM2JkLTUzMTItNDgzMS05MzM0LWNkM2MyMGU1ZDY3MiIsIlVzZXJuYW1lIjoidGVzdCIsInJvbGUiOiJVc2VyIiwibmJmIjoxNjEyMzYxOTc1LCJleHAiOjE2MTI5MDgwMDAsImlhdCI6MTYxMjM2MTk3NX0.ZxhDSUsDf9cGig03QpzNgj3dkqbcfAoFXVIfixYGurzhd0l1_IO79UpE_Sb6ZU9hz3IT1XPrlrQ_Kd46L7xcQg +``` +[Decoded](https://jwt.io/): + +- Header +```json +{ + "alg": "HS512", + "typ": "JWT" +} +``` + +- Data +```json +{ + "ID": "27e203bd-5312-4831-9334-cd3c20e5d672", + "Username": "test", + "role": "User", + "nbf": 1612361975, + "exp": 1612908000, + "iat": 1612361975 +} +``` + +- Signature +``` +HMACSHA512( + base64UrlEncode(header) + "." + + base64UrlEncode(payload) +) +``` + +## Token validation + +All token validations are done in the User Service. Depending on the situation, we can differentiate a couple types of authentication: + +||| +|---|---| +|1|Has the role "User" or "Admin"| +|2|Has the role "User" and is the owner/author of the object or has the role "Admin"| +|3|Has the role "Admin"| +|||
\ No newline at end of file diff --git a/docs/File-Structure.md b/docs/File-Structure.md new file mode 100644 index 0000000..4d0341e --- /dev/null +++ b/docs/File-Structure.md @@ -0,0 +1,495 @@ +DevHive has a lot of files and it can be hard to really see the whole structure of everything from a first glance. In this document, all of the important/notable files and folders are represented in a tree structure. + +### Contents: +- [Common](#common) +- [Data](#data) +- [Service](#service) +- [Tests](#tests) +- [Web](#web) +- [Full Overview](#full-overview) + +# Common + +``` +└── DevHive.Common + └── Models + ├── Identity + │ └── TokenModel.cs + └── Misc + ├── IdModel.cs + ├── PasswordModifications.cs + └── Patch.cs +``` + +# Data + +``` +└── DevHive.Data + ├── ConnectionString.json + ├── DevHiveContext.cs + ├── DevHiveContextFactory.cs + ├── Interfaces + | ├── Models + | │ ├── IComment.cs + │ | ├── ILanguage.cs + │ | ├── IModel.cs + │ | ├── IPost.cs + │ | ├── IProfilePicture.cs + │ | ├── IRating.cs + │ | ├── IRole.cs + │ | ├── ITechnology.cs + │ | └── IUser.cs + | └── Repositories + | ├── ICommentRepository.cs + | ├── IFeedRepository.cs + | ├── ILanguageRepository.cs + | ├── IPostRepository.cs + | ├── IRatingRepository.cs + | ├── IRepository.cs + | ├── IRoleRepository.cs + | ├── ITechnologyRepository.cs + | └── IUserRepository.cs + ├── Migrations + ├── Models + │ ├── Comment.cs + │ ├── Language.cs + │ ├── Post.cs + │ ├── ProfilePicture.cs + │ ├── Rating.cs + │ ├── Role.cs + │ ├── Technology.cs + │ └── User.cs + ├── RelationModels + │ ├── RatedPost.cs + │ ├── UserFriend.cs + │ └── UserRate.cs + └── Repositories + ├── BaseRepository.cs + ├── CommentRepository.cs + ├── FeedRepository.cs + ├── LanguageRepository.cs + ├── PostRepository.cs + ├── RatingRepository.cs + ├── RoleRepository.cs + ├── TechnologyRepository.cs + └── UserRepository.cs +``` + +# Service + +``` +└── DevHive.Services + ├── Configurations + │ └── Mapping + | ├── CommentMappings.cs + | ├── FeedMappings.cs + | ├── LanguageMappings.cs + | ├── PostMappings.cs + | ├── RatingMappings.cs + | ├── RoleMapings.cs + | ├── TechnologyMappings.cs + | └── UserMappings.cs + ├── Interfaces + │ ├── ICloudService.cs + │ ├── ICommentService.cs + │ ├── IFeedService.cs + │ ├── ILanguageService.cs + │ ├── IPostService.cs + │ ├── IRateService.cs + │ ├── IRoleService.cs + │ ├── ITechnologyService.cs + │ └── IUserService.cs + ├── Models + | ├── Cloud + | │ └── CloudinaryService.cs + | ├── Comment + | │ ├── CreateCommentServiceModel.cs + | │ ├── ReadCommentServiceModel.cs + | │ └── UpdateCommentServiceModel.cs + | ├── Feed + | │ ├── GetPageServiceModel.cs + | │ └── ReadPageServiceModel.cs + | ├── Identity + | │ ├── Role + | │ │ ├── CreateRoleServiceModel.cs + | │ │ ├── RoleServiceModel.cs + | │ │ └── UpdateRoleServiceModel.cs + | │ └── User + | │ ├── BaseUserServiceModel.cs + | │ ├── FriendServiceModel.cs + | │ ├── LoginServiceModel.cs + | │ ├── ProfilePictureServiceModel.cs + | │ ├── RegisterServiceModel.cs + | │ ├── UpdateFriendServiceModel.cs + | │ ├── UpdateProfilePictureServiceModel.cs + | │ ├── UpdateUserServiceModel.cs + | │ └── UserServiceModel.cs + | ├── Language + | │ ├── CreateLanguageServiceModel.cs + | │ ├── LanguageServiceModel.cs + | │ ├── ReadLanguageServiceModel.cs + | │ └── UpdateLanguageServiceModel.cs + | ├── Post + | | ├── Rating + | | │ ├── RatePostServiceModel.cs + | | │ └── ReadPostRatingServiceModel.cs + | │ ├── CreatePostServiceModel.cs + | │ ├── ReadPostServiceModel.cs + | │ └── UpdatePostServiceModel.cs + | └── Technology + | ├── CreateTechnologyServiceModel.cs + | ├── ReadTechnologyServiceModel.cs + | ├── TechnologyServiceModel.cs + | └── UpdateTechnologyServiceModel.cs + ├── Options + │ └── JWTOptions.cs + └── Services + ├── CommentService.cs + ├── FeedService.cs + ├── LanguageService.cs + ├── PostService.cs + ├── RateService.cs + ├── RoleService.cs + ├── TechnologyService.cs + └── UserService.cs +``` + +# Tests + +``` +└── DevHive.Tests + ├── DevHive.Data.Tests + │ ├── CommentRepository.Tests.cs + │ ├── FeedRepository.Tests.cs + │ ├── LenguageRepository.Tests.cs + │ ├── PostRepository.Tests.cs + │ ├── RoleRepository.Tests.cs + │ ├── TechnologyRepository.Tests.cs + │ └── UserRepositoryTests.cs + ├── DevHive.Services.Tests + │ ├── FeedService.Tests.cs + │ ├── LanguageService.Tests.cs + │ ├── PostService.Tests.cs + │ ├── RoleService.Tests.cs + │ ├── TechnologyServices.Tests.cs + │ └── UserService.Tests.cs + └── DevHive.Web.Tests + ├── LanguageController.Tests.cs + └── TechnologyController.Tests.cs +``` + +# Web + +``` +└── DevHive.Web + ├── appsettings.json + ├── Attributes + │ ├── GoodPasswordModelValidation.cs + │ └── OnlyLettersModelValidation.cs + ├── Configurations + | ├── Extensions + | │ ├── ConfigureAutoMapper.cs + | │ ├── ConfigureDatabase.cs + | │ ├── ConfigureDependencyInjection.cs + | │ ├── ConfigureExceptionHandlerMiddleware.cs + | │ ├── ConfigureJWT.cs + | │ └── ConfigureSwagger.cs + | └── Mapping + | ├── CommentMappings.cs + | ├── FeedMappings.cs + | ├── LanguageMappings.cs + | ├── PostMappings.cs + | ├── RatingMappings.cs + | ├── RoleMappings.cs + | ├── TechnologyMappings.cs + | └── UserMappings.cs + ├── Controllers + │ ├── CommentController.cs + │ ├── FeedController.cs + │ ├── LanguageController.cs + │ ├── PostController.cs + │ ├── RateController.cs + │ ├── RoleController.cs + │ ├── TechnologyController.cs + │ └── UserController.cs + ├── Middleware + │ └── ExceptionMiddleware.cs + ├── Models + | ├── Comment + | │ ├── CreateCommentWebModel.cs + | │ ├── ReadCommentWebModel.cs + | │ └── UpdateCommentWebModel.cs + | ├── Feed + | │ ├── GetPageWebModel.cs + | │ └── ReadPageWebModel.cs + | ├── Identity + | │ ├── Role + | │ │ ├── CreateRoleWebModel.cs + | │ │ ├── RoleWebModel.cs + | │ │ └── UpdateRoleWebModel.cs + | │ └── User + | │ ├── BaseUserWebModel.cs + | │ ├── LoginWebModel.cs + | │ ├── ProfilePictureWebModel.cs + | │ ├── RegisterWebModel.cs + | │ ├── TokenWebModel.cs + | │ ├── UpdateProfilePictureWebModel.cs + | │ ├── UpdateUserWebModel.cs + | │ ├── UsernameWebModel.cs + | │ └── UserWebModel.cs + | ├── Language + | │ ├── CreateLanguageWebModel.cs + | │ ├── LanguageWebModel.cs + | │ ├── ReadLanguageWebModel.cs + | │ └── UpdateLanguageWebModel.cs + | ├── Post + | │ ├── Rating + | │ │ ├── RatePostWebModel.cs + | │ │ └── ReadPostRatingWebModel.cs + | │ ├── CreatePostWebModel.cs + | │ ├── ReadPostWebModel.cs + | │ └── UpdatePostWebModel.cs + | └── Technology + | ├── CreateTechnologyWebModel.cs + | ├── ReadTechnologyWebModel.cs + | ├── TechnologyWebModel.cs + | └── UpdateTechnologyWebModel.cs + ├── Program.cs + ├── Properties + │ └── launchSettings.json + └── Startup.cs +``` + +# Full overview + +``` +. +├── DevHive.code-workspace +├── DevHive.Common +| └── Models +| ├── Identity +| │ └── TokenModel.cs +| └── Misc +| ├── IdModel.cs +| ├── PasswordModifications.cs +| └── Patch.cs +├── DevHive.Data +│ ├── ConnectionString.json +│ ├── DevHiveContext.cs +│ ├── DevHiveContextFactory.cs +| ├── Interfaces +| | ├── Models +| | │ ├── IComment.cs +| │ | ├── ILanguage.cs +| │ | ├── IModel.cs +| │ | ├── IPost.cs +| │ | ├── IProfilePicture.cs +| │ | ├── IRating.cs +| │ | ├── IRole.cs +| │ | ├── ITechnology.cs +| │ | └── IUser.cs +| | └── Repositories +| | ├── ICommentRepository.cs +| | ├── IFeedRepository.cs +| | ├── ILanguageRepository.cs +| | ├── IPostRepository.cs +| | ├── IRatingRepository.cs +| | ├── IRepository.cs +| | ├── IRoleRepository.cs +| | ├── ITechnologyRepository.cs +| | └── IUserRepository.cs +│ ├── Migrations +│ ├── Models +│ │ ├── Comment.cs +│ │ ├── Language.cs +│ │ ├── Post.cs +│ │ ├── ProfilePicture.cs +│ │ ├── Rating.cs +│ │ ├── Role.cs +│ │ ├── Technology.cs +│ │ └── User.cs +│ ├── RelationModels +│ │ ├── RatedPost.cs +│ │ ├── UserFriend.cs +│ │ └── UserRate.cs +│ └── Repositories +│ ├── BaseRepository.cs +│ ├── CommentRepository.cs +│ ├── FeedRepository.cs +│ ├── LanguageRepository.cs +│ ├── PostRepository.cs +│ ├── RatingRepository.cs +│ ├── RoleRepository.cs +│ ├── TechnologyRepository.cs +│ └── UserRepository.cs +├── DevHive.Services +│ ├── Configurations +│ │ └── Mapping +| | ├── CommentMappings.cs +| | ├── FeedMappings.cs +| | ├── LanguageMappings.cs +| | ├── PostMappings.cs +| | ├── RatingMappings.cs +| | ├── RoleMapings.cs +| | ├── TechnologyMappings.cs +| | └── UserMappings.cs +│ ├── Interfaces +│ │ ├── ICloudService.cs +│ │ ├── ICommentService.cs +│ │ ├── IFeedService.cs +│ │ ├── ILanguageService.cs +│ │ ├── IPostService.cs +│ │ ├── IRateService.cs +│ │ ├── IRoleService.cs +│ │ ├── ITechnologyService.cs +│ │ └── IUserService.cs +│ ├── Models +| | ├── Cloud +| | │ └── CloudinaryService.cs +| | ├── Comment +| | │ ├── CreateCommentServiceModel.cs +| | │ ├── ReadCommentServiceModel.cs +| | │ └── UpdateCommentServiceModel.cs +| | ├── Feed +| | │ ├── GetPageServiceModel.cs +| | │ └── ReadPageServiceModel.cs +| | ├── Identity +| | │ ├── Role +| | │ │ ├── CreateRoleServiceModel.cs +| | │ │ ├── RoleServiceModel.cs +| | │ │ └── UpdateRoleServiceModel.cs +| | │ └── User +| | │ ├── BaseUserServiceModel.cs +| | │ ├── FriendServiceModel.cs +| | │ ├── LoginServiceModel.cs +| | │ ├── ProfilePictureServiceModel.cs +| | │ ├── RegisterServiceModel.cs +| | │ ├── UpdateFriendServiceModel.cs +| | │ ├── UpdateProfilePictureServiceModel.cs +| | │ ├── UpdateUserServiceModel.cs +| | │ └── UserServiceModel.cs +| | ├── Language +| | │ ├── CreateLanguageServiceModel.cs +| | │ ├── LanguageServiceModel.cs +| | │ ├── ReadLanguageServiceModel.cs +| | │ └── UpdateLanguageServiceModel.cs +| | ├── Post +| | | ├── Rating +| | | │ ├── RatePostServiceModel.cs +| | | │ └── ReadPostRatingServiceModel.cs +| | │ ├── CreatePostServiceModel.cs +| | │ ├── ReadPostServiceModel.cs +| | │ └── UpdatePostServiceModel.cs +| | └── Technology +| | ├── CreateTechnologyServiceModel.cs +| | ├── ReadTechnologyServiceModel.cs +| | ├── TechnologyServiceModel.cs +| | └── UpdateTechnologyServiceModel.cs +│ ├── Options +│ │ └── JWTOptions.cs +│ └── Services +│ ├── CommentService.cs +│ ├── FeedService.cs +│ ├── LanguageService.cs +│ ├── PostService.cs +│ ├── RateService.cs +│ ├── RoleService.cs +│ ├── TechnologyService.cs +│ └── UserService.cs +├── DevHive.Tests +│ ├── DevHive.Data.Tests +│ │ ├── CommentRepository.Tests.cs +│ │ ├── FeedRepository.Tests.cs +│ │ ├── LenguageRepository.Tests.cs +│ │ ├── PostRepository.Tests.cs +│ │ ├── RoleRepository.Tests.cs +│ │ ├── TechnologyRepository.Tests.cs +│ │ └── UserRepositoryTests.cs +│ ├── DevHive.Services.Tests +│ │ ├── FeedService.Tests.cs +│ │ ├── LanguageService.Tests.cs +│ │ ├── PostService.Tests.cs +│ │ ├── RoleService.Tests.cs +│ │ ├── TechnologyServices.Tests.cs +│ │ └── UserService.Tests.cs +│ └── DevHive.Web.Tests +│ ├── LanguageController.Tests.cs +│ └── TechnologyController.Tests.cs +└── DevHive.Web + ├── appsettings.json + ├── Attributes + │ ├── GoodPasswordModelValidation.cs + │ └── OnlyLettersModelValidation.cs + ├── Configurations + | ├── Extensions + | │ ├── ConfigureAutoMapper.cs + | │ ├── ConfigureDatabase.cs + | │ ├── ConfigureDependencyInjection.cs + | │ ├── ConfigureExceptionHandlerMiddleware.cs + | │ ├── ConfigureJWT.cs + | │ └── ConfigureSwagger.cs + | └── Mapping + | ├── CommentMappings.cs + | ├── FeedMappings.cs + | ├── LanguageMappings.cs + | ├── PostMappings.cs + | ├── RatingMappings.cs + | ├── RoleMappings.cs + | ├── TechnologyMappings.cs + | └── UserMappings.cs + ├── Controllers + │ ├── CommentController.cs + │ ├── FeedController.cs + │ ├── LanguageController.cs + │ ├── PostController.cs + │ ├── RateController.cs + │ ├── RoleController.cs + │ ├── TechnologyController.cs + │ └── UserController.cs + ├── Middleware + │ └── ExceptionMiddleware.cs + ├── Models + | ├── Comment + | │ ├── CreateCommentWebModel.cs + | │ ├── ReadCommentWebModel.cs + | │ └── UpdateCommentWebModel.cs + | ├── Feed + | │ ├── GetPageWebModel.cs + | │ └── ReadPageWebModel.cs + | ├── Identity + | │ ├── Role + | │ │ ├── CreateRoleWebModel.cs + | │ │ ├── RoleWebModel.cs + | │ │ └── UpdateRoleWebModel.cs + | │ └── User + | │ ├── BaseUserWebModel.cs + | │ ├── LoginWebModel.cs + | │ ├── ProfilePictureWebModel.cs + | │ ├── RegisterWebModel.cs + | │ ├── TokenWebModel.cs + | │ ├── UpdateProfilePictureWebModel.cs + | │ ├── UpdateUserWebModel.cs + | │ ├── UsernameWebModel.cs + | │ └── UserWebModel.cs + | ├── Language + | │ ├── CreateLanguageWebModel.cs + | │ ├── LanguageWebModel.cs + | │ ├── ReadLanguageWebModel.cs + | │ └── UpdateLanguageWebModel.cs + | ├── Post + | │ ├── Rating + | │ │ ├── RatePostWebModel.cs + | │ │ └── ReadPostRatingWebModel.cs + | │ ├── CreatePostWebModel.cs + | │ ├── ReadPostWebModel.cs + | │ └── UpdatePostWebModel.cs + | └── Technology + | ├── CreateTechnologyWebModel.cs + | ├── ReadTechnologyWebModel.cs + | ├── TechnologyWebModel.cs + | └── UpdateTechnologyWebModel.cs + ├── Program.cs + ├── Properties + │ └── launchSettings.json + └── Startup.cs +``` diff --git a/docs/Privacy-Policy.md b/docs/Privacy-Policy.md new file mode 100644 index 0000000..c338763 --- /dev/null +++ b/docs/Privacy-Policy.md @@ -0,0 +1,23 @@ +DevHive **doesn't collect any user data, that you haven't personally submitted** (there is no telemetry), and that won't ever change! + +The only potentially sensitive that that could be stored is your profile (first and last name, email, ..) and your posts (if you've shared anything sensitive), but in both cases you've personally given this information. + +## Data on the server + +All data is stored in the database and isn't shared with anyone. The entity that is hosting an instance of the application could expose data to unknown third parties, but DevHive doesn't do anything of the sorts by itself! + +## Data on your machine + +On your computer, the only thing that is saved is your [authentication token](https://github.com/Team-Kaleidoscope/DevHive/wiki/Authentication) in session storage. This is done so you could stay logged in the website in the current tab, and after closing it, the data gets deleted. + +In the future we could add a cookie to your computer storage, but that will still only hold the token for authentication purposes, so you can reopen your browser and still be logged in. **Tracking and third-party cookies are *never* going to be implemented!** + +## Telemetry by tools + +DevHive itself doesn't collect any type of telemetry, but that isn't the same for the tools it uses. + +The `dotnet` CLI tool is used to run the API, and `dotnet` does [`collect telemetry`](https://docs.microsoft.com/en-us/dotnet/core/tools/telemetry). [The same](https://angular.io/cli/usage-analytics-gathering) can be said for the Angular CLI (`ng`). + +Thankfully in both cases, you can opt out. Ask the administrator(s) of the instance you're using whether they have disabled telemetry. + +**Although**, it's important to mention that **this telemetry might not be collecting your data**, but the data of the server that uses it. Do your own research!
\ No newline at end of file |
