Esempio n. 1
0
 def post(self, cmd):
     params = {
         k: v[0]
         for k, v in self.request.arguments.iteritems()
     }
     uid = manager.run(cmd, params=params)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 2
0
 def post(self):
     cmd = self.get_argument('command')
     success_codes = [int(c) for c in self.get_arguments('success_code')]
     params = dict((k, v[0]) for k, v in self.request.arguments.iteritems()
                             if k not in ('success_code',))
     env = {}
     for header, value in self.request.headers.iteritems():
         if header.upper().startswith('ENV_'):
             env_var_name = header.upper()[len('ENV_'):]
             env[env_var_name] = value
     uid = manager.run(cmd, params, env=env, success_codes=success_codes)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 3
0
 def post(self):
     cmd = self.get_argument('command')
     success_codes = [int(c) for c in self.get_arguments('success_code')]
     params = dict((k, v[0]) for k, v in self.request.arguments.iteritems()
                   if k not in ('success_code', ))
     env = {}
     for header, value in self.request.headers.iteritems():
         if header.upper().startswith('ENV_'):
             env_var_name = header.upper()[len('ENV_'):]
             env[env_var_name] = value
     uid = manager.run(cmd, params, env=env, success_codes=success_codes)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 4
0
    def post(self):
        params = {
            k: v[0]
            for k, v in self.request.arguments.iteritems()
        }
        log_extra = {
            'task_id': params.get('task_id'),
            'job_id': params.get('job_id'),
        }
        if config['common'].get('base_path') is None:
            cmd_logger.error('base path is not set, create group cannot be performed', extra=log_extra)
            self.set_status(500)
            raise RuntimeError('group creation is not allowed')
        files = {}
        for filename, http_files in self.request.files.iteritems():
            norm_filename = os.path.normpath(filename)
            if norm_filename.startswith('..') or norm_filename.startswith('/'):
                cmd_logger.error(
                    'Cannot create file {filename}, '
                    'normalized path {norm_filename} is not allowed'.format(
                        filename=filename,
                        norm_filename=norm_filename,
                    ),
                    extra=log_extra,
                )
                self.set_status(403)
                raise RuntimeError(
                    'File {filename} is forbidden, path should be relative '
                    'to group base directory'.format(filename=filename)
                )
            http_file = http_files[0]
            files[norm_filename] = http_file.body

        params['group_base_path_root_dir'] = os.path.normpath(params['group_base_path_root_dir'])
        if not params['group_base_path_root_dir'].startswith(config['common']['base_path']):
            self.set_status(403)
            raise RuntimeError(
                'Group base path {path} is not under common base path'.format(
                    path=params['group_base_path_root_dir'],
                )
            )
        params['files'] = files
        uid = manager.run('create_group', params=params)
        self.set_status(302)
        self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 5
0
    def post(self):
        params = {k: v[0] for k, v in self.request.arguments.iteritems()}
        log_extra = {
            'task_id': params.get('task_id'),
            'job_id': params.get('job_id'),
        }
        if config['common'].get('base_path') is None:
            cmd_logger.error(
                'base path is not set, create group cannot be performed',
                extra=log_extra)
            self.set_status(500)
            raise RuntimeError('group creation is not allowed')
        files = {}
        for filename, http_files in self.request.files.iteritems():
            norm_filename = os.path.normpath(filename)
            if norm_filename.startswith('..') or norm_filename.startswith('/'):
                cmd_logger.error(
                    'Cannot create file {filename}, '
                    'normalized path {norm_filename} is not allowed'.format(
                        filename=filename,
                        norm_filename=norm_filename,
                    ),
                    extra=log_extra,
                )
                self.set_status(403)
                raise RuntimeError(
                    'File {filename} is forbidden, path should be relative '
                    'to group base directory'.format(filename=filename))
            http_file = http_files[0]
            files[norm_filename] = http_file.body

        params['group_base_path_root_dir'] = os.path.normpath(
            params['group_base_path_root_dir'])
        if not params['group_base_path_root_dir'].startswith(
                config['common']['base_path']):
            self.set_status(403)
            raise RuntimeError(
                'Group base path {path} is not under common base path'.format(
                    path=params['group_base_path_root_dir'], ))
        params['files'] = files
        uid = manager.run('create_group', params=params)
        self.set_status(302)
        self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 6
0
 def post(self):
     if config['common'].get('base_path') is None:
         logger.error('base path is not set, remove group cannot be performed')
         self.set_status(500)
         raise RuntimeError('group creation is not allowed')
     params = {
         k: v[0]
         for k, v in self.request.arguments.iteritems()
     }
     params['group_base_path'] = os.path.normpath(params['group_base_path'])
     if not params['group_base_path'].startswith(config['common']['base_path']):
         self.set_status(403)
         raise RuntimeError(
             'Group path {path} is not under common base path'.format(
                 path=params['group_base_path'],
             )
         )
     uid = manager.run('remove_group', params=params)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 7
0
 def post(self):
     params = {k: v[0] for k, v in self.request.arguments.iteritems()}
     if config['common'].get('base_path') is None:
         cmd_logger.error(
             'base path is not set, remove group cannot be performed',
             extra={
                 'task_id': params.get('task_id'),
                 'job_id': params.get('job_id'),
             })
         self.set_status(500)
         raise RuntimeError('group creation is not allowed')
     params['group_base_path'] = os.path.normpath(params['group_base_path'])
     if not params['group_base_path'].startswith(
             config['common']['base_path']):
         self.set_status(403)
         raise RuntimeError(
             'Group path {path} is not under common base path'.format(
                 path=params['group_base_path'], ))
     uid = manager.run('remove_group', params=params)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 8
0
 def post(self):
     cmd = self.get_argument('command')
     params = dict((k, v[0]) for k, v in self.request.arguments.iteritems())
     uid = manager.run(cmd, params)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 9
0
 def post(self):
     cmd = self.get_argument('command')
     params = dict((k, v[0]) for k, v in self.request.arguments.iteritems())
     uid = manager.run(cmd, params)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))
Esempio n. 10
0
 def post(self, cmd):
     params = {k: v[0] for k, v in self.request.arguments.iteritems()}
     uid = manager.run(cmd, params=params)
     self.set_status(302)
     self.add_header('Location', self.reverse_url('status', uid))