mirror of https://github.com/openspug/spug
				
				
				
			
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
# Copyright: (c) OpenSpug Organization. https://github.com/openspug/spug
 | 
						|
# Copyright: (c) <spug.dev@gmail.com>
 | 
						|
# Released under the AGPL-3.0 License.
 | 
						|
from django.views.generic import View
 | 
						|
from django.db.models import Q
 | 
						|
from libs import JsonParser, Argument, json_response, auth
 | 
						|
from libs.gitlib import RemoteGit
 | 
						|
from apps.credential.models import Credential
 | 
						|
 | 
						|
 | 
						|
class CredView(View):
 | 
						|
    def get(self, request):
 | 
						|
        credentials = Credential.objects.filter(Q(created_by=request.user) | Q(is_public=True))
 | 
						|
        return json_response([x.to_view(request.user) for x in credentials])
 | 
						|
 | 
						|
    @auth('deploy.app.add|deploy.app.edit|config.app.add|config.app.edit')
 | 
						|
    def post(self, request):
 | 
						|
        form, error = JsonParser(
 | 
						|
            Argument('id', type=int, required=False),
 | 
						|
            Argument('name', help='请输入凭据名称'),
 | 
						|
            Argument('username', help='请输入用户名'),
 | 
						|
            Argument('type', filter=lambda x: x in dict(Credential.TYPES), help='请选择凭据类型'),
 | 
						|
            Argument('is_public', type=bool, default=False),
 | 
						|
            Argument('secret', help='请输入密码/密钥'),
 | 
						|
            Argument('extra', required=False),
 | 
						|
        ).parse(request.body)
 | 
						|
        if error is None:
 | 
						|
            if form.id:
 | 
						|
                credential = Credential.objects.get(pk=form.id)
 | 
						|
                if credential.created_by_id != request.user.id:
 | 
						|
                    return json_response(error='共享凭据无权修改')
 | 
						|
                credential.update_by_dict(form)
 | 
						|
            else:
 | 
						|
                Credential.objects.create(created_by=request.user, **form)
 | 
						|
        return json_response(error=error)
 | 
						|
 | 
						|
    @auth('deploy.app.del|config.app.del')
 | 
						|
    def delete(self, request):
 | 
						|
        form, error = JsonParser(
 | 
						|
            Argument('id', type=int, help='请指定操作对象')
 | 
						|
        ).parse(request.GET)
 | 
						|
        if error is None:
 | 
						|
            Credential.objects.filter(pk=form.id, created_by=request.user).delete()
 | 
						|
        return json_response(error=error)
 | 
						|
 | 
						|
 | 
						|
def handle_check(request):
 | 
						|
    form, error = JsonParser(
 | 
						|
        Argument('id', type=int, required=False),
 | 
						|
        Argument('type', filter=lambda x: x in ('git',), help='参数错误'),
 | 
						|
        Argument('data', help='参数错误')
 | 
						|
    ).parse(request.body)
 | 
						|
    if error is None:
 | 
						|
        credential = None
 | 
						|
        if form.id:
 | 
						|
            credential = Credential.objects.get(pk=form.id)
 | 
						|
        if form.type == 'git':
 | 
						|
            is_pass, message = RemoteGit.check_auth(form.data, credential)
 | 
						|
            return json_response({'is_pass': is_pass, 'message': message})
 | 
						|
    return json_response(error=error)
 |