Skip to content
/ Area Public

Web desktop and mobile platform to set up actions and reactions with lot of API

Notifications You must be signed in to change notification settings

XriM/Area

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Area

This is an personnal project.

About

Url Version Contact Terms of Service License
127.0.0.1:8080/ 1.0.0 area@epitech.eu http://localhost:8080/api-docs Apache 2.0

Introduction 👋

The goal of this project is to make a action-reaction web app to gather areas from multiple triggers APIs.

The project 🚀

The project is organized in three parts:

  1. The client_mobile is located under flutter/
  2. The client_web is located under client/
  3. The back-server is located under server/

Technologies used ⚙️

  • Docker
  • Server:
    • JavaScript
    • Express-JS
    • Eslint
    • Swagger
  • DB:
    • Postgresql
  • Client Web:
    • React
    • React-bootstrap
    • TypeScript
  • Mobile:
    • flutter

Prerequisites

  • Docker 🐳
  • Android SDK / Xcode

How to launch the project? 📲

  1. Clone the project: git clone https://github.com/XriM/area

Then run the following commands to start the app.

./script.sh

Or

docker-compose --env-file ./backend/.env up --build

Contributors

API (back-end):

Client mobile:

Client web:

Technical part

  • services:
    • youtube
    • outlook / onedrive
    • weather
    • steam
    • trello
    • bourse/crypto
    • reddit
    • github
    • discord
  • actions reactions:
    • email (action) ✅
    • meteo ville (action) ✅ OK
    • crypto (action) ✅ OK
    • joueurs steam (action) ✅ OK
    • onedrive (action) ✅
    • github (action) ✅ OK
    • youtube (action) ✅ OK
    • reddit (action) ✅ OK
    • carte trello (reaction) ✅
    • outlook send (reaction) ✅
    • discord webhook (reaction) ✅ OK
    • github (reaction) ✅
  • connexion:
    • basic auth
    • oauth2 → google

Routes

POST /users/signup


Body:


{
	"email": "test.area@outlook.fr",
	"username": "areaTest",
	"password": "mypassword"
}

Responses:


  • Response when signup request is successfull (Status code: 200):
{
	"message": "Account created!"
}
  • Response when signup request failed because an email address is already in use (Status code: 400):
{
	"message": "Email address already in use!"
}
  • Response when signup request failed for other reasons (missing a field, wrong email format... Status code: 400):
{
	"message": "Failed to create an account!"
}

POST /users/login


Body:

{
	"email": "test.area@outlook.fr",
	"password": "mypassword"
}

Responses:


  • Response when user successfully logged in (status code: 200):
{
	"token": "cjhdbfb76579yazdbhzebfd",
	"message": "Successfully logged in!",
	"username": "username"
}
  • Response when user password is wrong (status code: 400):
{
	"message": "Wrong password!"
}
  • Response when email doesn’t exist (status code: 400):
{
	"message": "Email doesn't exist!"
}
  • Response when signin request failed for other reasons (missing a field, wrong email format... Status code: 400):
{
	"message": "Failed to log in!"
}

