Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build(deps-dev): bump express from 4.17.1 to 4.21.2 in /artifacts-ui #324

Open
wants to merge 122 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
c206c4e
feat: init model and db
Oct 27, 2024
b6fa4ba
feat: add variable app for diff conf template
Oct 31, 2024
ac08e48
feat: add _addtional_create
Oct 31, 2024
88c7326
feat: add soft delete support
Oct 31, 2024
b8bdb3a
feat: clean code
Oct 31, 2024
d3ddcee
Merge remote-tracking branch 'origin/dev' into dev_init_db
Nov 1, 2024
35306a8
feat: add _addtional_list for role filter
Nov 1, 2024
5ccd821
feat: add artifacts.diff-conf-templates and auth app
Nov 4, 2024
5c31d04
feat: add artifacts.diff-conf-templates and auth app
Nov 4, 2024
649518b
feat: add proxy mode to platform
Nov 4, 2024
11c61a7
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
fa50374
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
997536a
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
c3155ee
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
cf2dbf0
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
cec5103
feat: add db config
Nov 7, 2024
8d597ca
feat: add db config
Nov 7, 2024
1050f6f
feat: add db config
Nov 7, 2024
7f77cf0
feat: add db config
Nov 7, 2024
bcaab64
feat: add db config
Nov 7, 2024
ff8161f
feat: add db config
Nov 7, 2024
27fb8e9
refactor(auth): 移除身份认证中的 proxy 模式
Nov 19, 2024
90c091e
feat: init model and db
Oct 27, 2024
a9068ee
feat: add variable app for diff conf template
Oct 31, 2024
b4d5ccd
feat: add _addtional_create
Oct 31, 2024
c59605b
feat: add soft delete support
Oct 31, 2024
0b2a910
feat: clean code
Oct 31, 2024
f3aa9d1
feat: add _addtional_list for role filter
Nov 1, 2024
065b945
feat: add artifacts.diff-conf-templates and auth app
Nov 4, 2024
a8f48b8
feat: add artifacts.diff-conf-templates and auth app
Nov 4, 2024
75a79a5
feat: add proxy mode to platform
Nov 4, 2024
19b8651
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
2dfe558
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
e215b87
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
cd61ea0
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
296b533
feat: add /artifacts/platform/v1/users/roles
Nov 6, 2024
8e7d51c
feat: add db config
Nov 7, 2024
fcfbe23
feat: add db config
Nov 7, 2024
563c854
feat: add db config
Nov 7, 2024
5290276
feat: add db config
Nov 7, 2024
fe938cb
feat: add db config
Nov 7, 2024
2c2bbaf
feat: add db config
Nov 7, 2024
7a0c065
refactor(auth): 移除身份认证中的 proxy 模式
Nov 19, 2024
07bf9de
Merge remote-tracking branch 'origin/dev_init_db' into dev_init_db
Nov 19, 2024
c20963d
Merge branch 'dev' into dev_init_db
pobu168 Nov 19, 2024
07ad52f
refactor(artifacts-corepy): 调整变量类型字段属性,添加_addtional_count
Nov 19, 2024
03a472e
refactor(artifacts-corepy): 调整变量类型字段属性,添加_addtional_count
Nov 19, 2024
143c8bf
feat(artifacts-corepy): 更新 diff_conf_template 表结构
Nov 20, 2024
187f3eb
feat(artifacts-corepy): 更新差异配置模板功能
Nov 20, 2024
67a77be
feat(artifacts-corepy): 更新差异配置模板功能
Nov 20, 2024
31877e6
add: template mgmt
pobu168 Nov 21, 2024
9bc5a00
add: variable test
pobu168 Nov 25, 2024
da4c618
Merge branch 'dev_init_db' of github.com:WeBankPartners/wecube-plugin…
pobu168 Nov 25, 2024
a14d5fa
update: use template
pobu168 Nov 26, 2024
c0460e9
update: diff variable template mgmt
pobu168 Nov 26, 2024
45c7f57
update: remove table high row
pobu168 Nov 28, 2024
c9c514f
update: confirm for variable change
pobu168 Nov 29, 2024
a2df70f
feat(artifacts-corepy): add render-variable-values
Dec 3, 2024
9fe33f9
feat(artifacts-corepy): 差异化变量试算查询
Dec 3, 2024
f0bb140
feat(artifacts-corepy): 差异化变量试算查询
Dec 3, 2024
7af83f9
update: validate for rule
pobu168 Dec 4, 2024
7ca1174
Merge branch 'dev_init_db' of github.com:WeBankPartners/wecube-plugin…
pobu168 Dec 4, 2024
f6bae13
feat(artifacts-corepy): 差异化变量试算查询调试
Dec 4, 2024
b7a8660
feat(artifacts-corepy): 差异化变量试算查询调试
Dec 4, 2024
bfb43ab
feat(artifacts-corepy): 差异化变量试算查询调试
Dec 4, 2024
8a9597e
feat(artifacts-corepy): 差异化变量试算查询调试
Dec 4, 2024
4b08b58
feat(artifacts-corepy): remove soft delete
Dec 4, 2024
07770ef
feat(artifacts-corepy): remove soft delete
Dec 4, 2024
275c768
feat(artifacts-corepy): 应用实例列表
Dec 4, 2024
6b724de
feat(artifacts-corepy): add UnitDesignApps
Dec 5, 2024
c6bfae9
feat(artifacts-corepy): add UnitDesignApps
Dec 5, 2024
14b1d0f
feat(artifacts-corepy): add UnitDesignApps
Dec 5, 2024
c9ca926
debug: add UnitDesignApps
Dec 5, 2024
64b49a8
debug: add UnitDesignApps
Dec 5, 2024
89a743a
debug: add ci_filter_app_expression
Dec 5, 2024
ed1b5c5
debug: add ci_filter_app_expression
Dec 5, 2024
c60ce97
debug: add ci_filter_app_expression
Dec 5, 2024
a11ffaa
fix: page warning
pobu168 Dec 5, 2024
9b2ffcc
Merge branch 'dev_init_db' of github.com:WeBankPartners/wecube-plugin…
pobu168 Dec 5, 2024
d5cbd0b
debug: add db_filter expression
Dec 6, 2024
26c81a1
fix: clean code
Dec 6, 2024
aca9899
fix: update ARTIFACTS_DB_FILTER_EXPRESSION
Dec 6, 2024
3ddd417
add: trial calc
pobu168 Dec 6, 2024
5e34dcf
Merge branch 'dev_init_db' of github.com:WeBankPartners/wecube-plugin…
pobu168 Dec 6, 2024
843ab8f
update _analyze_package_attrs adding file to diff_conf_file only when…
Dec 6, 2024
bf5180e
Merge branch 'dev_trial_calculation' into dev_init_db
pobu168 Dec 6, 2024
568a3c3
Merge branch 'dev_init_db' of github.com:WeBankPartners/wecube-plugin…
pobu168 Dec 6, 2024
89afbb5
update: variable rule config
pobu168 Dec 9, 2024
2d9af1e
update: placeholder
pobu168 Dec 9, 2024
89abb58
ignore package detail error when baseline pkg not found
Dec 9, 2024
b8a69c1
Merge branch 'dev_init_db' of https://github.com/WeBankPartners/wecub…
Dec 9, 2024
8405408
add: template edit entry
pobu168 Dec 10, 2024
f415d8a
add: tip for diff file
pobu168 Dec 11, 2024
db0078e
add: filter empty template
pobu168 Dec 11, 2024
23b8959
update: server.js config
pobu168 Dec 11, 2024
45e0379
fix update_file_variable
Dec 11, 2024
5973b09
add: hide entry for image
pobu168 Dec 11, 2024
33b2c9f
Merge branch 'dev_init_db' of github.com:WeBankPartners/wecube-plugin…
pobu168 Dec 11, 2024
0a25653
update: filter for diff template
pobu168 Dec 12, 2024
bbca530
add: variable type for diff template
pobu168 Dec 12, 2024
d5a6598
add: default value for variable type
pobu168 Dec 12, 2024
36f1152
update: table style
pobu168 Dec 13, 2024
f07a254
feat: .env.local config
iheqi Dec 26, 2024
beb1ba7
feat: select system-design & tips
iheqi Dec 27, 2024
98fbae7
update: empty data test
pobu168 Dec 30, 2024
c3a13e0
update: code cleanup
pobu168 Dec 30, 2024
eeb6582
update: .gitignore
pobu168 Dec 30, 2024
1bcbc79
update: diff variable template
pobu168 Dec 31, 2024
8e607a6
fix: plugin error code 400 to 200 40005,
Jan 1, 2025
cf9d85e
fix: fix update_time and create_time
Jan 2, 2025
1dd5840
fix: fix update_time and create_time
Jan 2, 2025
6ef7b0a
update: diff variable template config
pobu168 Jan 2, 2025
c245f83
fix: fix exist error msg
Jan 2, 2025
6ff3fd5
Merge remote-tracking branch 'origin/fix_dev_init_db' into dev
Jan 2, 2025
a02916a
update: tip for no data
pobu168 Jan 2, 2025
c82c585
Merge branch 'dev' of github.com:WeBankPartners/wecube-plugins-artifa…
pobu168 Jan 2, 2025
7ab65bd
update: diff variable template
pobu168 Jan 3, 2025
80ff29f
fix: zoom icon style
pobu168 Jan 3, 2025
73bddda
update: template add
pobu168 Jan 3, 2025
f5d56c3
update: style
pobu168 Jan 3, 2025
f48c5f1
Merge pull request #317 from WeBankPartners/dev
pobu168 Jan 17, 2025
85c168c
build(deps-dev): bump express from 4.17.1 to 4.21.2 in /artifacts-ui
dependabot[bot] Jan 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ yarn-debug.log*
yarn-error.log*
/*/target/
/*/dist/
/*/.env


*.pyc
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ package_py: image_py
mkdir -p package
cd package && docker save $(project_name):$(version) -o image.tar
cd package && cp ../register.xml .
cd package && cp ../init.sql ./init.sql
cd package && sed -i "s~{{REPOSITORY}}~$(project_name)~g" register.xml
cd package && sed -i "s~{{VERSION}}~$(version)~g" register.xml
cd artifacts-ui/dist && zip -r ui.zip .
Expand Down
4 changes: 4 additions & 0 deletions artifacts-corepy/artifacts_corepy/apps/auth/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import

from artifacts_corepy.apps.auth import route
195 changes: 195 additions & 0 deletions artifacts-corepy/artifacts_corepy/apps/auth/api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import

import logging
import time

import jwt
from talos.core import config, utils
from talos.core.i18n import _
from talos.core import exceptions as core_ex

from artifacts_corepy.common import exceptions
from artifacts_corepy.common import utils as terminal_utils
from artifacts_corepy.db import resource as db_resource

CONF = config.CONF
LOG = logging.getLogger(__name__)


class SysUser(db_resource.SysUser):
def generate_tokens(self, rid):
roles = self.get_roles(rid)
tokens = []
current_time = int(time.time() * 1000)
access_token_iat = int(current_time / 1000)
access_token_exp = access_token_iat + CONF.access_token_exipres
refresh_token_exp = access_token_iat + CONF.refresh_token_exipres
decoded_secret = terminal_utils.b64decode_key(CONF.jwt_signing_key)
tokens.append({
"expiration": str(current_time + CONF.access_token_exipres * 1000),
"token": jwt.encode({
"sub": rid,
"iat": access_token_iat,
"type": "accessToken",
"clientType": "USER",
"exp": access_token_exp,
"authority": "[" + ','.join([r['id'] for r in roles]) + "]"
}, decoded_secret, "HS512").decode(),
"tokenType": "accessToken"
})
tokens.append({
"expiration": str(current_time + CONF.refresh_token_exipres * 1000),
"token": jwt.encode({
"sub": rid,
"iat": access_token_iat,
"type": "refreshToken",
"clientType": "USER",
"exp": refresh_token_exp
}, decoded_secret, "HS512",
).decode(),
"tokenType": "refreshToken"
})
return tokens

def login(self, username, password):
with self.get_session():
if self.check_password(username, password):
return self.generate_tokens(username)
else:
raise core_ex.LoginError()

def refresh(self, token):
with self.get_session():
try:
decoded_secret = terminal_utils.b64decode_key(CONF.jwt_signing_key)
info = jwt.decode(token, key=decoded_secret, verify=True)
if info['type'] != 'refreshToken':
raise core_ex.AuthError()
return self.generate_tokens(info['sub'])
except jwt.exceptions.ExpiredSignatureError:
raise core_ex.AuthError()
except jwt.exceptions.DecodeError:
raise core_ex.AuthError()

def get_menus(self, rid):
menus = []
exists = {}
roles = self.get_roles(rid)
for role in roles:
for menu in role['menus']:
if menu['is_active'] == 'yes' and menu['id'] not in exists:
menus.append(menu)
exists[menu['id']] = True
return menus

def get_roles(self, rid):
ref = self.get(rid)
if ref:
return ref['roles']
return []

def create(self, resource, validate=True, detail=True):
resource['salt'] = utils.generate_salt(16)
password = utils.generate_salt(16)
resource['password'] = utils.encrypt_password(password, resource['salt'])
ref = super().create(resource, validate=validate, detail=detail)
ref['password'] = password
return ref

def reset_password(self, rid, password=None):
resource = {}
resource['salt'] = utils.generate_salt(16)
password = password or utils.generate_salt(16)
resource['password'] = utils.encrypt_password(password, resource['salt'])
before_update, after_update = self.update(rid, resource, validate=False)
if after_update:
after_update['password'] = password
return after_update

def check_password(self, rid, password):
refs = self.list_internal({'id': rid})
if refs:
return utils.check_password(refs[0]['password'], password, refs[0]['salt'])
return False

def update_password(self, rid, password, origin_password):
if not password:
raise exceptions.PluginError(message=_('unabled to set empty password'))
if self.check_password(rid, origin_password):
resource = {}
resource['salt'] = utils.generate_salt(16)
password = password or utils.generate_salt(16)
resource['password'] = utils.encrypt_password(password, resource['salt'])
before_update, after_update = self.update(rid, resource, validate=False)
return after_update
else:
raise exceptions.PluginError(message=_('faild to set new password: incorrect origin password'))

def delete(self, rid, filters=None, detail=True):
refs = self.list({'id': rid})
if refs and refs[0]['is_system'] == 'yes':
raise exceptions.PluginError(message=_('unable to delete system user'))
with self.transaction() as session:
db_resource.SysRoleUser(transaction=session).delete_all({'user_id': rid})
return super().delete(rid, filters=filters, detail=detail)


class SysRole(db_resource.SysRole):
def get_users(self, rid):
ref = self.get(rid)
if ref:
return ref['users']
return []

def _update_intersect_refs(self, rid, self_field, ref_field, resource_type, refs, session):
old_refs = [result[ref_field] for result in resource_type(session=session).list(filters={self_field: rid})]
create_refs = list(set(refs) - set(old_refs))
create_refs.sort(key=refs.index)
delete_refs = set(old_refs) - set(refs)
if delete_refs:
resource_type(transaction=session).delete_all(filters={
self_field: rid,
ref_field: {
'in': list(delete_refs)
}
})
for ref in create_refs:
new_ref = {}
new_ref[self_field] = rid
new_ref[ref_field] = ref
resource_type(transaction=session).create(new_ref)

def set_users(self, rid, users):
with self.transaction() as session:
self._update_intersect_refs(rid, 'role_id', 'user_id', db_resource.SysRoleUser, users, session)
return self.get_users(rid)

def get_menus(self, rid, is_active=True):
ref = self.get(rid)
if ref:
if is_active:
return [menu for menu in ref['menus'] if menu['is_active'] == 'yes']
else:
return ref['menus']
return []

def set_menus(self, rid, menus):
with self.transaction() as session:
self._update_intersect_refs(rid, 'role_id', 'menu_id', db_resource.SysRoleMenu, menus, session)
return self.get_menus(rid, is_active=False)

def delete(self, rid, filters=None, detail=True):
refs = self.list({'id': rid})
if refs and refs[0]['is_system'] == 'yes':
raise exceptions.PluginError(message=_('unable to delete system role'))
with self.transaction() as session:
bindings = db_resource.SysRoleUser(transaction=session).list({'role_id': rid})
if len(bindings) > 0:
users = ','.join([bind['user_id'] for bind in bindings])
raise exceptions.PluginError(message=_('role binds with %(users)s') % {'users': users})
return super().delete(rid, filters=filters, detail=detail)


class SysMenu(db_resource.SysMenu):
pass
130 changes: 130 additions & 0 deletions artifacts-corepy/artifacts_corepy/apps/auth/controller.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import

from talos.core.i18n import _
from talos.utils.scoped_globals import GLOBALS

from artifacts_corepy.common import exceptions
from artifacts_corepy.common.mixin import Controller, CollectionController as Collection, ItemController as Item
from artifacts_corepy.apps.auth import api as auth_api


class Token(Controller):
name = 'auth.token'
resource = auth_api.SysUser
allow_methods = ('POST',)

def create(self, req, data, **kwargs):
return self.make_resource(req).login(data.get('username', ''), data.get('password', ''))


class TokenRefresh(Controller):
name = 'auth.token'
resource = auth_api.SysUser
allow_methods = ('GET',)

def get(self, req, **kwargs):
return self.make_resource(req).refresh(GLOBALS.request.auth_token)


class UserMenus(Controller):
name = 'auth.user-menus'
resource = auth_api.SysUser
allow_methods = ('GET',)

def get(self, req, **kwargs):
return self.make_resource(req).get_menus(GLOBALS.request.auth_user)


class UserPassword(Controller):
name = 'auth.user-password'
resource = auth_api.SysUser
allow_methods = ('POST',)

def create(self, req, data, **kwargs):
return self.make_resource(req).update_password(GLOBALS.request.auth_user, data.get('newPassword', ''),
data.get('oldPassword', ''))


class User(Collection):
name = 'auth.users'
resource = auth_api.SysUser


class UserItem(Item):
name = 'auth.users'
resource = auth_api.SysUser


class UserItemMenu(Item):
name = 'auth.users'
resource = auth_api.SysUser
allow_methods = ('GET',)

def get(self, req, rid):
return self.make_resource(req).get_menus(rid)


class UserItemResetPassword(Controller):
name = 'auth.users.password'
resource = auth_api.SysUser
allow_methods = ('POST',)

def create(self, req, data, rid):
data = data or {}
return self.make_resource(req).reset_password(rid, password=data.get('password', None))


class UserItemRole(Item):
name = 'auth.users'
resource = auth_api.SysUser
allow_methods = ('GET',)

def get(self, req, rid):
return self.make_resource(req).get_roles(rid)


class Role(Collection):
name = 'auth.roles'
resource = auth_api.SysRole


class RoleItem(Item):
name = 'auth.roles'
resource = auth_api.SysRole


class RoleItemMenu(Controller):
name = 'auth.roles'
resource = auth_api.SysRole
allow_methods = ('GET', 'POST')

def get(self, req, rid):
return self.make_resource(req).get_menus(rid)

def create(self, req, data, rid):
return self.make_resource(req).set_menus(rid, data)


class RoleItemUser(Controller):
name = 'auth.roles'
resource = auth_api.SysRole
allow_methods = ('GET', 'POST')

def get(self, req, rid):
return self.make_resource(req).get_users(rid)

def create(self, req, data, rid):
return self.make_resource(req).set_users(rid, data)


class Menu(Collection):
name = 'auth.menus'
resource = auth_api.SysMenu
allow_methods = ('GET',)


class MenuItem(Item):
name = 'auth.menus'
resource = auth_api.SysMenu
allow_methods = ('GET',)
25 changes: 25 additions & 0 deletions artifacts-corepy/artifacts_corepy/apps/auth/route.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import

from artifacts_corepy.apps.auth import controller


def add_routes(api):
# 不需要登陆
api.add_route('/artifacts/v1/login', controller.Token())
api.add_route('/artifacts/v1/refresh-token', controller.TokenRefresh())
# 登陆但不需要权限校验
api.add_route('/artifacts/v1/user-menus', controller.UserMenus())
api.add_route('/artifacts/v1/user-password', controller.UserPassword())
# 登陆且经过权限校验
api.add_route('/artifacts/v1/users', controller.User())
api.add_route('/artifacts/v1/users/{rid}', controller.UserItem())
api.add_route('/artifacts/v1/users/{rid}/reset-password', controller.UserItemResetPassword())
api.add_route('/artifacts/v1/users/{rid}/menus', controller.UserItemMenu())
api.add_route('/artifacts/v1/users/{rid}/roles', controller.UserItemRole())
api.add_route('/artifacts/v1/roles', controller.Role())
api.add_route('/artifacts/v1/roles/{rid}', controller.RoleItem())
api.add_route('/artifacts/v1/roles/{rid}/menus', controller.RoleItemMenu())
api.add_route('/artifacts/v1/roles/{rid}/users', controller.RoleItemUser())
api.add_route('/artifacts/v1/menus', controller.Menu())
# api.add_route('/artifacts/v1/menus/{rid}', controller.MenuItem())
Loading