Page Menu
Home
WMGMC Issues
搜索
Configure Global Search
登录
Files
F15978
functions.ratelimit.inc.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
订阅
标记用于日后
授予令牌
Size
8 KB
Referenced Files
None
订阅者
None
functions.ratelimit.inc.php
View Options
<?php
function
ratelimit
(
$_action
,
$_scope
,
$_data
=
null
,
$_extra
=
null
)
{
global
$redis
;
$_data_log
=
$_data
;
switch
(
$_action
)
{
case
'edit'
:
if
(!
hasACLAccess
(
"ratelimit"
))
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_type
,
$_data_log
,
$_attr
),
'msg'
=>
'access_denied'
);
return
false
;
}
switch
(
$_scope
)
{
case
'domain'
:
if
(!
is_array
(
$_data
[
'object'
]))
{
$objects
=
array
();
$objects
[]
=
$_data
[
'object'
];
}
else
{
$objects
=
$_data
[
'object'
];
}
foreach
(
$objects
as
$object
)
{
$rl_value
=
intval
(
$_data
[
'rl_value'
]);
$rl_frame
=
$_data
[
'rl_frame'
];
if
(!
in_array
(
$rl_frame
,
array
(
's'
,
'm'
,
'h'
,
'd'
)))
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
'rl_timeframe'
);
continue
;
}
if
(!
hasDomainAccess
(
$_SESSION
[
'mailcow_cc_username'
],
$_SESSION
[
'mailcow_cc_role'
],
$object
))
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
'access_denied'
);
continue
;
}
if
(
empty
(
$rl_value
))
{
try
{
$redis
->
hDel
(
'RL_VALUE'
,
$object
);
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
continue
;
}
}
else
{
try
{
$redis
->
hSet
(
'RL_VALUE'
,
$object
,
$rl_value
.
' / 1'
.
$rl_frame
);
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
continue
;
}
}
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'success'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'rl_saved'
,
$object
)
);
}
break
;
case
'mailbox'
:
if
(!
is_array
(
$_data
[
'object'
]))
{
$objects
=
array
();
$objects
[]
=
$_data
[
'object'
];
}
else
{
$objects
=
$_data
[
'object'
];
}
foreach
(
$objects
as
$object
)
{
$rl_value
=
intval
(
$_data
[
'rl_value'
]);
$rl_frame
=
$_data
[
'rl_frame'
];
if
(!
in_array
(
$rl_frame
,
array
(
's'
,
'm'
,
'h'
,
'd'
)))
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
'rl_timeframe'
);
continue
;
}
if
(!
hasMailboxObjectAccess
(
$_SESSION
[
'mailcow_cc_username'
],
$_SESSION
[
'mailcow_cc_role'
],
$object
)
||
(
$_SESSION
[
'mailcow_cc_role'
]
!=
'admin'
&&
$_SESSION
[
'mailcow_cc_role'
]
!=
'domainadmin'
&&
$_SESSION
[
'access_all_exception'
]
!=
'1'
))
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
'access_denied'
);
continue
;
}
if
(
empty
(
$rl_value
))
{
try
{
$redis
->
hDel
(
'RL_VALUE'
,
$object
);
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
continue
;
}
}
else
{
try
{
$redis
->
hSet
(
'RL_VALUE'
,
$object
,
$rl_value
.
' / 1'
.
$rl_frame
);
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
continue
;
}
}
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'success'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'rl_saved'
,
$object
)
);
}
break
;
}
break
;
case
'get'
:
switch
(
$_scope
)
{
case
'domain'
:
if
(!
hasDomainAccess
(
$_SESSION
[
'mailcow_cc_username'
],
$_SESSION
[
'mailcow_cc_role'
],
$_data
))
{
return
false
;
}
try
{
if
(
$rl_value
=
$redis
->
hGet
(
'RL_VALUE'
,
$_data
))
{
$rl
=
explode
(
' / 1'
,
$rl_value
);
$data
[
'value'
]
=
$rl
[
0
];
$data
[
'frame'
]
=
$rl
[
1
];
return
$data
;
}
else
{
return
false
;
}
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
return
false
;
}
return
false
;
break
;
case
'mailbox'
:
if
(!
hasMailboxObjectAccess
(
$_SESSION
[
'mailcow_cc_username'
],
$_SESSION
[
'mailcow_cc_role'
],
$_data
)
||
(
$_SESSION
[
'mailcow_cc_role'
]
!=
'admin'
&&
$_SESSION
[
'mailcow_cc_role'
]
!=
'domainadmin'
))
{
return
false
;
}
try
{
if
(
$rl_value
=
$redis
->
hGet
(
'RL_VALUE'
,
$_data
))
{
$rl
=
explode
(
' / 1'
,
$rl_value
);
$data
[
'value'
]
=
$rl
[
0
];
$data
[
'frame'
]
=
$rl
[
1
];
return
$data
;
}
else
{
return
false
;
}
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
return
false
;
}
return
false
;
break
;
}
break
;
case
'delete'
:
$data
[
'hash'
]
=
$_data
;
if
(
$_SESSION
[
'mailcow_cc_role'
]
!=
'admin'
||
!
preg_match
(
'/^RL[0-9A-Za-z=]+$/i'
,
trim
(
$data
[
'hash'
])))
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_type
,
$_data_log
,
$_attr
),
'msg'
=>
'access_denied'
);
return
false
;
}
try
{
$data_rllog
=
$redis
->
lRange
(
'RL_LOG'
,
0
,
-
1
);
if
(
$data_rllog
)
{
foreach
(
$data_rllog
as
$json_line
)
{
if
(
preg_match
(
'/'
.
$data
[
'hash'
]
.
'/i'
,
$json_line
))
{
$redis
->
lRem
(
'RL_LOG'
,
$json_line
,
0
);
}
}
}
if
(
$redis
->
type
(
$data
[
'hash'
])
==
Redis
::
REDIS_HASH
)
{
$redis
->
delete
(
$data
[
'hash'
]);
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'success'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
'hash_deleted'
);
return
true
;
}
else
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'warning'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
'hash_not_found'
);
return
false
;
}
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_scope
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
return
false
;
}
return
false
;
break
;
}
}
File Metadata
详情
附加的
Mime Type
text/x-php
Expires
9月 9 Tue, 6:07 AM (11 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5454
默认替代文本
functions.ratelimit.inc.php (8 KB)
Attached To
Mode
rMAILCOW mailcow-tracking
附加的
Detach File
Event Timeline
Log In to Comment