aboutsummaryrefslogtreecommitdiff
path: root/tea-cleaner/TeaCleaner/Filter.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-06-29 15:10:26 +0200
committerEugen Wissner <belka@caraus.de>2026-06-29 15:10:26 +0200
commit5cb4767698cf5b15906fad1d43ac0cfb5ec76ff4 (patch)
tree39038f6777ad9adebca0a9e0ba5a19843e8760be /tea-cleaner/TeaCleaner/Filter.hs
parent620038356a50f30459820833fdf3a38250c6cbf9 (diff)
downloadkazbek-master.tar.gz
Remove tea-cleanerHEADmaster
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.hs64
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