コード例 #1
0
def _find_email_mentions(comments_data):
  """Find mentions of user email in the comment data.
     If a user email is not registered in the app, the user will be created
     via external service and a Creator role would be granted to this user.

    Params:
      comments_data: list of CommentData named tuples.

    Returns:
      a default dict with keys equals to mentioned user email and values
      equals to a set of related CommentData.
  """
  link_pattern = re.compile(EMAIL_LINK_REGEXP)

  email_mentions = defaultdict(list)
  for comment in comments_data:
    comment_email_mentions = dict()
    for match in link_pattern.finditer(comment.comment_text):
      email = _extract_email(match)
      person = user_generator.find_user(email)
      if not person:
        continue
      comment_email_mentions[email] = comment
    for email, matched_comment in comment_email_mentions.iteritems():
      email_mentions[email].append(matched_comment)
  return email_mentions
コード例 #2
0
ファイル: __init__.py プロジェクト: weizai118/ggrc-core
def get_current_user(use_external_user=True):
    """Gets current user.

  Retrieves the current logged-in user or the external user given
  in the X-external-user header based on the provided flag.

  Args:
    use_external_user: indicates should we use external user or not.

  Returns:
    current user.
  """

    logged_in_user = _get_current_logged_user()
    if use_external_user and is_external_app_user():
        try:
            from ggrc.utils.user_generator import parse_user_email
            external_user_email = parse_user_email(request,
                                                   "X-external-user",
                                                   mandatory=False)
            if external_user_email:
                from ggrc.utils.user_generator import find_user
                ext_user = find_user(external_user_email,
                                     modifier=logged_in_user.id)
                if ext_user:
                    return ext_user
        except RuntimeError:
            logger.info("Working outside of request context.")
    return logged_in_user
コード例 #3
0
ファイル: __init__.py プロジェクト: google/ggrc-core
def get_current_user(use_external_user=True):
  """Gets current user.

  Retrieves the current logged-in user or the external user given
  in the X-external-user header based on the provided flag.

  Args:
    use_external_user: indicates should we use external user or not.

  Returns:
    current user.
  """

  logged_in_user = _get_current_logged_user()
  if use_external_user and is_external_app_user():
    try:
      from ggrc.utils.user_generator import parse_user_email
      external_user_email = parse_user_email(request,
                                             "X-external-user",
                                             mandatory=False)
      if external_user_email:
        from ggrc.utils.user_generator import find_user
        ext_user = find_user(external_user_email, modifier=logged_in_user.id)
        if ext_user:
          return ext_user
    except RuntimeError:
      logger.info("Working outside of request context.")
  return logged_in_user
コード例 #4
0
ファイル: common.py プロジェクト: pjpuneet/ggrc-core
def create_external_user(app_user, external_user_email):
    """Create external user."""
    external_user = find_user(external_user_email, modifier=app_user.id)

    if external_user and external_user.id is None:
        db.session.flush()
        log_event(db.session, external_user, app_user.id)

    return external_user
コード例 #5
0
ファイル: common.py プロジェクト: google/ggrc-core
def create_external_user(app_user, external_user_email):
  """Create external user."""
  external_user = find_user(external_user_email, modifier=app_user.id)

  if external_user and external_user.id is None:
    db.session.flush()
    log_event(db.session, external_user, app_user.id)
    db.session.commit()

  return external_user
コード例 #6
0
ファイル: handlers.py プロジェクト: zhaoshiling1017/ggrc-core
 def get_person(self, email):
     from ggrc.utils import user_generator
     new_objects = self.row_converter.block_converter.converter.new_objects
     if email not in new_objects[Person]:
         try:
             new_objects[Person][email] = user_generator.find_user(email)
         except ValueError as ex:
             self.add_error(errors.VALIDATION_ERROR,
                            column_name=self.display_name,
                            message=ex.message)
             return None
     return new_objects[Person].get(email)
コード例 #7
0
ファイル: handlers.py プロジェクト: google/ggrc-core
 def get_person(self, email):
   from ggrc.utils import user_generator
   new_objects = self.row_converter.block_converter.converter.new_objects
   if email not in new_objects[all_models.Person]:
     try:
       new_objects[all_models.Person][email] = user_generator.find_user(email)
     except ValueError as ex:
       self.add_error(
           errors.VALIDATION_ERROR,
           column_name=self.display_name,
           message=ex.message
       )
       return None
   return new_objects[all_models.Person].get(email)
コード例 #8
0
def request_loader(request):
    """Get the user provided in X-GGRC-user if whitelisted Appid provided."""

    whitelist = settings.ALLOWED_QUERYAPI_APP_IDS
    inbound_appid = request.headers.get("X-Appengine-Inbound-Appid")
    if not inbound_appid:
        # don't check X-GGRC-user if the request doesn't come from another app
        return None

    if inbound_appid not in whitelist:
        # by default, we don't allow incoming app2app connections from
        # non-whitelisted apps
        raise exceptions.BadRequest(
            "X-Appengine-Inbound-Appid header contains "
            "untrusted application id: {}".format(inbound_appid))

    email = parse_user_email(request, "X-GGRC-user", mandatory=True)

    # External Application User should be created if doesn't exist.
    if is_external_app_user_email(email):
        db_user = find_or_create_ext_app_user()
        if db_user.id is None:
            db.session.flush()
            log_event(db.session, db_user, db_user.id)
            db.session.commit()
        try:
            # Create in the DB external app user provided in X-external-user header.
            external_user_email = parse_user_email(request,
                                                   "X-external-user",
                                                   mandatory=False)
            if external_user_email:
                from ggrc.utils.user_generator import find_user
                ext_user = find_user(external_user_email, modifier=db_user.id)
                if ext_user.id is None:
                    log_event(db.session, ext_user, db_user.id)
                    db.session.commit()
        except exceptions.BadRequest as exp:
            logger.error("Creation of external user has failed. %s",
                         exp.message)
            raise
    else:
        db_user = all_models.Person.query.filter_by(email=email).first()
    if not db_user:
        raise exceptions.BadRequest(
            "No user with such email: {}".format(email))
    return db_user
コード例 #9
0
ファイル: handlers.py プロジェクト: testinfox/ggrc-core
 def get_person(self, email):
     from ggrc.utils import user_generator
     new_objects = self.row_converter.block_converter.converter.new_objects
     if email not in new_objects[Person]:
         new_objects[Person][email] = user_generator.find_user(email)
     return new_objects[Person].get(email)
コード例 #10
0
def create_missed_issue_acl(email, role_name, obj):
    """Create missed acl for emails from IssueTracker"""
    person = user_generator.find_user(email)
    if not person:
        return
    obj.add_person_with_role_name(person, role_name)
コード例 #11
0
ファイル: issue_integration.py プロジェクト: google/ggrc-core
def create_missed_issue_acl(email, role_name, obj):
  """Create missed acl for emails from IssueTracker"""
  person = user_generator.find_user(email)
  if not person:
    return
  obj.add_person_with_role_name(person, role_name)