diff options
| author | Eugen Wissner <belka@caraus.de> | 2026-06-29 15:10:26 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2026-06-29 15:10:26 +0200 |
| commit | 5cb4767698cf5b15906fad1d43ac0cfb5ec76ff4 (patch) | |
| tree | 39038f6777ad9adebca0a9e0ba5a19843e8760be /tea-cleaner/TeaCleaner/Filter.hs | |
| parent | 620038356a50f30459820833fdf3a38250c6cbf9 (diff) | |
| download | kazbek-master.tar.gz | |
Since I do not use gitea anymore and cannot maintain the compatibility
with the new versions.
Diffstat (limited to 'tea-cleaner/TeaCleaner/Filter.hs')
| -rw-r--r-- | tea-cleaner/TeaCleaner/Filter.hs | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/tea-cleaner/TeaCleaner/Filter.hs b/tea-cleaner/TeaCleaner/Filter.hs deleted file mode 100644 index f7d3315..0000000 --- a/tea-cleaner/TeaCleaner/Filter.hs +++ /dev/null @@ -1,64 +0,0 @@ -{- This Source Code Form is subject to the terms of the Mozilla Public License, - v. 2.0. If a copy of the MPL was not distributed with this file, You can - obtain one at https://mozilla.org/MPL/2.0/. -} - -module TeaCleaner.Filter - ( FilterResult(..) - , UserFilter(..) - , filterByActivities - , filterByUserProperties - ) where - -import qualified Data.Text as Text -import Data.Time (LocalTime(..), ZonedTime(..), UTCTime(..), addUTCTime) -import qualified Data.Vector as Vector -import TeaCleaner.Client (Activity(..), User(..), getActivities) -import TeaCleaner.Configuration (Settings(..)) -import GHC.Records (HasField(..)) - -data UserFilter - = PassFilter - | SuspiciousFilter - | FailedFilter - deriving (Eq, Show) - -data FilterResult = FilterResult User UserFilter - deriving (Show) - -filterByUserProperties :: Settings -> User -> FilterResult -filterByUserProperties settings user@User{ created, lastLogin } - | noLoginSinceRegistration = FilterResult user FailedFilter - | containsSpamWords = FilterResult user FailedFilter - | percentEncodedWebsite = FilterResult user FailedFilter - | hasFullDescription = FilterResult user SuspiciousFilter - | unusualMailDomains = FilterResult user SuspiciousFilter - | otherwise = FilterResult user PassFilter - where - percentEncodedWebsite = Text.elem '%' $ getField @"website" user - unusualMailDomains = - let predicate = (`Text.isSuffixOf` getField @"email" user) - in any predicate (getField @"mailDomains" settings) - containsSpamWords = - let lowerCaseDescription = Text.toLower $ getField @"description" user - lowerCaseWebsite = Text.toLower $ getField @"website" user - predicate word = Text.isInfixOf word lowerCaseWebsite - || Text.isInfixOf word lowerCaseDescription - in any predicate (getField @"spamWords" settings) - hasFullDescription - = not (Text.null $ getField @"description" user) - && not (Text.null $ getField @"website" user) - noLoginSinceRegistration = - let period = fromIntegral (getField @"noLogin" settings) * (-3600) * 24 - periodAgo = utctDay $ addUTCTime period $ getField @"now" settings - in zonedDay created < periodAgo && zonedDay created == zonedDay lastLogin - zonedDay = localDay . zonedTimeToLocalTime - -filterByActivities :: Settings -> User -> IO FilterResult -filterByActivities settings user = getActivities settings user - >>= evalActivities - where - evalActivities activities - | Just (Activity{ opType }, rest) <- Vector.uncons activities - , Vector.null rest - , opType == "create_repo" = pure $ FilterResult user FailedFilter - evalActivities _ = pure $ FilterResult user PassFilter |
