コード例 #1
0
    def get(self, request, app_id, function_name):
        context = Util.get_context(request)
        context['app_id'] = app_id

        adapter = DjangoAdapter(app_id, request)
        with adapter.open_api_logic() as logic_api:
            function = logic_api.get_function(function_name)['item']
            file_paths = logic_api.get_function_file_paths(function_name).get(
                'file_paths', [])
            handler_prefix = '/'.join(function['handler'].split('.')[:-1])
            current_path = None
            for file_path in file_paths:
                if file_path.startswith(handler_prefix):
                    current_path = file_path

            context['function'] = function
            context['file_paths'] = file_paths
            context['current_path'] = current_path
            context['current_file'] = logic_api.get_function_file(
                function_name, current_path).get('item')
        return render(request,
                      'dashboard/app/logic_edit.html',
                      context=context)
コード例 #2
0
ファイル: logic.py プロジェクト: sskimin4/aws-interface
 def post(self, request, app_id, function_name):
     context = Util.get_context(request)
     context['app_id'] = app_id
     cmd = request.POST.get('cmd', None)
     adapter = DjangoAdapter(app_id, request)
     with adapter.open_api_logic() as logic_api:
         if cmd == 'get_function_file':
             function_name = request.POST.get('function_name')
             file_path = request.POST.get('file_path')
             result = logic_api.get_function_file(function_name, file_path)
             return JsonResponse(result)
         elif cmd == 'put_function_file':
             function_name = request.POST.get('function_name')
             file_path = request.POST.get('file_path')
             file_content = request.POST.get('file_content')
             file_type = request.POST.get('file_type', 'text')
             result = logic_api.put_function_file(function_name, file_path,
                                                  file_content, file_type)
             allocate_resource_in_background(adapter)
             return JsonResponse(result)
         elif cmd == 'update_function':
             function_name = request.POST.get('function_name', None)
             description = request.POST.get('description', None)
             handler = request.POST.get('handler', None)
             runtime = request.POST.get('runtime', None)
             sdk_config = get_sdk_config(adapter)
             result = logic_api.update_function(function_name=function_name,
                                                description=description,
                                                handler=handler,
                                                runtime=runtime,
                                                sdk_config=sdk_config)
             return JsonResponse(result)
         elif cmd == 'get_function_file_paths':
             function_name = request.POST.get('function_name')
             item = logic_api.get_function_file_paths(function_name)
             return JsonResponse(item)
コード例 #3
0
    def post(self, request, app_id):
        context = Util.get_context(request)
        context['app_id'] = app_id

        adapter = DjangoAdapter(app_id, request)
        with adapter.open_api_storage() as storage_api:
            cmd = request.POST['cmd']
            if cmd == 'upload_b64':  # 분할 업로드
                file_bin = request.FILES['file_bin']
                file_name = request.POST['file_name']
                parent_file_id = None

                def divide_chunks(text, n):
                    for i in range(0, len(text), n):
                        yield text[i:i + n]

                raw_base64 = file_bin.read()
                raw_base64 = base64.b64encode(raw_base64)
                raw_base64 = raw_base64.decode('utf-8')
                base64_chunks = divide_chunks(raw_base64,
                                              1024 * 1024 * 4)  # 4mb
                for base64_chunk in base64_chunks:
                    result = storage_api.upload_b64(parent_file_id, file_name,
                                                    base64_chunk)
                    parent_file_id = result.get('file_id')
                return JsonResponse(result)
            elif cmd == 'get_b64_info_items':  # For admins
                start_key = request.POST.get('start_key', None)
                result = storage_api.get_b64_info_items(start_key,
                                                        reverse=True)
                return JsonResponse(result)
            elif cmd == 'delete_b64':
                file_id = request.POST['file_id']
                result = storage_api.delete_b64(file_id)
                return JsonResponse(result)
            elif cmd == 'get_policy_code':
                mode = request.POST.get('mode')
                result = storage_api.get_policy_code(mode)
                return JsonResponse(result)
            elif cmd == 'put_policy':
                mode = request.POST.get('mode')
                code = request.POST.get('code')
                result = storage_api.put_policy(mode, code)
                return JsonResponse(result)
            elif cmd == 'get_file_rows':
                start_key = request.POST.get('start_key', None)
                result = storage_api.get_b64_info_items(start_key,
                                                        reverse=True)
                template = loader.get_template(
                    'dashboard/app/component/storage_file_table_row.html')
                files = result.get('items', [])
                end_key = result.get('end_key', None)
                context = {
                    'app_id': app_id,
                    'files': files,
                }
                result = {
                    'file_rows': template.render(context, request),
                    'end_key': end_key
                }
                return JsonResponse(result)
