diff options
| author | LLLL Colonq <llll@colonq> | 2024-11-14 21:33:19 -0500 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2024-11-14 21:33:19 -0500 |
| commit | 78223d43d02d20996003e12fe2c51ae1072d55fa (patch) | |
| tree | e9ac49953293050b3c77adc14933d6a46488c854 /src | |
| parent | cf0070ac5a78d8042fa74d407fb9cb65352e2066 (diff) | |
Registration page
Diffstat (limited to 'src')
| -rw-r--r-- | src/Auth.js | 15 | ||||
| -rw-r--r-- | src/Main.purs | 87 |
2 files changed, 88 insertions, 14 deletions
diff --git a/src/Auth.js b/src/Auth.js index 7254c40..81ddad9 100644 --- a/src/Auth.js +++ b/src/Auth.js @@ -30,16 +30,17 @@ function getFragmentQuery() { export const _getToken = (Just) => (Nothing) => (pair) => () => { const frag = getFragmentQuery(); const token = frag.get("id_token"); - if (token) { - document.cookie = `id_token=${token}; path=/; SameSite=Strict`; - } - let id_token = null; + document.location.hash = ""; + // if (token) { + // document.cookie = `id_token=${token}; path=/; SameSite=Strict`; + // } + // let id_token = null; let authnonce = null; for (let c of document.cookie.split("; ")) { const [k, v] = c.split("="); - if (k === "id_token") id_token = v; - else if (k === "authnonce") authnonce = v; + // if (k === "id_token") id_token = v; + if (k === "authnonce") authnonce = v; } - if (id_token && authnonce) return Just(pair(id_token)(authnonce)); + if (token && authnonce) return Just(pair(token)(authnonce)); return Nothing; }; diff --git a/src/Main.purs b/src/Main.purs index bb5fa57..a7c9726 100644 --- a/src/Main.purs +++ b/src/Main.purs @@ -5,12 +5,14 @@ import Prelude import Audio as Audio import Auth (AuthInfo, authHeader, getToken, startTwitchAuth) import Config as Config +import Data.String as String import Data.Array (head) import Data.Array as Array import Data.Foldable (fold) import Data.Maybe (Maybe(..)) import Data.Traversable (for, for_) import Data.Tuple (Tuple(..)) +import Data.HTTP.Method (Method(..)) import Effect (Effect) import Effect.Aff (Aff, launchAff_) import Effect.Class (class MonadEffect, liftEffect) @@ -91,6 +93,24 @@ appendText parent s = do setText :: forall m. MonadEffect m => DOM.Element -> String -> m Unit setText e s = liftEffect $ DOM.Node.setTextContent s $ DOM.El.toNode e +addClass :: forall m. MonadEffect m => String -> DOM.Element -> m Unit +addClass c e = do + cl <- liftEffect $ DOM.El.classList e + _ <- liftEffect $ DOM.DTL.add cl c + pure unit + +removeClass :: forall m. MonadEffect m => String -> DOM.Element -> m Unit +removeClass c e = do + cl <- liftEffect $ DOM.El.classList e + _ <- liftEffect $ DOM.DTL.remove cl c + pure unit + +toggleClass :: forall m. MonadEffect m => String -> DOM.Element -> m Unit +toggleClass c e = do + cl <- liftEffect $ DOM.El.classList e + _ <- liftEffect $ DOM.DTL.toggle cl c + pure unit + updateSubtitle :: Aff Unit updateSubtitle = do subtitle <- byId "lcolonq-subtitle" @@ -107,8 +127,12 @@ checkAuth auth = do } resp -mainHomepage :: Effect Unit -mainHomepage = launchAff_ do +mainApi :: Effect Unit +mainApi = launchAff_ do + pure unit + +mainPubnix :: Effect Unit +mainPubnix = launchAff_ do liftEffect $ log "hi" startModel marq <- byId "lcolonq-marquee" @@ -125,7 +149,7 @@ mainHomepage = launchAff_ do updateSubtitle subtitle <- byId "lcolonq-subtitle" listen subtitle "click" \_ev -> do - startTwitchAuth + -- startTwitchAuth launchAff_ updateSubtitle for_ (Array.range 0 6) \i -> do @@ -148,10 +172,59 @@ mainObs :: Effect Unit mainObs = launchAff_ do startModel +buttonPress :: String -> Aff Unit +buttonPress b = do + void $ fetch (Config.apiServer <> "/sentiment/" <> b) + { method: POST + } +mainButton :: Effect Unit +mainButton = launchAff_ do + liftEffect $ log "hello from button" + green <- byId "lcolonq-button-link-green" + listen green "click" \_ev -> do + liftEffect $ log "+2" + launchAff_ $ buttonPress "green" + red <- byId "lcolonq-button-link-red" + listen red "click" \_ev -> do + liftEffect $ log "-2" + launchAff_ $ buttonPress "red" + +mainRegister :: Effect Unit +mainRegister = launchAff_ do + liftEffect $ log "hello from registration page" + link <- byId "lcolonq-register-link" + getToken >>= case _ of + Just a@(Tuple t n) -> do -- if there's an auth token in the fragment, ask the API to register us + { text: resp } <- fetch (Config.apiServer <> "/register") + { headers: + { "Authorization": authHeader a + } + } + r <- resp + case String.split (String.Pattern " ") r of + [user, pass] -> do + container <- byId "lcolonq-registered-container" + removeClass "lcolonq-invisible" container + fieldUsername <- byId "lcolonq-registered-username" + setText fieldUsername user + fieldPassword <- byId "lcolonq-registered-password" + setText fieldPassword pass + _ -> do + container <- byId "lcolonq-register-error-container" + removeClass "lcolonq-invisible" container + _ -> do -- otherwise, show the button to register + container <- byId "lcolonq-register-container" + removeClass "lcolonq-invisible" container + listen link "click" \_ev -> do + liftEffect $ log "register" + startTwitchAuth + main :: Effect Unit main = case Config.mode of - 0 -> mainHomepage - 1 -> mainExtension - 2 -> mainObs - -- 3 -> mainButton + 0 -> mainApi + 1 -> mainPubnix + 2 -> mainExtension + 3 -> mainObs + 4 -> mainButton + 5 -> mainRegister _ -> throw "unknown mode" |
