- Project Overview
- Technologies Used
- API Endpoints
- Security Measures
- Environment Variables
- Installation and Setup
- Contributing
- License
ShipConnect is a social networking platform developed using Node.js and MongoDB. It features user authentication with diverse roles, multimedia content sharing, community and event management, social interactions (comments, likes, friend requests), real-time instant messaging, and a personalized news feed. The application emphasizes security, implementing two-factor authentication, protection against common web vulnerabilities, and privacy controls for user content.
- Express: A Node.js framework for building web applications.
- Mongoose: A library for modeling MongoDB objects in Node.js.
- bcrypt: For hashing passwords.
- jsonwebtoken: For JWT-based authentication.
- passport and passport-google-oauth20: For Google authentication.
- dotenv: For loading environment variables from a .env file.
- express-session and connect-mongo: For handling sessions and storing them in MongoDB.
- csurf: For CSRF protection.
- cookie-parser: For handling cookies.
- helmet: For enhancing HTTP header security.
- express-rate-limit: For limiting the number of requests to prevent brute force attacks.
- express-mongo-sanitize: For sanitizing MongoDB data and preventing injections.
- xss-clean: For preventing XSS attacks by cleaning user inputs.
- multer: For handling file uploads.
- nodemailer: For sending emails.
- qrcode: For generating QR codes.
- socket.io and socket.io-client: For real-time functionalities like chat.
- cloudinary: For handling multimedia file uploads and storage.
- speakeasy: For two-factor authentication (2FA).
- GET /api/auth/csrf-token: Retrieve the CSRF token.
- POST /api/auth/signup: Register a new user.
- POST /api/auth/login: Login a user.
- POST /api/auth/logout: Logout a user.
- POST /api/auth/generateTwoFactor: Generate a two-factor authentication code.
- POST /api/auth/verifyTwoFactor: Verify a two-factor authentication code.
- GET /api/auth/google: Initiate Google OAuth login.
- GET /api/auth/google/callback: Handle Google OAuth callback.
- POST /api/auth/forgotpassword: Initiate password reset.
- PUT /api/auth/resetpassword/:resettoken -Reset a password.
- GET /api/auth/me: Retrieve the authenticated user's details.
- POST /api/posts/: Create a new post.
- GET /api/posts/: Retrieve all posts.
- POST /api/posts/:postId/share -Share a specific post.
- GET /api/posts/news-feed: Retrieve a personalized news feed.
- PATCH /api/posts/:postId/privacy: -Update the privacy settings of a post.
- DELETE /api/posts/:postId -Delete a post.
- PUT /api/posts/:postId -Update a post.
- GET /api/users/profile: Retrieve user profile information.
- POST /api/users/profile: Update user profile information.
- GET /api/users/search: Search for users.
- DELETE /api/users/account: Delete a user account.
- POST /api/comments/: Add a comment to a post.
- POST /api/comments/reel: Add a comment to a reel.
- GET /api/comments/:postId -Retrieve all comments on a specific post.
- PUT /api/comments/:commentId -Update a specific comment.
- DELETE /api/comments/:commentId -Delete a specific comment.
- POST /api/likes/post/:postId -Like a specific post.
- POST /api/likes/reel/:reelId -Like a specific reel.
- POST /api/likes/story/:storyId -Like a specific story.
- POST /api/likes/comment/:commentId -Like a specific comment.
- DELETE /api/likes/:type/:id Remove a like from a specific item
- POST /api/friends/request: Send a friend request.
- POST /api/friends/respond: Respond to a friend request.
- GET /api/friends/requests: Retrieve all friend requests.
- DELETE /api/friends/:friendId -Remove a friend.
- POST /api/stories/: Create a new story.
- GET /api/stories/: Retrieve all stories.
- PUT /api/stories/:storyId -Update a story.
- DELETE /api/stories/:storyId -Delete a story.
- PUT /api/stories/:storyId/privacy -Update the privacy settings of a story.
- POST /api/reels/: Create a new reel.
- GET /api/reels/: Retrieve all reels.
- PUT /api/reels/:reelId -Update a reel.
- DELETE /api/reels/:reelId -Delete a reel.
- PUT /api/reels/:reelId/privacy -Update the privacy settings of a reel.
- POST /api/communities/: Create a new community.
- GET /api/communities/public: Retrieve all public communities.
- POST /api/communities/join/:id -Join a community.
- POST /api/communities/approve/:id/:userId -Approve a user to join a community.
- POST /api/communities/:id/moderators -Add a moderator to a community.
- PUT /api/communities/:id -Update community details.
- DELETE /api/communities/:id -Delete a community.
- POST /api/events/:communityId -Create a new event within a community.
- GET /api/events/:communityId -Retrieve all events within a community.
- PUT /api/events/:id -Update an event.
- DELETE /api/events/:id -Delete an event.
- GET /api/events/feed/:communityId -Retrieve a community's event feed.
- GET /api/chat/messages: Retrieve all messages with a friend.
- POST /api/chat/messages/:friendId Send a message to a friend.
-
PUT /api/admin/roles: Update user roles.
To test the API endpoints, you can use Postman or any other API testing tool. Make sure to include the JWT token-login in the header for protected routes, and csrf-token.
Example:
Authorization:
<your_login_token>
X-CSRF-Token:<your_csrf_token>
ShipConnect incorporates several security measures to protect user data and ensure safe interactions:
- Two-Factor Authentication (2FA): Users can enable 2FA for an added layer of security.
- CSRF Protection: The application uses CSRF tokens to protect against cross-site request forgery.
- XSS Protection: User inputs are sanitized to prevent cross-site scripting (XSS) attacks.
- Password Hashing: User passwords are securely hashed using bcrypt before being stored.
- Rate Limiting: The application limits the number of requests to protect against brute force attacks.
- Data Sanitization: MongoDB data is sanitized to prevent injection attacks.
The following environment variables are required to run ShipConnect:
NODE_ENV: Application environment (development, production).
PORT: Port number the application will run on.
MONGO_URI: MongoDB connection string.
JWT_SECRET: Secret key for JWT.
GOOGLE_CLIENT_ID: Google OAuth client ID.
GOOGLE_CLIENT_SECRET: Google OAuth client secret.
EMAIL_SERVICE: Email service provider.
EMAIL_USERNAME: Email service username.
EMAIL_PASSWORD: Email service password.
CLOUDINARY_CLOUD_NAME: Cloudinary cloud name.
CLOUDINARY_API_KEY: Cloudinary API key.
CLOUDINARY_API_SECRET: Cloudinary API secret.
QR_CODE_SECRET: Secret key for generating QR codes.
RATE_LIMIT_MAX: Maximum number of requests allowed within the defined time window
RATE_LIMIT_WINDOW_MS: Time window in milliseconds for rate limiting (3600000 ms = 1 hour)
BODY_LIMIT: Size limit for JSON and URL-encoded request bodies
SESSION_MAX_AGE: Maximum session lifetime in milliseconds (604800000 ms = 7 days)
-
Clone the repository:
-
Install dependencies:
npm install
-
Create a .env file in the root directory.
Add the environment variables as listed above.
-
Start the server:
npm start
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License with an Attribution Clause. See the LICENSE file for details.