コード例 #4
0
    def post(self, request, app_id):
        context = Util.get_context(request)
        context['app_id'] = app_id

        adapter = DjangoAdapter(app_id, request)
        with adapter.open_api_database() as database_api:
            cmd = request.POST['cmd']
            if cmd == 'add_partition':
                partition_name = request.POST['partition_name']
                _ = database_api.create_partition(partition_name)
            elif cmd == 'add_item':
                partition = request.POST['partition']
                read_groups = request.POST.getlist('read_groups[]')
                write_groups = request.POST.getlist('write_groups[]')
                _ = database_api.create_item(partition, {}, read_groups,
                                             write_groups)
            elif cmd == 'add_field':
                item_id = request.POST['item_id']
                field_name = request.POST['field_name']
                field_value = request.POST['field_value']
                field_type = request.POST['field_type']
                if field_type == 'S':
                    field_value = str(field_value)
                elif field_type == 'N':
                    field_value = Decimal(field_value)
                elif field_type == 'L':
                    field_value = list(field_value)
                _ = database_api.put_item_field(item_id, field_name,
                                                field_value)
            elif cmd == 'delete_partition':
                partition_name = request.POST['partition_name']
                _ = database_api.delete_partition(partition_name)
            elif cmd == 'delete_partitions':
                partitions = request.POST.getlist('partitions[]')
                _ = database_api.delete_partitions(partitions)
            elif cmd == 'get_items':
                partition = request.POST['partition']
                start_key = request.POST.get('start_key', None)
                result = database_api.get_items(partition, start_key=start_key)
                result = Util.encode_dict(result)
                return JsonResponse(result)
            elif cmd == 'get_item':
                item_id = request.POST['item_id']
                result = database_api.get_item(item_id)
                result = Util.encode_dict(result)
                return JsonResponse(result)
            elif cmd == 'delete_item':
                item_id = request.POST['item_id']
                result = database_api.delete_item(item_id)
                return JsonResponse(result)
            elif cmd == 'delete_items':
                item_ids = request.POST.getlist('item_ids[]')
                result = database_api.delete_items(item_ids)
                return JsonResponse(result)
            elif cmd == 'delete_field':
                item_id = request.POST['item_id']
                field_name = request.POST['field_name']
                result = database_api.put_item_field(item_id, field_name, None)
                return JsonResponse(result)
            elif cmd == 'delete_fields':
                field_names = request.POST.getlist('field_names[]')
                item_id = request.POST['item_id']
                for field_name in field_names:
                    result = database_api.put_item_field(
                        item_id, field_name, None)
                return JsonResponse(result)
            elif cmd == 'get_item_count':
                partition = request.POST['partition']
                result = database_api.get_item_count(partition)
                result = Util.encode_dict(result)
                return JsonResponse(result)
            elif cmd == 'query_items':
                partition = request.POST['partition']
                query = request.POST['query']
                start_key = request.POST.get('start_key', None)
                query = json.loads(query)
                instructions = query['instructions']
                result = database_api.query_items(partition, instructions,
                                                  start_key)
                return JsonResponse(result)
            elif cmd == 'get_policy_code':
                partition_to_apply = request.POST.get('partition_to_apply')
                mode = request.POST.get('mode')
                result = database_api.get_policy_code(partition_to_apply, mode)
                return JsonResponse(result)
            elif cmd == 'put_policy':
                partition_to_apply = request.POST.get('partition_to_apply')
                mode = request.POST.get('mode')
                code = request.POST.get('code')
                result = database_api.put_policy(partition_to_apply, mode,
                                                 code)
                return JsonResponse(result)

        return redirect(request.path_info)  # Redirect back
