tea-cleaner: Read configuration file
This commit is contained in:
@ -1,32 +1,43 @@
|
||||
module TeaCleaner.Filter
|
||||
( filterByActivities
|
||||
( FilterResult(..)
|
||||
, UserFilter(..)
|
||||
, filterByActivities
|
||||
, filterByUserProperties
|
||||
) where
|
||||
|
||||
import Data.Text (StrictText)
|
||||
import qualified Data.Text as Text
|
||||
import Data.Time (LocalTime(..), ZonedTime(..))
|
||||
import Data.Time.Calendar.OrdinalDate (fromOrdinalDate)
|
||||
import qualified Data.Vector as Vector
|
||||
import Text.URI (URI)
|
||||
import TeaCleaner.Client (Activity(..), User(..), getActivities)
|
||||
import TeaCleaner.Configuration (Settings(..))
|
||||
|
||||
filterByUserProperties :: User -> Bool
|
||||
filterByUserProperties User{ created, lastLogin, description, website }
|
||||
= zonedDay created == zonedDay lastLogin
|
||||
&& zonedDay created > fromOrdinalDate 2024 1
|
||||
&& zonedDay created < fromOrdinalDate 2025 17
|
||||
&& not (Text.null description)
|
||||
&& not (Text.null website)
|
||||
data UserFilter
|
||||
= PassFilter
|
||||
| SuspiciousFilter
|
||||
| FailedFilter
|
||||
deriving (Eq, Show)
|
||||
|
||||
data FilterResult = FilterResult User UserFilter
|
||||
deriving (Show)
|
||||
|
||||
filterByUserProperties :: User -> FilterResult
|
||||
filterByUserProperties user@User{ created, lastLogin, description, website }
|
||||
| zonedDay created == zonedDay lastLogin
|
||||
, zonedDay created > fromOrdinalDate 2024 1
|
||||
, zonedDay created < fromOrdinalDate 2025 17
|
||||
, not (Text.null description)
|
||||
, not (Text.null website) = FilterResult user SuspiciousFilter
|
||||
| otherwise = FilterResult user PassFilter
|
||||
where
|
||||
zonedDay = localDay . zonedTimeToLocalTime
|
||||
|
||||
filterByActivities :: URI -> StrictText -> User -> IO Bool
|
||||
filterByActivities server token user
|
||||
= getActivities server token user
|
||||
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 = pure $ opType == "create_repo"
|
||||
evalActivities _ = pure False
|
||||
, Vector.null rest
|
||||
, opType == "create_repo" = pure $ FilterResult user SuspiciousFilter
|
||||
evalActivities _ = pure $ FilterResult user PassFilter
|
||||
|
Reference in New Issue
Block a user