Skip to content

Commit

Permalink
Merge pull request #195 from bigcapitalhq/api-rate-env-vars
Browse files Browse the repository at this point in the history
fix: expose the rate limit to the env variables
  • Loading branch information
abouolia authored Jul 23, 2023
2 parents d84568e + 8b0feb9 commit efad38f
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 7 deletions.
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@ AGENDASH_AUTH_PASSWORD=123123
SIGNUP_DISABLED=false
SIGNUP_ALLOWED_DOMAINS=
SIGNUP_ALLOWED_EMAILS=

# API rate limit (points,duration,block duration).
API_RATE_LIMIT=120,60,600
11 changes: 7 additions & 4 deletions packages/server/src/config/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import dotenv from 'dotenv';
import path from 'path';
import { toInteger } from 'lodash';
import { castCommaListEnvVarToArray, parseBoolean } from '@/utils';

dotenv.config();

const API_RATE_LIMIT = process.env.API_RATE_LIMIT?.split(',') || [];

module.exports = {
/**
* Your favorite port
Expand Down Expand Up @@ -97,7 +100,7 @@ module.exports = {
jwtSecret: process.env.JWT_SECRET,

/**
*
*
*/
resetPasswordSeconds: 600,

Expand Down Expand Up @@ -130,9 +133,9 @@ module.exports = {
blockDuration: 60 * 15,
},
requests: {
points: 60,
duration: 60,
blockDuration: 60 * 10,
points: API_RATE_LIMIT[0] ? toInteger(API_RATE_LIMIT[0]) : 120,
duration: API_RATE_LIMIT[1] ? toInteger(API_RATE_LIMIT[1]) : 60,
blockDuration: API_RATE_LIMIT[2] ? toInteger(API_RATE_LIMIT[2]) : 60 * 10,
},
},

Expand Down
13 changes: 13 additions & 0 deletions packages/webapp/src/containers/GlobalErrors/GlobalErrors.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { compose } from '@/utils';

let toastKeySessionExpired;
let toastKeySomethingWrong;
let toastTooManyRequests;

function GlobalErrors({
// #withGlobalErrors
Expand Down Expand Up @@ -41,6 +42,18 @@ function GlobalErrors({
toastKeySomethingWrong,
);
}
if (globalErrors.too_many_requests) {
toastTooManyRequests = AppToaster.show(
{
message: intl.get('global_error.too_many_requests'),
intent: Intent.DANGER,
onDismiss: () => {
globalErrorsSet({ too_many_requests: false });
},
},
toastTooManyRequests,
);
}
if (globalErrors.access_denied) {
toastKeySomethingWrong = AppToaster.show(
{
Expand Down
3 changes: 3 additions & 0 deletions packages/webapp/src/hooks/useRequest.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ export default function useApiRequest() {
if (status === 403) {
setGlobalErrors({ access_denied: true });
}
if (status === 429) {
setGlobalErrors({ too_many_requests: true });
}
if (status === 400) {
const lockedError = data.errors.find(
(error) => error.type === 'TRANSACTIONS_DATE_LOCKED',
Expand Down
3 changes: 2 additions & 1 deletion packages/webapp/src/lang/en/index.json
Original file line number Diff line number Diff line change
Expand Up @@ -2292,5 +2292,6 @@
"sidebar.projects": "Projects",
"sidebar.new_project": "New Project",
"sidebar.new_time_entry": "New Time Entry",
"sidebar.project_profitability_summary": "Project Profitability Summary"
"sidebar.project_profitability_summary": "Project Profitability Summary",
"global_error.too_many_requests": "Too many requests"
}
6 changes: 4 additions & 2 deletions packages/webapp/src/style/components/BigcapitalLoading.scss
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
@import '@/style/variables.scss';

.bigcapital-loading {
height: 100%;
width: 100%;
position: fixed;
display: flex;
background: #fff;
z-index: 999999;
z-index: $zindex-dashboard-splash-screen;

.center {
width: auto;
Expand All @@ -18,4 +20,4 @@
opacity: 0.85;
display: none;
}
}
}
4 changes: 4 additions & 0 deletions packages/webapp/src/style/variables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,7 @@ $form-check-input-checked-color: #fff;
$form-check-input-checked-bg-color: $blue1;
$form-check-input-checked-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 16 16' enable-background='new 0 0 16 16' xml:space='preserve'><g id='small_tick_1_'><g><path fill='#{$form-check-input-checked-color}' fill-rule='evenodd' clip-rule='evenodd' d='M12,5c-0.28,0-0.53,0.11-0.71,0.29L7,9.59L4.71,7.29C4.53,7.11,4.28,7,4,7C3.45,7,3,7.45,3,8c0,0.28,0.11,0.53,0.29,0.71l3,3C6.47,11.89,6.72,12,7,12s0.53-0.11,0.71-0.29l5-5C12.89,6.53,13,6.28,13,6C13,5.45,12.55,5,12,5z'/></g></g></svg>") !default;
$form-check-input-indeterminate-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 16 16' enable-background='new 0 0 16 16' xml:space='preserve'><g id='small_tick_1_'><g><path fill='#{$form-check-input-checked-color}' fill-rule='evenodd' clip-rule='evenodd' d='M11,7H5C4.45,7,4,7.45,4,8c0,0.55,0.45,1,1,1h6c0.55,0,1-0.45,1-1C12,7.45,11.55,7,11,7z'/></g></g></svg>") !default;

// z-indexs
$zindex-dashboard-splash-screen: 39;
$zindex-toast: 40;

0 comments on commit efad38f

Please sign in to comment.