コード例 #5
0
    def post(self, request, app_id):
        context = Util.get_context(request)
        context['app_id'] = app_id
        cmd = request.POST.get('cmd', None)
        adapter = DjangoAdapter(app_id, request)
        with adapter.open_api_logic() as logic_api:
            if cmd == 'create_function':
                zip_file = request.FILES['zip_file']
                function_name = request.POST['function_name']
                description = request.POST['description']
                runtime = request.POST['runtime']
                handler = request.POST['handler']
                use_logging = request.POST['use_logging'] == 'true'
                use_traceback = request.POST['use_traceback'] == 'true'
                use_standalone = request.POST['use_standalone'] == 'true'
                sdk_config = get_sdk_config(adapter, use_localhost=False)

                zip_file.seek(0)
                zip_file_bin = zip_file.read()
                zip_file_bytes = zip_file_bin
                zip_file_bin = base64.b64encode(zip_file_bin)
                zip_file_bin = zip_file_bin.decode('utf-8')
                if not description:
                    description = None

                try:
                    requirements_text = get_requirements_text_from_zipfile(
                        zip_file_bytes)
                except Exception as ex:
                    requirements_text = None
                    print(ex)
                    print(traceback.format_exc())

                requirements_zip_file_id = None
                response_stdout = None
                if requirements_text:
                    print('requirements_text:', requirements_text)
                    with adapter.open_sdk() as sdk_client:
                        response = sdk_client.logic_create_packages_zip(
                            requirements_text)
                        print('logic_create_packages_zip:', response)
                        requirements_zip_file_id = response.get(
                            'zip_file_id', None)
                        response_stdout = response.get('response_stdout', None)
                        if not requirements_zip_file_id:
                            raise RuntimeError(
                                'Requirements.txt error! retry or check this.')
                # response = logic_api.create_packages_zip(requirements_text)
                # print('logic_create_packages_zip:', response)
                # requirements_zip_file_id = response.get('zip_file_id', None)

                response_function_creation = logic_api.create_function(
                    function_name, description, runtime, handler, sdk_config,
                    zip_file_bin, True, use_logging, use_traceback,
                    requirements_zip_file_id, use_standalone)
                return JsonResponse({
                    'package_install_response_stdout':
                    response_stdout,
                    'response_function_creation':
                    response_function_creation
                })
            elif cmd == 'create_function_test':
                test_name = request.POST.get('test_name')
                function_name = request.POST.get('function_name')
                test_input = request.POST.get('test_input')
                logic_api.create_function_test(test_name, function_name,
                                               test_input)
            elif cmd == 'run_function':
                with adapter.open_sdk() as sdk_client:
                    # TODO SDK Sign-up Login and authentication takes a lot of time.
                    #  We are planning to store the SDK ID Password in the session.
                    function_name = request.POST.get('function_name')
                    payload = request.POST.get('payload')
                    payload = json.loads(payload)
                    start = time.time()
                    data = sdk_client.logic_run_function(
                        function_name, payload)
                    end = time.time()
                    data['duration'] = end - start
                    # print('data:', data)
                    return JsonResponse(data)
            elif cmd == 'delete_function_test':
                test_name = request.POST.get('test_name')
                logic_api.delete_function_test(test_name)
            elif cmd == 'delete_function':
                function_name = request.POST.get('function_name')
                function_version = request.POST.get('function_version', None)
                logic_api.delete_function(function_name, function_version)
            elif cmd == 'create_webhook':
                name = request.POST.get('name')
                description = request.POST.get('description')
                function_name = request.POST.get('function_name')
                logic_api.create_webhook(name, description, function_name)
            elif cmd == 'delete_webhook':
                name = request.POST.get('name')
                logic_api.delete_webhook(name)

        return redirect(request.path_info)  # Redirect back
