2023-03-27 17:53:18 +02:00
package limits
import (
2023-03-27 19:51:48 +02:00
"github.com/jmoiron/sqlx"
2023-03-27 21:29:25 +02:00
"github.com/openziti/zrok/controller/emailUi"
2023-03-27 17:53:18 +02:00
"github.com/openziti/zrok/controller/store"
2023-03-29 22:14:57 +02:00
"github.com/openziti/zrok/util"
2023-03-27 21:29:25 +02:00
"github.com/pkg/errors"
2023-03-27 17:53:18 +02:00
"github.com/sirupsen/logrus"
)
type accountWarningAction struct {
2023-06-05 22:01:04 +02:00
str * store . Store
cfg * emailUi . Config
2023-03-27 17:53:18 +02:00
}
2023-06-05 22:01:04 +02:00
func newAccountWarningAction ( cfg * emailUi . Config , str * store . Store ) * accountWarningAction {
return & accountWarningAction { str , cfg }
2023-03-27 17:53:18 +02:00
}
2023-06-05 22:01:04 +02:00
func ( a * accountWarningAction ) HandleAccount ( acct * store . Account , rxBytes , txBytes int64 , limit * BandwidthPerPeriod , _ * sqlx . Tx ) error {
2023-03-27 17:53:18 +02:00
logrus . Infof ( "warning '%v'" , acct . Email )
2023-03-27 21:29:25 +02:00
2023-05-01 20:03:34 +02:00
if a . cfg != nil {
rxLimit := "(unlimited bytes)"
if limit . Limit . Rx != Unlimited {
rxLimit = util . BytesToSize ( limit . Limit . Rx )
}
txLimit := "(unlimited bytes)"
if limit . Limit . Tx != Unlimited {
txLimit = util . BytesToSize ( limit . Limit . Tx )
}
totalLimit := "(unlimited bytes)"
if limit . Limit . Total != Unlimited {
totalLimit = util . BytesToSize ( limit . Limit . Total )
}
detail := newDetailMessage ( )
detail = detail . append ( "Your account has received %v and sent %v (for a total of %v), which has triggered a transfer limit warning." , util . BytesToSize ( rxBytes ) , util . BytesToSize ( txBytes ) , util . BytesToSize ( rxBytes + txBytes ) )
detail = detail . append ( "This zrok instance only allows an account to receive %v, send %v, totalling not more than %v for each %v." , rxLimit , txLimit , totalLimit , limit . Period )
detail = detail . append ( "If you exceed the transfer limit, access to your shares will be temporarily disabled (until the last %v falls below the transfer limit)" , limit . Period )
if err := sendLimitWarningEmail ( a . cfg , acct . Email , detail ) ; err != nil {
return errors . Wrapf ( err , "error sending limit warning email to '%v'" , acct . Email )
}
} else {
logrus . Warnf ( "skipping warning email for account limit; no email configuration specified" )
2023-03-27 21:29:25 +02:00
}
2023-03-27 17:53:18 +02:00
return nil
}