Пример #1
0
 async def prepare(self):
     self.session = await self.update_session()
     if 'domain_id' in self.request.match_info:
         self.domain_id = self.request.match_info.pop('domain_id')
     if 'uid' in self.session:
         uid = self.session['uid']
         self.user, self.domain, self.domain_user, bdoc = await asyncio.gather(
             user.get_by_uid(uid), domain.get(self.domain_id),
             domain.get_user(self.domain_id, uid),
             blacklist.get(self.remote_ip))
         if not self.user:
             raise error.UserNotFoundError(uid)
         if not self.domain_user:
             self.domain_user = {}
     else:
         self.domain, bdoc = await asyncio.gather(
             domain.get(self.domain_id), blacklist.get(self.remote_ip))
     self.view_lang = self.get_setting('view_lang')
     try:
         self.timezone = pytz.timezone(self.get_setting('timezone'))
     except pytz.UnknownTimeZoneError:
         pass
     self.locale = locale.get(self.view_lang)
     self.datetime_stamp = _datetime_stamp
     if bdoc:
         raise error.BlacklistedError(self.remote_ip)
     if not self.GLOBAL and not self.has_priv(builtin.PRIV_VIEW_ALL_DOMAIN):
         self.check_perm(builtin.PERM_VIEW)
Пример #2
0
Файл: base.py Проект: vijos/vj4
 async def prepare(self):
   self.session = await self.update_session()
   if 'domain_id' in self.request.match_info:
     self.domain_id = self.request.match_info.pop('domain_id')
   if 'uid' in self.session:
     uid = self.session['uid']
     self.user, self.domain, self.domain_user, bdoc = await asyncio.gather(
         user.get_by_uid(uid),
         domain.get(self.domain_id),
         domain.get_user(self.domain_id, uid),
         blacklist.get(self.remote_ip))
     if not self.user:
       raise error.UserNotFoundError(uid)
     if not self.domain_user:
       self.domain_user = {}
   else:
     self.domain, bdoc = await asyncio.gather(
         domain.get(self.domain_id), blacklist.get(self.remote_ip))
   self.view_lang = self.get_setting('view_lang')
   try:
     self.timezone = pytz.timezone(self.get_setting('timezone'))
   except pytz.UnknownTimeZoneError:
     pass
   self.locale = locale.get(self.view_lang)
   self.datetime_stamp = _datetime_stamp
   if bdoc:
     raise error.BlacklistedError(self.remote_ip)
   if not self.GLOBAL and not self.has_priv(builtin.PRIV_VIEW_ALL_DOMAIN):
     self.check_perm(builtin.PERM_VIEW)
Пример #3
0
 async def prepare(self):
     self.translate = locale.get_translate(
         options.default_locale)  # Default translate for errors.
     self.session = await self.update_session()
     self.domain_id = self.request.match_info.pop('domain_id',
                                                  builtin.DOMAIN_ID_SYSTEM)
     if 'uid' in self.session:
         uid = self.session['uid']
         self.user, self.domain, self.domain_user, bdoc = await asyncio.gather(
             user.get_by_uid(uid), domain.get(self.domain_id),
             domain.get_user(self.domain_id, uid),
             blacklist.get(self.remote_ip))
         if not self.user:
             raise error.UserNotFoundError(uid)
         if not self.domain_user:
             self.domain_user = {}
     else:
         self.user = builtin.USER_GUEST
         self.domain, bdoc = await asyncio.gather(
             domain.get(self.domain_id), blacklist.get(self.remote_ip))
         self.domain_user = builtin.DOMAIN_USER_GUEST
     self.view_lang = self.get_setting('view_lang')
     # TODO(iceboy): UnknownTimeZoneError
     self.timezone = pytz.timezone(self.get_setting('timezone'))
     self.translate = locale.get_translate(self.view_lang)
     self.datetime_span = functools.partial(_datetime_span,
                                            timezone=self.timezone)
     self.datetime_stamp = _datetime_stamp
     if not self.domain:
         not_found_domain_id = self.domain_id
         self.domain_id = builtin.DOMAIN_ID_SYSTEM
         self.domain = builtin.DOMAIN_SYSTEM
         self.reverse_url = functools.partial(_reverse_url,
                                              domain_id=self.domain_id)
         self.build_path = functools.partial(
             _build_path,
             domain_id=self.domain_id,
             domain_name=self.domain['name'])
         raise error.DomainNotFoundError(not_found_domain_id)
     self.reverse_url = functools.partial(_reverse_url,
                                          domain_id=self.domain_id)
     self.build_path = functools.partial(_build_path,
                                         domain_id=self.domain_id,
                                         domain_name=self.domain['name'])
     if bdoc:
         raise error.BlacklistedError(self.remote_ip)
     if not self.GLOBAL and not self.has_priv(builtin.PRIV_VIEW_ALL_DOMAIN):
         self.check_perm(builtin.PERM_VIEW)
