Răsfoiți Sursa

Доработка для создания зеркальных ссылок.

Vieraw 1 lună în urmă
părinte
comite
cd91781e71

+ 49 - 7
docker-compose.yml

@@ -2,13 +2,55 @@ services:
   server:
     build:
       context: .
+    container_name: short-server
     volumes:
-       - db_data_sqlite:/var/lib/kutt
-       - custom:/kutt/custom
+      - custom:/kutt/custom
     environment:
-      DB_FILENAME: "/var/lib/kutt/data.sqlite"
-    ports:
-      - 3000:3000
+        DB_CLIENT: pg
+        DB_HOST: postgres
+        DB_PORT: 5432
+        REDIS_ENABLED: true
+        REDIS_HOST: redis
+        REDIS_PORT: 6379
+    depends_on:
+      postgres:
+        condition: service_healthy
+      redis:
+        condition: service_started
+    networks:
+      nginx_net:
+      short_net:
+        
+  postgres:
+    image: postgres
+    container_name: short-postgres
+    restart: always
+    user: ${DB_USER}
+    volumes:
+      - db_data_pg:/var/lib/postgresql/data
+    environment:
+      POSTGRES_DB: ${DB_NAME}
+      POSTGRES_PASSWORD: ${DB_PASSWORD} 
+    healthcheck:
+      test: [ "CMD", "pg_isready" ]
+      interval: 10s
+      timeout: 5s
+      retries: 5
+    networks:
+      short_net:
+      
+  redis:
+    image: redis:alpine
+    container_name: short-redis
+    restart: always
+    networks:
+      short_net:
+      
 volumes:
-  db_data_sqlite:
-  custom:
+  db_data_pg:
+  custom:
+  
+networks:
+  short_net:
+  nginx_net:
+    external: true

+ 14 - 1
server/handlers/locals.handler.js

@@ -36,7 +36,20 @@ function config(req, res, next) {
 async function user(req, res, next) {
   const user = req.user;
   res.locals.user = user;
-  res.locals.domains = user && (await query.domain.get({ user_id: user.id })).map(utils.sanitize.domain);
+
+  if (user) {
+    const userDomains = await query.domain.get({ user_id: user.id });
+    const systemDomains = await query.domain.get({ user_id: null });
+    const allDomains = [...systemDomains, ...userDomains];
+    const uniqueDomains = allDomains.filter((domain, index, self) =>
+      index === self.findIndex((d) => d.address === domain.address)
+    );
+    
+    res.locals.domains = uniqueDomains.map(utils.sanitize.domain);
+  } else {
+    res.locals.domains = []; 
+  }
+
   next();
 }
 

+ 8 - 2
server/handlers/users.handler.js

@@ -6,12 +6,18 @@ const mail = require("../mail");
 const env = require("../env");
 
 async function get(req, res) {
-  const domains = await query.domain.get({ user_id: req.user.id });
+  //const domains = await query.domain.get({ user_id: req.user.id });
+  const userDomains = await query.domain.get({ user_id: req.user.id });
+  const systemDomains = await query.domain.get({ user_id: null });
+  const allDomains = [{'address': env.DEFAULT_DOMAIN}, ...systemDomains, ...userDomains];
+  const uniqueDomains = allDomains.filter((domain, index, self) =>
+    index === self.findIndex((d) => d.address === domain.address)
+  );
 
   const data = {
     apikey: req.user.apikey,
     email: req.user.email,
-    domains: domains.map(utils.sanitize.domain)
+    domains: uniqueDomains.map(utils.sanitize.domain)
   };
 
   return res.status(200).send(data);

+ 17 - 3
server/handlers/validators.handler.js

@@ -86,13 +86,27 @@ const createLink = [
     .withMessage("Domain should be string.")
     .customSanitizer(value => value.toLowerCase())
     .custom(async (address, { req }) => {
-      const domain = await query.domain.find({
+      let domain = await query.domain.find({
         address,
         user_id: req.user.id
       });
-      req.body.fetched_domain = domain || null;
 
-      if (!domain) return Promise.reject();
+      if (!domain) {
+        domain = await query.domain.find({
+          address,
+          user_id: null
+        });
+      }
+
+      if (!domain) {
+        return Promise.reject();
+      }
+
+      if (domain.banned) {
+        return Promise.reject();
+      }
+	  
+      req.body.fetched_domain = domain;
     })
     .withMessage("You can't use this domain.")
 ];