---
- # èçìåíåíèÿ â ðååñòðå
id: rusu.notify
weight: 0
last: 1
match:
- from: 'nobody@(?:ripn.net|registry.su)'
#OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'NFY.*UPDATED'
- NOT: { x_filename: ~ }
- subject: 'Notification of (FID|RIPN) [dD]atabase changes?'
processors:
- processor: chain
- # íîâûé îáúåêò
id: _rusu.notify.new_object
weight: 0
match:
body: 'New object created'
processors:
- processor: filter
filters:
- '(?s).*New object created:'
- '(?s)Thank [yY]ou.*'
- processor: regexp
regexps:
$1=~body: '([\w_-]+):\s*(.+)'
- processor: last
- # íîâûé îáúåêò
id: _rusu.notify.deleted
weight: 2
match:
body:
- '\n(PREVIOUS OBJECT|Îáúåêò):\s*\n'
- '\n(DELETED|ÓÄÀËÅÍ)\s*\n'
processors:
- processor: regexp
regexps:
domain=~body: 'domain:\s*(.+)'
- processor: last
- # ïåðåíîñ ê íàì èíèöèèðîâàí
id: _rusu.notify.transfer_in_started
weight: 1
match:
body:
- '\n(REPLACED BY|Çàìåíåí íà):\s*\n'
- '\n(PREVIOUS OBJECT|Îáúåêò):\s*\n'
- '\n\s{0,2}domain:\s+(.+?)\n'
- '\n\+ reg\-ch:\s+(TEST)?REG(?:[12]|RU)\d?-[\w-]+\n' # äëÿ òåñòîâ
processors:
- processor: filter
filters:
# îñòàâëÿåì òîëüêî òåêñò ïîñëå "REPLACED BY", òî åñòü íà ÷òî çàìåí¸í
- '(?s).*(REPLACED BY|Çàìåíåí íà):'
- '(?s)Thank you.*'
- [ 'registrar', 'transfer_from' ]
- [ '\+ reg\-ch', 'transfer_to' ]
- processor: regexp
regexps:
$1=~body: '\s*(.+?):\s*(.+)'
- processor: last
- # ïåðåíîñ çàêîí÷åí (îò íàñ èëè ê íàì)
id: _rusu.notify.transfer_finished
weight: 1
match:
body:
- '\n(REPLACED BY|Çàìåíåí íà):\s*\n'
- '\n(PREVIOUS OBJECT|Îáúåêò):\s*\n'
- '\n\s{0,2}domain:\s+(.+?)\n'
- '\n\* registrar:\s+[\w-]+\n'
- '\n\- reg\-ch:\s+[\w\-]+\n'
processors:
- processor: filter
filters:
- '(?s).*(PREVIOUS OBJECT|Îáúåêò):'
- '(?s)(REPLACED BY|Çàìåíåí íà):.*'
- [ '(?m)^\* registrar', 'transfered_from' ]
- [ '(?m)^\- reg\-ch', 'transfered_to' ]
- processor: regexp
regexps:
$1=~body: '\s*(.+?):\s*(.+)'
- processor: last
- # íîâûé îáúåêò
id: _rusu.notify.updated
weight: 1.5
match:
body:
- '(?:PREVIOUS OBJECT|Îáúåêò)'
- '(?:REPLACED BY|Çàìåíåí íà)'
processors:
- processor: regexp
regexps:
domain=~body,once: 'domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
$1=~body: '(?m-s)^([*+]\s+.+?):\s+(.+)$'
- processor: last
- # íåò äåíåã
id: _rusu.notify.nomoney
weight: 2
match:
body: 'Not enough money for new domain'
processors:
- processor: last
- # ñïèñîê äîìåíîâ çà ìåñÿö
id: rusu.domains_report
weight: 10
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'NFY.*TCSTAT'
- NOT: { x_filename: ~ }
- subject: 'Domain report for'
processors:
- processor: regexp
regexps:
date=~subject,once: 'for ([-\w\d]+)'
subject=~subject,once: '(.*)'
total=~body,once: 'Èòîãî (\d+) øò'
sum=~body,once: 'íà ñóììó (\d+\.\d+) ðóá'
body=~body,once: '(?s)(.*)'
- processor: last
- # ñèñòåìíûå óâåäîìëåíèÿ
id: rusu.registry.notify
weight: 7
last: 1
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'NFY.*(TCSF|NOMON|NEWMONEY|REGCREDIT|REGSPEED)'
- NOT: { x_filename: ~ }
- subject: 'TC-[SR]U'
processors:
- processor: chain
- # óäàëèëè îáúåêò
id: _rusu.registry.notify.deleted_text
match:
- body:
- 'Ñðîê ðåãèñòðàöèè äîìåíà\s*[-\w\d\.]+\s*çàêîí÷èëñÿ.'
processors:
- processor: regexp
regexps:
domain=~body: 'ðåãèñòðàöèè äîìåíà ([-\w\d\.]+)'
- processor: last
- # îò÷¸ò î äåíüãàõ ïðèø¸ë
id: _rusu.registry.notify.nomon
match:
subject: 'Áàëàíñ ëèöåâîãî ñ÷[å¸]òà äîãîâîðà (?:59/TC-REG|6/SU-REG)'
processors:
- processor: regexp
regexps:
debet=~body: 'â íàëè÷èè ñðåäñòâ: ([\d\.]+) ðóá'
credit=~body: 'Óñòàíîâëåíî êðåäèòîâ: ([\d\.]+) ðóá'
available=~body: 'Äîñòóïíî äëÿ èñïîëüçîâàíèÿ: ([\d\.]+) ðóá'
- processor: last
- # îò÷¸ò î ïîïîëíåíèè ñ÷¸òà
id: _rusu.registry.notify.newmoney
match:
subject: 'Çà÷èñëåíû ñðåäñòâà â ðàçìåðå'
processors:
- processor: regexp
regexps:
newmoney=~subject: 'â ðàçìåðå ([\d\.]+) ðóá'
- processor: last
- # îò÷¸ò îá èçìåíåíèè êðåäèòà
id: _rusu.registry.notify.regcredit
match:
subject: 'Óñòàíîâëåí ìåñÿ÷íûé êðåäèò â ðàçìåðå'
processors:
- processor: regexp
regexps:
regcredit=~subject: 'â ðàçìåðå ([\d\.]+) ðóá'
- processor: last
#Subject: TC-RU: Ñêîðîñòü äîñòóïà â ÒÖ äëÿ REGRU-REG-RIPN - 450 çàÿâîê/÷àñ.
- # ñêîðîñòü äîñòóïà ïîìåíÿëè
id: _rusu.registry.notify.regspeed
match:
subject: 'Ñêîðîñòü äîñòóïà â ÒÖ äëÿ REGRU-REG-RIPN'
processors:
- processor: regexp
regexps:
regspeed=~subject: 'REGRU-REG-RIPN - (\d+) çàÿâîê/÷àñ'
- processor: last
- # îòâåò íà action: NEW
id: rusu.response.new
weight: 2
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'ANS'
- NOT: { x_filename: ~ }
- body:
- 'Dear Colleague'
- '(?i)action:\s*NEW'
processors:
- processor: filter
filters:
- [ '(?s)> #\[TEMPLATES END\]#.*', "> #[TEMPLATES END]#\n" ]
- processor: split_msg
begin: '(?si)action:\s*NEW[^#]*#\[DOMAIN TEMPLATE\]#'
separator: '> #\[DOMAIN TEMPLATE\]#'
end: '> #\[TEMPLATES END\]#'
emulate: 0
- processor: chain
- # âñ¸ ïëîõî
id: _rusu.response.new.fail
match:
body: 'FATAL ERROR|Not enough money for new domain|Credit balance low'
processors:
- processor: filter
filters:
#- '(?s).*#\[DOMAIN TEMPLATE]\#'
- '.*FATAL ERRORS.*'
- processor: regexp
regexps:
error_code=~body: '(?m)^(?!>).+'
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
- # âñ¸ õîðîøî
id: _rusu.response.new.ok
weight: -1
match:
body: 'New object created'
processors:
- processor: regexp
regexps:
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
-
id: rusu.response.update
weight: 1
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'ANS'
- NOT: { x_filename: ~ }
- body:
- 'Dear Colleague'
- '(?i)action:\s*UPDATE'
processors:
- processor: filter
filters:
- [ '(?s)> #\[TEMPLATES END\]#.*', "> #[TEMPLATES END]#\n" ]
- processor: split_msg
begin: '(?si)action:\s*UPDATE[^#]*#\[DOMAIN TEMPLATE\]#'
separator: '> #\[DOMAIN TEMPLATE\]#'
end: '> #\[TEMPLATES END\]#'
emulate: 0
- processor: chain
-
id: _rusu.response.update.ok
match:
body:
#- '\n(PREVIOUS OBJECT|Îáúåêò):\n'
#- '\n(DELETED|ÓÄÀËÅÍ)\n'
- '(PREVIOUS OBJECT|Îáúåêò)'
- '(REPLACED BY|Çàìåíåí íà)'
processors:
- processor: regexp
regexps:
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
$1=~body: '(?m-s)^[*+]\s+(.+?):\s+(.+)$'
-
id: _rusu.response.update.fail
weight: 1
match:
body: 'FATAL ERROR'
processors:
- processor: filter
filters:
#- '(?s).*#\[DOMAIN TEMPLATE]\#'
- '.*FATAL ERRORS.*'
- processor: regexp
regexps:
error_code=~body: '(?m)^(?!>).+'
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
-
id: rusu.response.delete
weight: 5
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'ANS'
- NOT: { x_filename: ~ }
- body:
- 'Dear Colleague'
- 'action:\s*DELETE'
processors:
- processor: filter
filters:
- [ '(?s)> #\[TEMPLATES END\]#.*', "> #[TEMPLATES END]#\n" ]
- processor: split_msg
begin: '(?s)action:\s*DELETE[^#]*#\[DOMAIN TEMPLATE\]#'
separator: '> #\[DOMAIN TEMPLATE\]#'
end: '> #\[TEMPLATES END\]#'
emulate: 0
- processor: chain
-
id: _rusu.response.delete.ok
match:
body:
- '\n(?:PREVIOUS OBJECT|Îáúåêò):\n'
- '\n(?:DELETED|Óäàë[å¸]í)\n'
processors:
- processor: regexp
regexps:
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
$1=~body: '(?m-s)^[*+]\s+(.+?):\s+(.+)$'
-
id: _rusu.response.delete.fail
match:
body: 'FATAL ERROR'
processors:
- processor: filter
filters:
#- '(?s).*#\[DOMAIN TEMPLATE]\#'
- '.*FATAL ERRORS.*'
- processor: regexp
regexps:
error_code=~body: '(?m)^(?!>).+'
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
-
id: rusu.response.renew
weight: 3
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'ANS'
- NOT: { x_filename: ~ }
- body:
- 'Dear Colleague'
- '(?i)action:\s*PROLONG'
processors:
- processor: filter
filters:
- [ '(?s)> #\[TEMPLATES END\]#.*', "> #[TEMPLATES END]#\n" ]
- processor: split_msg
begin: '(?si)action:\s*PROLONG[^#]*#\[DOMAIN TEMPLATE\]#'
separator: '> #\[DOMAIN TEMPLATE\]#'
end: '> #\[TEMPLATES END\]#'
emulate: 0
- processor: chain
-
id: _rusu.response.renew.ok
match:
body:
- '(PREVIOUS OBJECT|Îáúåêò)'
- '(REPLACED BY|Çàìåíåí íà)'
processors:
- processor: regexp
regexps:
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
reg_till=~body: '(?m-s)^[*]\s+reg-till:\s+(.+)$'
-
id: _rusu.response.renew.fail
weight: 1
match:
body: 'FATAL ERROR|Not enough money for new domain|Credit balance low'
processors:
- processor: filter
filters:
#- '(?s).*#\[DOMAIN TEMPLATE]\#'
- '.*FATAL ERRORS.*'
- processor: regexp
regexps:
error_code=~body: '(?m)^(?!>).+'
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
-
id: rusu.get_response
weight: 4
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'ANS'
- NOT: { x_filename: ~ }
- body:
# - 'Information on object'
- 'action:\s*GET'
processors:
- processor: split_msg
begin: '> #\[(?:DOMAIN|REGISTRAR) TEMPLATE\]#\n'
separator: '> #\[(?:DOMAIN|REGISTRAR) TEMPLATE\]#\n'
end: '> #\[TEMPLATES END\]#\n\n'
#emulate: 1
- processor: chain
-
id: _rusu.get_response.ok
match:
body: 'Information on object'
processors:
- processor: filter
filters:
- '(?m).*Information on object.*\n\n'
- processor: regexp
regexps:
req_id=~subject: 'Re: ([\d\.]+)'
$1=~body: '(?m-s)^\s*([^\n>].+?):\s+(.+)$'
-
id: _rusu.get_response.fail
match:
body: 'FATAL ERROR'
processors:
- processor: filter
filters:
#- '(?s).*#\[DOMAIN TEMPLATE]\#'
- '.*FATAL ERRORS.*'
- processor: regexp
regexps:
error_code=~body: '(?m)^(?!>).+'
domain=~body: '>\s*domain:\s*(.+)'
req_id=~subject: 'Re: ([\d\.]+)'
- # íåàâòîðèçîâàííûé äîñòóï
id: rusu.authfailed
weight: 9
last: 1
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'AUTH.*AUTHFAILED'
- NOT: { x_filename: ~ }
- OR:
- message_id: 'AUTH.*AUTHFAILED'
- body: 'FID database access authentication violation'
- body: '(?s)ïîïûòêå íåàâòîðèçîâàííîãî\näîñòóïà'
processors:
- processor: regexp
regexps:
authfailed=~subject: '(?s)(.*)'
- processor: last
- # îøèáêà â çàïðîñå
id: rusu.ansfailed
weight: 9
last: 1
match:
- from:
OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
- OR:
- x_filename: 'ANS.*ANSFAILED'
- NOT: { x_filename: ~ }
- OR:
- message_id: 'ANS.*ANSFAILED'
- body: 'We are sorry to disappoint You'
processors:
- processor: regexp
regexps:
req_id=~subject: 'Request ([\d.]+)\:'
- processor: last
#- # ñëèøêîì ìíîãî çàïðîñîâ çà ÷àñ
# id: rusu.requests_limit
# last: 1
# match:
# - from:
# OR: [ 'nobody@ripn.net', 'nobody@registry.su' ]
# - body:
# - 'Your request is not processed'
# - 'maximum requests per hour limit'
## - OR:
## - x_filename: 'AUTH.*AUTHFAILED'
## - NOT: { x_filename: ~ }
## - message_id: 'AUTH.*AUTHFAILED'
# processors:
# - processor: last
-
id: gtld.transfer_finished
match:
from: automail@resellerclub.com
to: reg@reg.ru
subj: '^Transfer Request.*Completed'
processors:
- processor: regexp
regexps:
domain=~body: '(?i)Domain Name: ([\-a-z0-9\.]+)'
order_id=~body: '(?i)Order ID: (\d+)'
- # Ïåðåíîñ îò íàñ â ïðåäåëàõ DirectI
id: gtld.moveout_finished
match:
from: automail@resellerclub.com
to: reg@reg.ru
subj: 'Completed: [\-a-z0-9\.]+ moved to another Account'
processors:
- processor: regexp
regexps:
domain=~subject: 'Completed: ([\-a-z0-9\.]+)'
- # Ïåðåíîñ îò íàñ çà DirectI
id: gtld.transout_finished
match:
from: automail@resellerclub.com
to: reg@reg.ru
subj: 'Completed: [\-a-z0-9\.]+ transferred away to'
processors:
- processor: regexp
regexps:
domain=~subject: 'Completed: ([\-a-z0-9\.]+)'