source_api_userauth.bs

' needed for SignOut() and ServerInfo()
import "pkg:/source/api/ApiClient.bs"
import "pkg:/source/utils/misc.bs"
import "pkg:/source/utils/session.bs"

function get_token(username as string, password as string)
  json = GetApi().AuthenticateByName(username, password)

  if not isValid(json) then return invalid

  userdata = CreateObject("roSGNode", "UserData")
  userdata.json = json
  userdata.callFunc("saveToRegistry")

  return userdata
end function

function AboutMe(id = "" as string)
  if id = ""
    globalUser = m.global.user
    if isValid(globalUser.id) and globalUser.id <> ""
      id = globalUser.id
    else
      return invalid
    end if
  end if

  return GetApi().GetUser(id)
end function

sub SignOut(deleteSavedEntry = true as boolean)
  if deleteSavedEntry
    unset_user_setting("authToken")
    unset_user_setting("username")
  end if
  unset_setting("active_user")
  user.Logout()
  m.global.sceneManager.currentUser = ""
  group = m.global.sceneManager.callFunc("getActiveScene")
  group.optionsAvailable = false
end sub

function AvailableUsers()
  users = parseJson(get_setting("available_users", "[]"))
  return users
end function

function ServerInfo()
  return server.Discover()
end function

function GetPublicUsers()
  return GetApi().GetPublicUsers()
end function

function initQuickConnect()
  jsonResponse = GetApi().InitiateQuickConnect()
  if not isValid(jsonResponse)
    return invalid
  end if

  if not isValid(jsonResponse.Secret)
    return invalid
  end if

  return jsonResponse
end function

function checkQuickConnect(secret)
  jsonResponse = GetApi().ConnectQuickConnect(secret)
  if not isValid(jsonResponse)
    return false
  end if

  if isValid(jsonResponse.Authenticated) and jsonResponse.Authenticated = true
    return true
  end if

  return false
end function

function AuthenticateViaQuickConnect(secret)
  jsonResponse = GetApi().AuthenticateWithQuickConnect(secret)
  if isValid(jsonResponse) and isValid(jsonResponse.AccessToken) and isValid(jsonResponse.User)
    globalUser = m.global.user
    userdata = CreateObject("roSGNode", "UserData")
    userdata.json = jsonResponse
    globalUser.id = jsonResponse.User.Id
    globalUser.authToken = jsonResponse.AccessToken
    userdata.callFunc("saveToRegistry")

    return true
  end if

  return false
end function