summaryrefslogtreecommitdiffhomepage
path: root/client/web/src/hooks/auth.ts
blob: 1fa26aec557eedbefe18f3ea4d4bf255c3c24be7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { useCallback, useEffect, useState } from "react"
import { apiFetch } from "src/api"

export type AuthResponse = {
  ok: boolean
  authUrl?: string
}

// useAuth reports and refreshes Tailscale auth status
// for the web client.
export default function useAuth() {
  const [data, setData] = useState<AuthResponse>()
  const [loading, setLoading] = useState<boolean>(false)

  const loadAuth = useCallback((wait?: boolean) => {
    const url = wait ? "/auth?wait=true" : "/auth"
    setLoading(true)
    return apiFetch(url, "GET")
      .then((r) => r.json())
      .then((d) => {
        setLoading(false)
        setData(d)
      })
      .catch((error) => {
        setLoading(false)
        console.error(error)
      })
  }, [])

  useEffect(() => {
    loadAuth()
  }, [])

  const waitOnAuth = useCallback(() => loadAuth(true), [])

  return { data, loading, waitOnAuth }
}