# frozen_string_literal: true
#
# Copyright (c) 2006-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
#
# ronin-support is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ronin-support is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ronin-support. If not, see .
#
require 'ronin/support/text/patterns/network'
module Ronin
module Support
module Text
#
# @since 0.3.0
#
module Patterns
#
# @group PII Patterns
#
# Regular expression to match a word in the username of an email address
USER_NAME = /[A-Za-z](?:[A-Za-z0-9]*[\._-])*[A-Za-z0-9]+/
# Regular expression to find email addresses in text
#
# @since 1.0.0
EMAIL_ADDRESS = /#{USER_NAME}\@#{HOST_NAME}/
# @see EMAIL_ADDRESS
EMAIL_ADDR = EMAIL_ADDRESS
# Regular expression to match `.`, ` AT `, ` at `, `[AT]`, `[at]`,
# ``, ``, `{AT}`, `{at}`, `(AT)`, `(at)`.
#
# @since 1.0.0
OBFUSCATED_EMAIL_AT = /\@|\s+(?:AT|at)\s+|\s*\[(?:AT|at)\]\s*|\s*\<(?:AT|at)\>\s*|\s*\{(?:AT|at)\}\s*|\s*\((?:AT|at)\)\s*/
# Regular expression to match `.`, ` DOT `, ` dot `, `[DOT]`, `[dot]`,
# ``, ``, `{DOT}`, `{dot}`, `(DOT)`, `(dot)`.
#
# @since 1.0.0
OBFUSCATED_EMAIL_DOT = /\.|\s+(?:DOT|dot)\s+|\s*\[(?:DOT|dot)\]\s*|\s*\<(?:DOT|dot)\>\s*|\s*\{(?:DOT|dot)\}\s*|\s*\((?:DOT|dot)\)\s*/
# Regular expression to find obfuscated email addresses in text.
#
# @since 1.0.0
OBFUSCATED_EMAIL_ADDRESS = /[a-zA-Z][a-zA-Z0-9_-]*(?:#{OBFUSCATED_EMAIL_DOT}[a-zA-Z][a-zA-Z0-9_-]*)*#{OBFUSCATED_EMAIL_AT}(?:[a-zA-Z0-9_-]{1,63}#{OBFUSCATED_EMAIL_DOT})*[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*#{OBFUSCATED_EMAIL_DOT}#{PUBLIC_SUFFIX}(?=[^a-zA-Z0-9\._-]|$)/
# @see OBFUSCATED_EMAIL_ADDRESS
OBFUSCATED_EMAIL_ADDR = OBFUSCATED_EMAIL_ADDRESS
# Regular expression to find phone numbers in text
#
# @since 0.5.0
PHONE_NUMBER = /(?:\d[ \-\.]?)?(?:\d{3}[ \-\.]?)?\d{3}[ \-\.]?\d{4}(?:x\d+)?/
# Regular expression to find Social Security Numbers (SSNs) in text
#
# @since 1.0.0
SSN = /(?<=[^\d]|^)\d{3}-\d{2}-\d{4}(?=[^\d]|$)/
# Regular expression to find AMEX card numbers in text
#
# @since 1.0.0
AMEX_CC = /(?<=[^\d]|^)3[47][0-9]{13}(?=[^\d]|$)/
# Regular expression to find Discord card numbers in text
#
# @since 1.0.0
DISCOVER_CC = /(?<=[^\d]|^)(?:65[4-9][0-9]{13}|64[4-9][0-9]{13}|6011[0-9]{12}|(?:622(?:12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])[0-9]{10}))(?=[^\d]|$)/
# Regular expression to find Masterdard numbers in text
#
# @since 1.0.0
MASTERCARD_CC = /(?<=[^\d]|^)(?:5[1-5][0-9]{14}|2(?:22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))(?=[^\d]|$)/
# Regular expression to find VISA numbers in text
#
# @since 1.0.0
VISA_CC = /(?<=[^\d]|^)4[0-9]{12}(?:[0-9]{3})?(?=[^\d]|$)/
# Regular expression to find VISA Masterdard numbers in text
#
# @since 1.0.0
VISA_MASTERCARD_CC = /(?<=[^\d]|^)(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14})(?=[^\d]|$)/
# Regular expression to find Credit Card (CC) numbers in text
#
# @since 1.0.0
CC = /#{VISA_CC}|#{VISA_MASTERCARD_CC}|#{MASTERCARD_CC}|#{DISCOVER_CC}|#{AMEX_CC}/
end
end
end
end