]> git.corax.cc Git - toolbox/commitdiff
include/iruca: Add functions to get and set somebody's iruca status
authorMatthias Kruk <m@m10k.eu>
Wed, 24 Mar 2021 23:17:07 +0000 (08:17 +0900)
committerMatthias Kruk <m@m10k.eu>
Wed, 24 Mar 2021 23:17:07 +0000 (08:17 +0900)
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 [new file with mode: 0644]

diff --git a/include/iruca.sh b/include/iruca.sh
new file mode 100644 (file)
index 0000000..2cd7548
--- /dev/null
@@ -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
+}