Пример #4
0
    async def post_copy_to_domain(self,
                                  *,
                                  pid: document.convert_doc_id,
                                  dest_domain_id: str,
                                  numeric_pid: bool = False,
                                  hidden: bool = False):
        uid = self.user['_id']
        pdoc = await problem.get(self.domain_id, pid, uid)
        if pdoc.get('hidden', False):
            self.check_perm(builtin.PERM_VIEW_PROBLEM_HIDDEN)
        ddoc, dudoc = await asyncio.gather(
            domain.get(dest_domain_id), domain.get_user(dest_domain_id, uid))
        if not dudoc:
            dudoc = {}
        if not self.dudoc_has_perm(dudoc=dudoc,
                                   perm=builtin.PERM_CREATE_PROBLEM,
                                   ddoc=ddoc,
                                   udoc=self.user):
            # TODO: This is the destination domain's PermissionError.
            raise error.PermissionError(builtin.PERM_CREATE_PROBLEM)

        pid = None
        if numeric_pid:
            pid = await domain.inc_pid_counter(dest_domain_id)
        pid = await problem.copy(pdoc, dest_domain_id, uid, pid, hidden)

        new_url = self.reverse_url('problem_settings',
                                   pid=pid,
                                   domain_id=dest_domain_id)
        self.json_or_redirect(new_url, new_problem_url=new_url)
Пример #5
0
    async def post(self,
                   *,
                   src_domain_id: str,
                   src_pids: str,
                   numeric_pid: bool = False,
                   hidden: bool = False):
        src_ddoc, src_dudoc = await asyncio.gather(
            domain.get(src_domain_id),
            domain.get_user(src_domain_id, self.user['_id']))
        if not src_dudoc:
            src_dudoc = {}
        if not self.dudoc_has_perm(ddoc=src_ddoc,
                                   dudoc=src_dudoc,
                                   udoc=self.user,
                                   perm=builtin.PERM_VIEW_PROBLEM):
            # TODO: This is the source domain's PermissionError.
            raise error.PermissionError(builtin.PERM_VIEW_PROBLEM)

        src_pids = misc.dedupe(
            map(document.convert_doc_id,
                src_pids.replace('\r\n', '\n').split('\n')))
        if len(src_pids) > self.MAX_PROBLEMS_PER_REQUEST:
            raise error.BatchCopyLimitExceededError(
                self.MAX_PROBLEMS_PER_REQUEST, len(src_pids))
        pdocs = await problem.get_multi(domain_id=src_domain_id, doc_id={'$in': src_pids}) \
          .sort('doc_id', 1) \
          .to_list()

        exist_pids = [pdoc['doc_id'] for pdoc in pdocs]
        if len(src_pids) != len(exist_pids):
            for pid in src_pids:
                if pid not in exist_pids:
                    raise error.ProblemNotFoundError(src_domain_id, pid)

        for pdoc in pdocs:
            if pdoc.get('hidden', False):
                if not self.dudoc_has_perm(
                        ddoc=src_ddoc,
                        dudoc=src_dudoc,
                        udoc=self.user,
                        perm=builtin.PERM_VIEW_PROBLEM_HIDDEN):
                    # TODO: This is the source domain's PermissionError.
                    raise error.PermissionError(
                        builtin.PERM_VIEW_PROBLEM_HIDDEN)

        for pdoc in pdocs:
            pid = None
            if numeric_pid:
                pid = await domain.inc_pid_counter(self.domain_id)
            await problem.copy(pdoc, self.domain_id, self.user['_id'], pid,
                               hidden)

        self.redirect(self.reverse_url('problem_main'))