コード例 #6
0
ファイル: marketplace.py プロジェクト: tronze/aws-interface
    def post(self, request, app_id, marketplace_logic_id):
        context = Util.get_context(request)
        app = App.objects.get(id=app_id, user=request.user)
        context['app_id'] = app_id
        context['app_name'] = app.name
        adapter = DjangoAdapter(app_id, request)
        cmd = request.POST.get('cmd', None)
        if cmd == 'edit_marketplace_logic':
            title = request.POST.get('title')
            description = request.POST.get('description')
            category = request.POST.get('category')
            logo_image = request.FILES.get('logo_image')
            content = request.POST.get('content')
            function_name = request.POST.get('function_name')

            change_logo_image = request.POST.get('change_logo_image', False)
            change_function = request.POST.get('change_function', False)

            if change_logo_image == 'true':
                change_logo_image = True
            elif change_logo_image == 'false':
                change_logo_image = False

            if change_function == 'true':
                change_function = True
            elif change_function == 'false':
                change_function = False

            with adapter.open_api_logic() as logic_api:
                logic_function = logic_api.get_function(function_name)['item']
                handler = logic_function['handler']
                runtime = logic_function['runtime']
                function_zip_b64 = logic_api.get_function_zip_b64(
                    function_name)['item']['base64']
                function_zip_b64 = function_zip_b64.encode('utf-8')
                function_zip = base64.b64decode(function_zip_b64)
                function_zip_name = '{}.zip'.format(function_name)
                function_zip_file = SimpleUploadedFile(
                    function_zip_name, function_zip,
                    'application/octet-stream')

            marketplace_logic = MarketplaceLogic.objects.get(
                id=marketplace_logic_id, user=request.user)
            marketplace_logic.title = title
            marketplace_logic.description = description
            marketplace_logic.category = category

            if change_logo_image:
                marketplace_logic.logo_image = logo_image

            if change_function:
                # Needs security verification by AWS-I team
                marketplace_logic.verified = False
                marketplace_logic.function_zip_file = function_zip_file

            marketplace_logic.function_name = function_name
            marketplace_logic.handler = handler
            marketplace_logic.runtime = runtime
            marketplace_logic.content = content
            marketplace_logic.save()
            return JsonResponse(
                data={'marketplace_logic_id': marketplace_logic.id})
コード例 #7
0
ファイル: auth.py プロジェクト: hubaimaster/aws-interface
    def post(self, request, app_id):
        context = Util.get_context(request)
        context['app_id'] = app_id

        adapter = DjangoAdapter(app_id, request)
        with adapter.open_api_auth() as api:
            cmd = request.POST['cmd']

            if cmd == 'delete_group':
                name = request.POST['group_name']
                error = api.delete_user_group(name).get('error', None)
                if error:
                    Util.add_alert(
                        request, '{}: {}'.format(error['code'],
                                                 error['message']))
            elif cmd == 'put_group':
                name = request.POST['group_name']
                description = request.POST['group_description']
                api.put_user_group(name, description)
            elif cmd == 'set_login_method':
                login_method = request.POST['login_method']
                default_group = request.POST['default_group_name']
                enabled = request.POST['enabled']
                register_policy_code = request.POST.get(
                    'register_policy_code', None)
                if enabled == 'true':
                    enabled = True
                else:
                    enabled = False
                api.set_login_method(login_method, enabled, default_group,
                                     register_policy_code)
            elif cmd == 'put_user':
                email = request.POST['user_email']
                password = request.POST['user_password']
                api.create_user(email, password, {})
            elif cmd == 'delete_user':
                user_id = request.POST['user_id']
                api.delete_user(user_id)
            elif cmd == 'delete_sessions':
                session_ids = request.POST.getlist('session_ids[]')
                api.delete_sessions(session_ids)
            elif cmd == 'delete_users':
                user_ids = request.POST.getlist('user_ids[]')
                api.delete_users(user_ids)
            elif cmd == 'detach_group_permission':
                group_name = request.POST.get('group_name')
                permission = request.POST.get('permission')
                api.detach_group_permission(group_name, permission)
            elif cmd == 'attach_group_permission':
                group_name = request.POST.get('group_name')
                permission = request.POST.get('permission')
                api.attach_group_permission(group_name, permission)
            elif cmd == 'set_users':
                user_ids = request.POST.getlist('user_ids[]')
                field_name = request.POST.get('field_name')
                field_type = request.POST.get('field_type')
                field_value = request.POST.get('field_value', None)
                if field_type == 'S':
                    field_value = str(field_value)
                elif field_type == 'N':
                    field_value = Decimal(field_value)
                with ThreadPoolExecutor(max_workers=32) as exc:
                    for user_id in user_ids:
                        exc.submit(api.set_user, user_id, field_name,
                                   field_value)
            elif cmd == 'attach_user_group':
                user_id = request.POST.get('user_id')
                group_name = request.POST.get('group_name')
                api.attach_user_group(user_id, group_name)
            elif cmd == 'detach_user_group':
                user_id = request.POST.get('user_id')
                group_name = request.POST.get('group_name')
                api.detach_user_group(user_id, group_name)
            elif cmd == 'get_sessions':
                start_key = request.POST.get('start_key', None)
                result = api.get_sessions(start_key=start_key, limit=20)
                return JsonResponse(result)
            elif cmd == 'get_users':
                start_key = request.POST.get('start_key', None)
                result = api.get_users(start_key=start_key, limit=20)
                return JsonResponse(result)
            elif cmd == 'get_user_rows':
                start_key = request.POST.get('start_key', None)
                query = request.POST.getlist('query[]', [])
                if start_key:
                    start_key = json.loads(start_key)
                result = self._get_user_rows(request,
                                             app_id,
                                             start_key=start_key,
                                             query=query)
                return JsonResponse(result)
            elif cmd == 'get_session_rows':
                start_key = request.POST.get('start_key', None)
                result = self._get_session_rows(request, app_id, start_key)
                return JsonResponse(result)
            elif cmd == 'set_group_session_security_enhancement':
                group_name = request.POST.get('group_name')
                enabled = request.POST.get('enabled')
                if enabled == 'false':
                    enabled = False
                elif enabled == 'true':
                    enabled = True
                result = api.set_group_session_security_enhancement(
                    group_name, enabled)
                return JsonResponse(result)
            elif cmd == 'get_policy_code':
                mode = request.POST.get('mode')
                result = api.get_policy_code('user', mode)
                print(result)
                return JsonResponse(result)
            elif cmd == 'put_policy':
                mode = request.POST.get('mode')
                code = request.POST.get('code')
                result = api.put_policy('user', mode, code)
                return JsonResponse(result)

        return redirect(request.path_info)  # Redirect back
