From 1a47ff6779d828d690980f63a9f23e1c50125de3 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Thu, 25 Mar 2021 08:17:07 +0900 Subject: [PATCH] include/iruca: Add functions to get and set somebody's iruca status Iruca provides a REST-ful API that can be used more conveniently than the website. This commit adds functions for setting and getting an iruca user's status and status message from the commandline. --- include/iruca.sh | 146 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 include/iruca.sh diff --git a/include/iruca.sh b/include/iruca.sh new file mode 100644 index 0000000..2cd7548 --- /dev/null +++ b/include/iruca.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +__init() { + if ! include "array" "json"; then + return 1 + fi + + declare -xgr __iruca_state_present="在席" + declare -xgr __iruca_state_absent="退社" + declare -xgr __iruca_state_awayfromkeyboard="離席" + declare -xgr __iruca_state_outside="外出" + declare -xgr __iruca_state_dayoff="休暇" + declare -xgr __iruca_state_workfromhome="テレワーク" + + declare -xgr __iruca_url="https://iruca.co/api" + + return 0 +} + +_iruca_get() { + local token + local url + + token="$1" + url="$2" + + if ! curl --silent --location \ + --header "X-Iruca-Token: $token" \ + "$url"; then + return 1 + fi + + return 0 +} + +_iruca_put() { + local token + local url + local data + + token="$1" + url="$2" + data="$3" + + if ! curl --silent --location -X PUT \ + --header "X-Iruca-Token: $token" \ + --header "Content-Type: application/json" \ + --data "$data" "$url"; then + return 1 + fi + + return 0 +} + +iruca_list_members() { + local token + local room + + local url + + token="$1" + room="$2" + + url="$__iruca_url/rooms/$room/members" + + if ! _iruca_get "$token" "$url"; then + return 1 + fi + + return 0 +} + +iruca_get_status() { + local token + local room + local member + + local url + + token="$1" + room="$2" + member="$3" + + url="$__iruca_url/rooms/$room/members/$member" + + if ! _iruca_get "$token" "$url"; then + return 1 + fi + + return 0 +} + +_iruca_status_is_valid() { + local status + + local valid_states + + status="$1" + + valid_states=( + "$__iruca_state_present" + "$__iruca_state_absent" + "$__iruca_state_awayfromkeyboard" + "$__iruca_state_outside" + "$__iruca_state_dayoff" + "$__iruca_state_workfromhome" + ) + + if array_contains "$status" "${valid_states[@]}"; then + return 0 + fi + + return 1 +} + +iruca_set_status() { + local token + local room + local member + local status + local message + + local url + local data + + token="$1" + room="$2" + member="$3" + status="$4" + message="$5" + + if ! _iruca_status_is_valid "$status"; then + return 1 + fi + + data=$(json_object "status" "$status" \ + "message" "$message") + + url="$__iruca_url/rooms/$room/members/$member" + + if ! _iruca_put "$token" "$url" "$data" > /dev/null; then + return 1 + fi + + return 0 +} -- 2.47.3