POST /users/logout


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Responses:

  • Response when request succeded
{
	"message": "Successfully logged out!"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

GET /users


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Responses:


  • Response when request suceeded (status code: 200):
{
	"users": [
		{
			"username": "maxime"
		},
		{
			"username": "david"
		},
		{
			"username": "briann"
		},
		{
			"username": "jeff"
		},
	]
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

GET /users/:id


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Responses:


  • Response when request succeeded
{
	"username": "david",
	"email": "david@area.com"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

PATCH /users/:id


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Bodies:

{
	"email": "test@area.fr"
}
{
	"password": "myNewPassword"
}
{
	"username": "myNewUsername"
}
{
	"email": "my.newEmail@area.fr",
	"password": "myNewPassword",
	"username": "myNewUsername"
}

Responses:

  • Response when request succeeded
{
	"message": "User profile successfully modified!"
}
  • Response when no fields are specified (status code: 401):
{
	"message": "No fields specified!"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

DELETE /users/:id


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Responses:

  • Response when request succeded
{
	"message": "Successfully deleted user"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

GET /users/:id/services


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Responses:

  • Response when request is successfull (status code: 200)
{
	"services": [
		{
			"name": "AccuWeather"
		},
		{
			"name": "Google Calendar"
		},
		{
			"name": "Gmail"
		}
	]
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

GET /users/:id/services/:id


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Responses:

  • Response when request is successfull (status code: 200)
{
	"name": "Google Calendar",
	"actions_id": [
		{
			"id": 1
		},
		{
			"id": 4
		},
		{
			"id": 5
		},
	],
	"reactions_id": [
		{
			"id": 3
		},
		{
			"id": 6
		},
		{
			"id": 8
		},
	],
	"token": "fenfnzef987vdgzefbehfl"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

PATCH /users/:id/services/:id


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Body:

{
	"token": "dvcdzcdjzlcb678edhzfjdknzed"
}

Responses:

  • Response when request succeeded (status code: 200)
{
	"message": "Service token successfully loaded!"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

POST /users/:username/services/:id


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

Body (optionnal):

{
	"token": "dvcdzcdjzlcb678edhzfjdknzed"
}

Responses:

  • Response when request succeeded (status code: 200)
{
	"message": "Service token successfully loaded!"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

PATCH /users/:id/services/:id


Header:

{
	"Authorization": "Bearer cjhdbfb76579yazdbhzebfd"
}

GET /users/:username/areas


Header:

{
	"Authorization": "Bearer <token>"
}

a

Responses:

  • Response when request succeeded (status code: 200):
{
	"areas": [
		{
			"id": 1,
		  "name": "Area 1",
			"action": {
			  "id": 6,
			  "name": "Steam players changed"
			},
			"reaction": {
				"id": 1,
				"name": "Send email"
			}
		},
		{
			"id": 2,
			"name": "Area 2",
			"action": {
				"id": 6,
				"name": "Steam players changed"
			},
			"reaction": {
				"id": 1,
				"name": "Send email"
			}
		}
	]
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

POST /users/:username/areas


Header:

{
	"Authorization": "Bearer chbzhfbzef"
}

Body (the config parameter is optional):

{
	"action_id": 1,
	"reaction_id": 1,
	"name": "area name",
	"config":{
		"param1": "value1",
		"param2": "value2"
	}
}

Responses:

  • Response when request succeeded (status code: 200)
{
	"message": "Area successfully created!"
}
  • Response when request failed because no token was passed (status code: 401):
{
	"message": "You need to signin to an account!"
}
  • Response when request failed because the token is invalid or expired (status code: 498):
{
	"message": "Invalid token!"
}

service Table

ID PRIMARY KEY NAME VARCHAR

action Table

ID PRIMARY KEY NAME VARCHAR

reaction Table

ID PRIMARY KEY NAME VARCHAR

area Table

ID PRIMARY KEY ACTION_ID (Foreign key) REACTION_ID (Foreign Key)

service_reaction Table

ID PRIMARY KEY SERVICE_ID FOREIGN KEY(Service) TRIGGER_ID FOREIGN KEY(Trigger)

users Table

ID PRIMARY KEY EMAIL VARCHAR USERNAME VARCHAR PASSWORD? VARCHAR

user_service table

ID PRIMARY KEY USER_ID FOREIGN KEY(User) SERVICE_ID FOREIGN KEY(Service) TOKEN? VARCHAR

user_area Table

ID PRIMARY KEY USER_ID FOREIGN KEY(User) TRIGGER_ID FOREIGN KEY(Trigger) CONFIG VARCHAR (json)

JSON front to back

Weather (action):

{
	"city": "Ville_à_surveiller"
	"temp_min": "température_min_à_surveiller"
	"temp_max": "température_max_à_surveiller"
}

Crypto (action):

{
	"crypto": "pair_à_surveiller"
	"value_min": "valeur_mini_à_surveiller"
	"value_max": "valeur_max_à_surveiller"
}

owGitHub (action):

au lieu d’envoyer le token il faut envoyer le code à “POST /users/:username/services/:id” avec ce body:

{
	"token": "code"
}
 ensuite pour le JSon config:
{
	"github": "repo_a_surveiller"
	"owner": "owner_du_repo"
}

GitHub (reaction):

{
	"github": "repo_pour_issue"
	"owner": "owner_du_repo"
	"title": "titre_de_lissue"
	"message": "message_de_lissue"
}

Outlook (action):

{
	"email": "email.à.surveiller@epitech.eu"
}

Outlook (reaction):

{
	"to": [
		"briann.gerbaux@epitech.eu",
		"david.nikolic@epitech.eu"
	],
	"cc": [
		"maxime.sarres@epitech.eu",
		"jefferson.guiot@epitech.eu"
	],
	"subject": "my subject (objet)"
	"message": "Mon message (text)"
}

OneDrive (action):

{
	"drive": "le dossier onedrive que tu veux surveiller (vide si tu veux surveiller le root)"
}

Trello (reaction):

{
	"idBoard": "azertytreza",
	"idList": "this format : 61813589d337958524eec066",
	"name": "title",
	"description": "message",
}

Discord (reaction):

exemple d’URL webhook: “https://discord.com/api/webhooks/947890664128016516/4lI_Gz_Fr5gU0pafNv9639HoxlhQWFuhoQ2BsKRugdVpSq8eggIMH2xw3sZsm-hC4ZlV

l’id du webhook: “947890664128016516” (première partie du lien)

token du webhook: “4lI_Gz_Fr5gU0pafNv9639HoxlhQWFuhoQ2BsKRugdVpSq8eggIMH2xw3sZsm-hC4ZlV” (deuxième partie du lien)

{
	"discord": "webhook_url_id",
	"url_token": "webhook_url_token"
}

Steam (action):

{
	"steam": "app_id",
	"players_min": "players_min_for_trigger"
	"players_max": "players_max_for_trigger"
}

Youtube (action):

Rien faut juste que l’user se connecte

Reddit (action):

{
	"subreddit": "r/france",
}

Liste des ID:

Actions:

id: 1, name: 'Received email' id: 2, name: 'Youtube subscribers changed' id: 3, name: 'Subreddit subscriber' id: 4, name: 'Github repo starred' id: 5, name: 'Weather changed' id: 6, name: 'Steam players changed' id: 7, name: 'CryptoCurrency price changed' id: 8, name 'File added'

Reactions:

id: 1, name: 'Send email' id: 2, name: 'Add trello card' id: 3, name: 'Send Git issue' id: 4, name: 'Send Discord message’

Services:

id: 1, name, 'Trello id: 2, name: 'Reddit' id: 3, name: 'Discord' id: 4, name: 'Weather' id: 5, name: 'Crypto' id: 6, name: 'GitHub' id: 7, name: 'Outlook' id: 8, name: 'Steam' id: 9, name: 'Youtube'

About

Web desktop and mobile platform to set up actions and reactions with lot of API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •