tea-cleaner: Read configuration file
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user