diff options
| author | Eugen Wissner <belka@caraus.de> | 2025-02-18 11:57:18 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2025-02-18 11:57:18 +0100 |
| commit | 06fa97bfcf255fd033d3b5bd77d77d68ec8beef6 (patch) | |
| tree | 4714437eb7b10325be5aaeb5744935167156c11c /tea-cleaner/Main.hs | |
| parent | 346b9dcfdf2a1c5d3339b4f3821080210316e6a9 (diff) | |
| download | kazbek-06fa97bfcf255fd033d3b5bd77d77d68ec8beef6.tar.gz | |
tea-cleaner: Read configuration file
Diffstat (limited to 'tea-cleaner/Main.hs')
| -rw-r--r-- | tea-cleaner/Main.hs | 54 |
1 files changed, 39 insertions, 15 deletions
diff --git a/tea-cleaner/Main.hs b/tea-cleaner/Main.hs index 08c3b89..949d62a 100644 --- a/tea-cleaner/Main.hs +++ b/tea-cleaner/Main.hs @@ -2,30 +2,45 @@ module Main ( main ) where -import Data.Text (StrictText) import Data.Vector (Vector) import qualified Data.Text as Text -import Text.URI (URI, mkURI) import qualified Data.Vector as Vector import qualified Data.Text.IO as Text.IO import qualified Data.Text.Lazy.IO as Text.Lazy.IO import qualified Data.Text.Lazy.Builder as Text.Builder import qualified Data.Text.Lazy.Builder.Int as Text.Builder import GHC.Records (HasField(..)) -import TeaCleaner.Filter (filterByActivities, filterByUserProperties) +import TeaCleaner.Filter + ( UserFilter(..) + , FilterResult(..) + , filterByActivities + , filterByUserProperties + ) import TeaCleaner.Client (User(..), getUsers, purgeUser) -import TeaCleaner.CommandLine (ProgramOptions(..), commandLineInfo, execParser) +import TeaCleaner.Configuration + ( ProgramOptions(..) + , Settings(..) + , decodeSettingsFile + , commandLineInfo + , execParser + ) +import Control.Monad (when) -printUsers :: URI -> StrictText -> Bool -> Vector User -> IO () -printUsers server token liveRun users = printCount - >> Vector.forM_ users (printUser liveRun) +handleResults :: Settings -> Bool -> Vector User -> IO () +handleResults settings liveRun users = printCount + >> Vector.forM_ users (handleResult settings liveRun) where printCount = let count = Text.Builder.decimal $ Vector.length users in Text.Lazy.IO.putStrLn $ Text.Builder.toLazyText $ "Count: " <> count - buildValue user = getField @"username" user <> "\n" + +handleResult :: Settings -> Bool -> User -> IO () +handleResult settings liveRun user = Text.IO.putStrLn buildValue + >> when liveRun (purgeUser settings user) + where + buildValue = getField @"username" user <> "\n" <> " Website: " <> getField @"website" user <> "\n" <> " Created: " <> Text.pack (show $ getField @"created" user) <> "\n" <> " Last login: " <> Text.pack (show $ getField @"lastLogin" user) <> "\n" @@ -34,14 +49,23 @@ printUsers server token liveRun users = printCount <> " Description: " <> getField @"description" user <> "\n" <> " Avatar: " <> getField @"avatarUrl" user <> "\n" <> "\n" - printUser True user = Text.IO.putStrLn (buildValue user) - >> purgeUser server token user - printUser False user = Text.IO.putStrLn (buildValue user) main :: IO () main = execParser commandLineInfo >>= withArguments where - withArguments ProgramOptions{..} = mkURI server >>= withServer liveRun token - withServer liveRun token server = getUsers server token - >>= Vector.filterM (filterByActivities server token) . Vector.filter filterByUserProperties - >>= printUsers server token liveRun + withArguments ProgramOptions{ liveRun } = decodeSettingsFile "config/tea-cleaner.toml" + >>= withSettings liveRun + +withSettings :: Bool -> Settings -> IO () +withSettings liveRun settings = getUsers settings + >>= Vector.foldM' foldFilterResult Vector.empty . fmap filterByUserProperties + >>= traverse (filterByActivities settings) + >>= Vector.foldM' foldFilterResult Vector.empty + >>= handleResults settings liveRun + where + foldFilterResult accumulator (FilterResult user SuspiciousFilter) + = pure $ Vector.snoc accumulator user + foldFilterResult accumulator (FilterResult _ PassFilter) = pure accumulator + foldFilterResult accumulator (FilterResult user FailedFilter) + = handleResult settings liveRun user + >> pure accumulator |
