mirror of
https://github.com/veops/oneterm.git
synced 2025-10-05 23:37:03 +08:00
feat: add configs
This commit is contained in:
14
.gitignore
vendored
14
.gitignore
vendored
@@ -78,3 +78,17 @@ oneterm-ui/npm-debug.log*
|
||||
oneterm-ui/yarn-debug.log*
|
||||
oneterm-ui/yarn-error.log*
|
||||
oneterm-ui/package-lock.json
|
||||
|
||||
|
||||
## backend
|
||||
|
||||
*.log
|
||||
*.cast
|
||||
vendor/
|
||||
volume
|
||||
|
||||
backend/cmd/ssh/ssh
|
||||
backend/cmd/ssh/config.yaml
|
||||
backend/cmd/ssh/app.log
|
||||
backend/cmd/api/api
|
||||
backend/cmd/api/config.yaml
|
||||
|
140
docker-compose.yaml
Normal file
140
docker-compose.yaml
Normal file
@@ -0,0 +1,140 @@
|
||||
version: "3.0"
|
||||
|
||||
services:
|
||||
oneterm-api:
|
||||
image: oneterm-api:1.24.1
|
||||
container_name: oneterm-api-1
|
||||
volumes:
|
||||
- file-data:/replay
|
||||
- ./docs/api.yaml:/oneterm/config.yaml
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
restart: always
|
||||
networks:
|
||||
new:
|
||||
aliases:
|
||||
- oneterm-api
|
||||
|
||||
oneterm-ssh:
|
||||
image: oneterm-ssh:1.24.26
|
||||
container_name: oneterm-ssh
|
||||
ports:
|
||||
- "12229:12228"
|
||||
restart: always
|
||||
volumes:
|
||||
- ./docs/ssh.yaml:/oneterm/config.yaml
|
||||
- /data/jumper/cmd/ssh/ssh:/ssh
|
||||
command: sleep 10000
|
||||
depends_on:
|
||||
- oneterm-api
|
||||
networks:
|
||||
new:
|
||||
aliases:
|
||||
- oneterm-ssh
|
||||
|
||||
mysql:
|
||||
image: mysql:latest
|
||||
container_name: oneterm-mysql-1
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
MYSQL_ROOT_PASSWORD: '123456'
|
||||
MYSQL_DATABASE: 'oneterm'
|
||||
volumes:
|
||||
- db-data:/var/lib/mysql
|
||||
- ./docs/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf
|
||||
- ./docs/acl.sql:/docker-entrypoint-initdb.d/2-acl.sql
|
||||
- ./docs/api.sql:/docker-entrypoint-initdb.d/3-api.sql
|
||||
- ./docs/create-users.sql:/docker-entrypoint-initdb.d/1-create-users.sql
|
||||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
restart: always
|
||||
networks:
|
||||
new:
|
||||
aliases:
|
||||
- mysql
|
||||
ports:
|
||||
- '23306:3306'
|
||||
|
||||
redis:
|
||||
image: redis:latest
|
||||
container_name: oneterm-redis-1
|
||||
#command: redis-server --requirepass tyrj5QVP9rHs
|
||||
restart: always
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
networks:
|
||||
new:
|
||||
aliases:
|
||||
- redis
|
||||
|
||||
oneterm-ui:
|
||||
image: oneterm-ui:1.24.3
|
||||
container_name: oneterm-ui
|
||||
depends_on:
|
||||
- oneterm-api
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
ONETERM_API_HOST: oneterm-api:8080
|
||||
ACL_API_HOST: acl-api:5000
|
||||
NGINX_PORT: 80
|
||||
volumes:
|
||||
- ./docs/nginx.oneterm.conf.example:/etc/nginx/conf.d/nginx.oneterm.conf.example
|
||||
restart: always
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
envsubst '$$ONETERM_API_HOST $$ACL_API_HOST $$NGINX_PORT' < /etc/nginx/conf.d/nginx.oneterm.conf.example > /etc/nginx/conf.d/oneterm.conf
|
||||
nginx -g 'daemon off;'
|
||||
networks:
|
||||
- new
|
||||
ports:
|
||||
- "8000:80"
|
||||
|
||||
acl-api:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/veops/acl-api:1.1
|
||||
container_name: oneterm-acl-api
|
||||
environment:
|
||||
#TZ: Asia/Shanghai
|
||||
WAIT_HOSTS: mysql:3306, redis:6379
|
||||
volumes:
|
||||
- ./docs/settings.py:/data/app/acl/settings.py
|
||||
- ./docs/app.py:/data/apps/acl/api/lib/perm/acl/app.py
|
||||
- ./docs/.env:/data/apps/acl/.env
|
||||
- ./docs/nginx.oneterm.conf.example:/etc/nginx/conf.d/nginx.oneterm.conf.example
|
||||
restart: always
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
sleep 2
|
||||
flask db-setup
|
||||
flask init-acl
|
||||
flask init-department
|
||||
|
||||
gunicorn --workers=3 autoapp:app -b 0.0.0.0:5000 -D --access-logfile logs/access.log --error-logfile logs/error.log
|
||||
|
||||
celery -A celery_worker.celery worker -E -Q acl_async --logfile=one_acl_async.log --autoscale=2,1 -D
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
networks:
|
||||
new:
|
||||
aliases:
|
||||
- acl-api
|
||||
|
||||
volumes:
|
||||
db-data:
|
||||
driver: local
|
||||
name: oneterm_db-data
|
||||
file-data:
|
||||
driver: local
|
||||
name: oneterm_file-data
|
||||
|
||||
networks:
|
||||
new:
|
||||
driver: bridge
|
||||
name: oneterm_network-1
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.30.0.0/24
|
BIN
docs.tar.gz
Normal file
BIN
docs.tar.gz
Normal file
Binary file not shown.
7
docs/.env
Normal file
7
docs/.env
Normal file
@@ -0,0 +1,7 @@
|
||||
# Environment variable overrides for local development
|
||||
FLASK_APP=autoapp.py
|
||||
FLASK_DEBUG=1
|
||||
FLASK_ENV=development
|
||||
GUNICORN_WORKERS=2
|
||||
LOG_LEVEL=debug
|
||||
SECRET_KEY='xW2FAUfgffjmerTEBXADmURDOQ43ojLN'
|
935
docs/acl.sql
Normal file
935
docs/acl.sql
Normal file
File diff suppressed because one or more lines are too long
217
docs/api.sql
Normal file
217
docs/api.sql
Normal file
@@ -0,0 +1,217 @@
|
||||
-- Active: 1700721140603@@192.168.20.82@53306@oneterm
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS oneterm;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.account(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`account_type` int NOT NULL DEFAULT 0,
|
||||
`account` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`password` TEXT NOT NULL,
|
||||
`pk` TEXT NOT NULL,
|
||||
`phrase` TEXT NOT NULL,
|
||||
`resource_id` INT NOT NULL DEFAULT 0,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name_del` (`name`, `deleted_at`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.asset(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`ci_id` INT NOT NULL DEFAULT 0,
|
||||
`name` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`comment` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`parent_id` INT NOT NULL DEFAULT 0,
|
||||
`ip` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`protocols` JSON NOT NULL,
|
||||
`gateway_id` INT NOT NULL DEFAULT 0,
|
||||
`authorization` JSON NOT NULL,
|
||||
`start` TIMESTAMP,
|
||||
`end` TIMESTAMP,
|
||||
`cmd_ids` JSON NOT NULL,
|
||||
`ranges` JSON NOT NULL,
|
||||
`allow` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`connectable` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`resource_id` INT NOT NULL DEFAULT 0,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name_del` (`name`, `deleted_at`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.command(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`cmds` JSON NOT NULL,
|
||||
`enable` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`resource_id` INT NOT NULL DEFAULT 0,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name_del` (`name`, `deleted_at`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.gateway(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`host` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`port` INT NOT NULL DEFAULT 0,
|
||||
`account_type` int NOT NULL DEFAULT 0,
|
||||
`account` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`password` TEXT NOT NULL,
|
||||
`pk` TEXT NOT NULL,
|
||||
`phrase` TEXT NOT NULL,
|
||||
`resource_id` INT NOT NULL DEFAULT 0,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name_del` (`name`, `deleted_at`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.node(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`comment` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`parent_id` INT NOT NULL DEFAULT 0,
|
||||
`ip` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`protocols` JSON NOT NULL,
|
||||
`gateway_id` INT NOT NULL DEFAULT 0,
|
||||
`authorization` JSON NOT NULL,
|
||||
`start` TIMESTAMP,
|
||||
`end` TIMESTAMP,
|
||||
`cmd_ids` JSON NOT NULL,
|
||||
`ranges` JSON NOT NULL,
|
||||
`allow` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`type_id` INT NOT NULL DEFAULT 0,
|
||||
`mapping` JSON NOT NULL,
|
||||
`filters` TEXT NOT NULL,
|
||||
`enable` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`frequency` DOUBLE NOT NULL DEFAULT 0,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.public_key(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`uid` INT NOT NULL DEFAULT 0,
|
||||
`username` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`name` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`mac` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`pk` TEXT NOT NULL,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `creator_id_name_del` (
|
||||
`creator_id`,
|
||||
`name`,
|
||||
`deleted_at`
|
||||
)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.history(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`remote_ip` VARCHAR(64) NOT NULL DEFAULT 0,
|
||||
`type` VARCHAR(64) NOT NULL DEFAULT 0,
|
||||
`target_id` INT NOT NULL DEFAULT 0,
|
||||
`old` JSON NOT NULL,
|
||||
`new` JSON NOT NULL,
|
||||
`action_type` INT NOT NULL DEFAULT 0,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.session(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`session_type` INT NOT NULL DEFAULT 0,
|
||||
`session_id` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`uid` INT NOT NULL DEFAULT 0,
|
||||
`user_name` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`asset_id` INT NOT NULL DEFAULT 0,
|
||||
`asset_info` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`account_id` INT NOT NULL DEFAULT 0,
|
||||
`account_info` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`gateway_id` INT NOT NULL DEFAULT 0,
|
||||
`gateway_info` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`protocol` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`client_ip` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`status` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`closed_at` TIMESTAMP,
|
||||
PRIMARY KEY(`id`),
|
||||
UNIQUE KEY `session_id` (`session_id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.session_cmd(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`session_id` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`cmd` TEXT NOT NULL,
|
||||
`result` TEXT NOT NULL,
|
||||
`level` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY(`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.authorization(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`asset_id` INT NOT NULL DEFAULT 0,
|
||||
`account_id` INT NOT NULL DEFAULT 0,
|
||||
`resource_id` INT NOT NULL DEFAULT 0,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY(`id`),
|
||||
UNIQUE KEY `asset_account_id_del` (
|
||||
`asset_id`,
|
||||
`account_id`,
|
||||
`deleted_at`
|
||||
)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
CREATE TABLE
|
||||
IF NOT EXISTS oneterm.config(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`timeout` INT NOT NULL,
|
||||
`creator_id` INT NOT NULL DEFAULT 0,
|
||||
`created_at` TIMESTAMP NOT NULL,
|
||||
`updater_id` INT NOT NULL DEFAULT 0,
|
||||
`updated_at` TIMESTAMP NOT NULL,
|
||||
`deleted_at` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY(`id`),
|
||||
UNIQUE KEY `deleted_at` (`deleted_at`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
|
||||
INSERT INTO oneterm.config (timeout) VALUES (7200);
|
58
docs/api.yaml
Normal file
58
docs/api.yaml
Normal file
@@ -0,0 +1,58 @@
|
||||
mode: debug
|
||||
|
||||
http:
|
||||
ip: 0.0.0.0
|
||||
port: 8080
|
||||
|
||||
mysql:
|
||||
ip: mysql
|
||||
port: 3306
|
||||
user: root
|
||||
password: 123456
|
||||
|
||||
redis:
|
||||
addr: redis:6379
|
||||
password: root
|
||||
|
||||
log:
|
||||
level: debug
|
||||
path: app.log
|
||||
format: json
|
||||
maxSize: 1
|
||||
# consoleEnable Whether to enable outputting logs to the console as the sametime
|
||||
consoleEnable: true
|
||||
|
||||
auth:
|
||||
acl:
|
||||
appId: '5867e079dfd1437e9ae07576ab24b391'
|
||||
secretKey: '2qlTA4z@#KyigJLYHGrev?0WD6hjX*8E'
|
||||
url: http://oneterm-ui/api/v1/
|
||||
resourceNames:
|
||||
- key: account
|
||||
value: account
|
||||
- key: asset
|
||||
value: asset
|
||||
- key: command
|
||||
value: command
|
||||
- key: gateway
|
||||
value: gateway
|
||||
- key: authorization
|
||||
value: authorization
|
||||
|
||||
cmdb:
|
||||
url: http://host/api/v0.1
|
||||
|
||||
secretKey: 'xW2FAUfgffjmerTEBXADmURDOQ43ojLN'
|
||||
|
||||
worker:
|
||||
uid: 1
|
||||
rid: 1
|
||||
key: a5704726392648b7b5a15cc39091a166
|
||||
secret: P#Iunzvq7E^6mwMbftgW@KYG28x14*Dy
|
||||
|
||||
sshServer:
|
||||
ip: oneterm-ssh
|
||||
port: 12228
|
||||
account: test
|
||||
password: 135790
|
||||
xtoken: 123456
|
95
docs/app.py
Normal file
95
docs/app.py
Normal file
@@ -0,0 +1,95 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
import datetime
|
||||
import hashlib
|
||||
|
||||
import jwt
|
||||
from flask import abort
|
||||
from flask import current_app
|
||||
|
||||
from api.extensions import db
|
||||
from api.lib.perm.acl.audit import AuditCRUD
|
||||
from api.lib.perm.acl.audit import AuditOperateType
|
||||
from api.lib.perm.acl.audit import AuditScope
|
||||
from api.lib.perm.acl.resp_format import ErrFormat
|
||||
from api.models.acl import App
|
||||
|
||||
|
||||
class AppCRUD(object):
|
||||
cls = App
|
||||
|
||||
@staticmethod
|
||||
def get_all():
|
||||
return App.get_by(to_dict=False)
|
||||
|
||||
@staticmethod
|
||||
def get(app_id):
|
||||
return App.get_by_id(app_id)
|
||||
|
||||
@staticmethod
|
||||
def search(q, page=1, page_size=None):
|
||||
query = db.session.query(App).filter(App.deleted.is_(False))
|
||||
if q:
|
||||
query = query.filter(App.name.ilike('%{0}%'.format(q)))
|
||||
|
||||
numfound = query.count()
|
||||
res = query.offset((page - 1) * page_size).limit(page_size)
|
||||
|
||||
return numfound, res
|
||||
|
||||
@classmethod
|
||||
def add(cls, name, description):
|
||||
App.get_by(name=name) and abort(400, ErrFormat.app_is_ready_existed.format(name))
|
||||
|
||||
from api.lib.perm.acl.user import UserCRUD
|
||||
app_id, secret_key = UserCRUD.gen_key_secret()
|
||||
|
||||
app = App.create(name=name, description=description, app_id=app_id, secret_key=secret_key)
|
||||
AuditCRUD.add_resource_log(app.id, AuditOperateType.create, AuditScope.app, app.id, {}, app.to_dict(), {})
|
||||
return app
|
||||
|
||||
@classmethod
|
||||
def update(cls, _id, **kwargs):
|
||||
kwargs.pop('id', None)
|
||||
|
||||
existed = App.get_by_id(_id) or abort(404, ErrFormat.app_not_found.format("id={}".format(_id)))
|
||||
|
||||
origin = existed.to_dict()
|
||||
existed = existed.update(**kwargs)
|
||||
|
||||
AuditCRUD.add_resource_log(existed.id, AuditOperateType.update,
|
||||
AuditScope.app, existed.id, origin, existed.to_dict(), {})
|
||||
|
||||
return existed
|
||||
|
||||
@classmethod
|
||||
def delete(cls, _id):
|
||||
app = App.get_by_id(_id) or abort(404, ErrFormat.app_not_found.format("id={}".format(_id)))
|
||||
origin = app.to_dict()
|
||||
|
||||
app.soft_delete()
|
||||
|
||||
AuditCRUD.add_resource_log(app.id, AuditOperateType.delete,
|
||||
AuditScope.app, app.id, origin, {}, {})
|
||||
|
||||
@staticmethod
|
||||
def _get_by_key(key):
|
||||
return App.get_by(app_id=key, first=True, to_dict=False)
|
||||
|
||||
@classmethod
|
||||
def gen_token(cls, key, secret):
|
||||
app = cls._get_by_key(key) or abort(404, ErrFormat.app_not_found.format("key={}".format(key)))
|
||||
secret != hashlib.md5(app.secret_key.encode('utf-8')).hexdigest() and abort(403, ErrFormat.app_secret_invalid)
|
||||
|
||||
token = jwt.encode({
|
||||
'sub': app.name,
|
||||
'iat': datetime.datetime.now(),
|
||||
'exp': datetime.datetime.now() + datetime.timedelta(minutes=2 * 60)},
|
||||
current_app.config['SECRET_KEY'])
|
||||
|
||||
print("token:", token)
|
||||
try:
|
||||
print("token1:", token.decode())
|
||||
return token.decode()
|
||||
except AttributeError:
|
||||
return token
|
11
docs/create-users.sql
Normal file
11
docs/create-users.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- create database
|
||||
CREATE DATABASE IF NOT EXISTS acl;
|
||||
CREATE DATABASE IF NOT EXISTS oneterm;
|
||||
|
||||
-- create user
|
||||
CREATE USER 'oneterm'@'%' IDENTIFIED BY '123456';
|
||||
CREATE USER 'acl'@'%' IDENTIFIED BY '123456';
|
||||
|
||||
-- grant privileges
|
||||
GRANT ALL PRIVILEGES ON `oneterm`.* TO 'oneterm'@'%' WITH GRANT OPTION;
|
||||
GRANT ALL PRIVILEGES ON `acl`.* TO 'acl'@'%';
|
51
docs/mysqld.cnf
Normal file
51
docs/mysqld.cnf
Normal file
@@ -0,0 +1,51 @@
|
||||
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License, version 2.0,
|
||||
# as published by the Free Software Foundation.
|
||||
#
|
||||
# This program is also distributed with certain software (including
|
||||
# but not limited to OpenSSL) that is licensed under separate terms,
|
||||
# as designated in a particular file or component or in included license
|
||||
# documentation. The authors of MySQL hereby grant you an additional
|
||||
# permission to link the program and your derivative works with the
|
||||
# separately licensed software that they have included with MySQL.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License, version 2.0, for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
#
|
||||
# The MySQL Server configuration file.
|
||||
#
|
||||
# For explanations see
|
||||
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
|
||||
|
||||
[mysqld]
|
||||
character-set-server = utf8
|
||||
collation-server = utf8_unicode_ci
|
||||
skip-character-set-client-handshake
|
||||
pid-file = /var/run/mysqld/mysqld.pid
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
datadir = /var/lib/mysql
|
||||
default-storage-engine=INNODB
|
||||
# Disabling symbolic-links is recommended to prevent assorted security risks
|
||||
skip-external-locking
|
||||
key_buffer_size=16M
|
||||
max_allowed_packet=4M
|
||||
table_open_cache=64
|
||||
sort_buffer_size=512K
|
||||
net_buffer_length=8K
|
||||
read_buffer_size=256K
|
||||
read_rnd_buffer_size=512K
|
||||
skip-name-resolve
|
||||
max_connections=1000
|
||||
slow_query_log = ON
|
||||
slow_query_log_file = /tmp/mysql_oneterm_slow.log
|
||||
long_query_time = 1
|
||||
log_timestamps = SYSTEM
|
85
docs/nginx.oneterm.conf.example
Normal file
85
docs/nginx.oneterm.conf.example
Normal file
@@ -0,0 +1,85 @@
|
||||
server {
|
||||
listen ${NGINX_PORT};
|
||||
access_log /var/log/nginx/access.oneterm.log;
|
||||
error_log /var/log/nginx/error.oneterm.log;
|
||||
|
||||
add_header 'Access-Control-Allow-Origin' "$http_origin";
|
||||
add_header 'Access-Control-Allow-Credentials' 'true';
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
|
||||
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With';
|
||||
|
||||
gzip on;
|
||||
gzip_comp_level 6;
|
||||
gzip_buffers 16 8k;
|
||||
gzip_http_version 1.1;
|
||||
gzip_min_length 256;
|
||||
gzip_types
|
||||
text/plain
|
||||
text/css
|
||||
text/js
|
||||
text/xml
|
||||
text/javascript
|
||||
application/javascript
|
||||
application/x-javascript
|
||||
application/json
|
||||
application/xml
|
||||
application/rss+xml
|
||||
image/svg+xml;
|
||||
|
||||
root /etc/nginx/html;
|
||||
location / {
|
||||
root /etc/nginx/html;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location ^~ /api/oneterm/v1/connect {
|
||||
proxy_pass http://${ONETERM_API_HOST};
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_read_timeout 7200s;
|
||||
proxy_connect_timeout 7200s;
|
||||
proxy_send_timeout 7200s;
|
||||
}
|
||||
|
||||
location ^~ /api/oneterm {
|
||||
proxy_pass http://${ONETERM_API_HOST};
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
|
||||
|
||||
location ^~ /api/{
|
||||
proxy_pass http://${ACL_API_HOST};
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
location ~* \.(css|js)$ {
|
||||
access_log off;
|
||||
add_header Pragma public;
|
||||
add_header Cache-Control "public, max-age=7776000";
|
||||
#add_header Cache-Control "public,no-cache, max-age=0";
|
||||
add_header X-Asset "yes";
|
||||
}
|
||||
}
|
12
docs/ssh.yaml
Normal file
12
docs/ssh.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
secretKey: 'xW2FAUfgffjmerTEBXADmURDOQ43ojLN'
|
||||
protocols:
|
||||
ssh:
|
||||
api: "http://oneterm-api:8080/api/oneterm/v1"
|
||||
token: "123456"
|
||||
ip: '0.0.0.0'
|
||||
port: 12228
|
||||
webUser: "test"
|
||||
webToken: "135790"
|
||||
privateKeyPath: "/root/.ssh/id_ed25519"
|
||||
|
||||
i18nDir: /oneterm/translate
|
Reference in New Issue
Block a user