コード例 #8
0
ファイル: log.py プロジェクト: hubaimaster/aws-interface
    def post(self, request, app_id):
        cmd = request.POST.get('cmd', None)
        adapter = DjangoAdapter(app_id, request)
        with adapter.open_api_log() as log:
            if cmd == 'get_logs':
                start_key = request.POST.get('start_key', None)
                event_source = request.POST.get('event_source', None)
                event_name = request.POST.get('event_name', None)
                event_param = request.POST.get('event_param', None)
                user_id = request.POST.get('user_id', None)

                log_result = log.get_logs(event_source,
                                          event_name,
                                          event_param,
                                          user_id,
                                          start_key,
                                          limit=50)
                return JsonResponse(log_result)
            elif cmd == 'get_log_rows':
                start_key = request.POST.get('start_key', None)
                event_source = request.POST.get('event_source', None)
                event_name = request.POST.get('event_name', None)
                event_param = request.POST.get('event_param', None)
                user_id = request.POST.get('user_id', None)

                result = log.get_logs(event_source,
                                      event_name,
                                      event_param,
                                      user_id,
                                      start_key,
                                      reverse=True,
                                      limit=50)
                template = loader.get_template(
                    'dashboard/app/component/log_table_row.html')
                items = result.get('items', [])

                def get_event_param(_event_param):
                    try:
                        if isinstance(_event_param, dict):
                            return json.dumps(json.loads(_event_param),
                                              sort_keys=True,
                                              indent=4)
                    except Exception as _:
                        pass
                    return str(_event_param)

                items = [{
                    'owner':
                    item.get('owner', None),
                    'creation_date':
                    item.get('creation_date'),
                    'event_source':
                    item.get('event_source', None),
                    'event_name':
                    item.get('event_name', None),
                    'event_param':
                    get_event_param(item.get('event_param')),
                } for item in items if item.get('event_param')]
                end_key = result.get('end_key', None)
                context = {
                    'items': items,
                }
                result = {
                    'rows': template.render(context, request),
                    'end_key': end_key
                }
                return JsonResponse(result)