Current version: 1.20
Status: Released
Price: $100
Shao - ( 少 in Chinese ) means less
is a micro blogging app like twitter, threads or weibo, but less...
About this project
Status: Released
Price: $100
Shao - ( 少 in Chinese ) means less
is a micro blogging app like twitter, threads or weibo, but less...
About this project
- Backend:
- B4J Server (Windows or Linux VPS is required for production)
- Web API Server v3.10
- Return JSON format response
- RESTful API
- Frontend:
- Velocity Template Engine
- HTML based file
- Responsive design on mobile, tablet and desktop browser
- Database:
- KeyValueStore
- MinimaList library
- File Uploader:
- jquery-uploader with nice image viewer
- Security:
- Basic Authentication for managing clients (web app server)
- JSON Web Token for generating access and refresh tokens
- Cookie (httponly) to store refresh token (cannot be read/write by JavaScript)
- LocalStorage to store access token
- No SQL injection attack concern
- Password hashing
- Random GUID
- Knowledge:
- Basic knowledge in web development is recommended
- Test:
- Build-in API documentation testing page
- Store tokens and Client ID/Secret inside browser
- Bonus libraries:
- Firebase Sending Tool (FCMTool)
- Slugify
- Updated libraries:
- JsonWebToken 2.20
- Velocity 3.00
- ImageScaler 1.01
JSON Web Token (JWT) is used to generate access token and refresh token.
For first time login, these tokens are returned to the client.
Access token is a short live token which will be expired in 30 minutes.
Meanwhile, the refresh token has expiry of 24 hours.
The duration can be set to shorter during development or longer period depending on developer's consideration such as for mobile app use.
When the access token has expired, the client need to request for a new access token.
This is done by a JavaScript function by sending the refresh token kept inside the browser cookie.
To make it more secure, the cookie is httponly and only writable from the backend.
Each API or Route can be protected using a server filter (JWTAuthFilter).
When an API path is added into this filter, an access token is required to send in the Authentication header as Bearer.
The refresh token id is stored in the database and can be revoked by Administrator.
For first time login, these tokens are returned to the client.
Access token is a short live token which will be expired in 30 minutes.
Meanwhile, the refresh token has expiry of 24 hours.
The duration can be set to shorter during development or longer period depending on developer's consideration such as for mobile app use.
When the access token has expired, the client need to request for a new access token.
This is done by a JavaScript function by sending the refresh token kept inside the browser cookie.
To make it more secure, the cookie is httponly and only writable from the backend.
Each API or Route can be protected using a server filter (JWTAuthFilter).
When an API path is added into this filter, an access token is required to send in the Authentication header as Bearer.
The refresh token id is stored in the database and can be revoked by Administrator.
The mascot is a sloth (I wish I can draw better), represents a relax and slow life...
It is showing a smiling facial expression similar to the Chinese word less.
It is showing a smiling facial expression similar to the Chinese word less.
Life is short, don't write so long and let people take so much time to read.
Life is sweet, a little emoji can brightens up one's day.
Life is simple, don't complicate an app (social blogging platform) with advanced features.
Life is stupid, it is funny when we recall the past.
Life is selfish, don't care so much what others say about you or not respond to you.
Life is a story, it begins and ends then a new one will start.
Life is having a secret, sometimes you just want to keep it only with some of your mates.
Life is sweet, a little emoji can brightens up one's day.
Life is simple, don't complicate an app (social blogging platform) with advanced features.
Life is stupid, it is funny when we recall the past.
Life is selfish, don't care so much what others say about you or not respond to you.
Life is a story, it begins and ends then a new one will start.
Life is having a secret, sometimes you just want to keep it only with some of your mates.
Attachments
Last edited: