|
@@ -2599,6 +2599,81 @@ func passHandler(server *Server, client *Client, msg ircmsg.Message, rb *Respons
|
2599
|
2599
|
return false
|
2600
|
2600
|
}
|
2601
|
2601
|
|
|
2602
|
+// PERSISTENCE <subcommand> [params...]
|
|
2603
|
+func persistenceHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
|
|
2604
|
+ account := client.Account()
|
|
2605
|
+ if account == "" {
|
|
2606
|
+ rb.Add(nil, server.name, "FAIL", "PERSISTENCE", "ACCOUNT_REQUIRED", client.t("You're not logged into an account"))
|
|
2607
|
+ return false
|
|
2608
|
+ }
|
|
2609
|
+
|
|
2610
|
+ switch strings.ToUpper(msg.Params[0]) {
|
|
2611
|
+ case "GET":
|
|
2612
|
+ reportPersistenceStatus(client, rb)
|
|
2613
|
+ case "SET":
|
|
2614
|
+ if len(msg.Params) == 1 {
|
|
2615
|
+ goto fail
|
|
2616
|
+ }
|
|
2617
|
+ var desiredSetting PersistentStatus
|
|
2618
|
+ switch strings.ToUpper(msg.Params[1]) {
|
|
2619
|
+ case "DEFAULT":
|
|
2620
|
+ desiredSetting = PersistentUnspecified
|
|
2621
|
+ case "OFF":
|
|
2622
|
+ desiredSetting = PersistentDisabled
|
|
2623
|
+ case "ON":
|
|
2624
|
+ desiredSetting = PersistentMandatory
|
|
2625
|
+ default:
|
|
2626
|
+ goto fail
|
|
2627
|
+ }
|
|
2628
|
+
|
|
2629
|
+ _, err := server.accounts.ModifyAccountSettings(account,
|
|
2630
|
+ func(input AccountSettings) (output AccountSettings, err error) {
|
|
2631
|
+ output = input
|
|
2632
|
+ output.AlwaysOn = desiredSetting
|
|
2633
|
+ return
|
|
2634
|
+ })
|
|
2635
|
+ if err != nil {
|
|
2636
|
+ server.logger.Error("internal", "couldn't modify persistence setting", err.Error())
|
|
2637
|
+ rb.Add(nil, server.name, "FAIL", "PERSISTENCE", "UNKNOWN_ERROR", client.t("An error occurred"))
|
|
2638
|
+ return false
|
|
2639
|
+ }
|
|
2640
|
+
|
|
2641
|
+ reportPersistenceStatus(client, rb)
|
|
2642
|
+
|
|
2643
|
+ default:
|
|
2644
|
+ goto fail
|
|
2645
|
+ }
|
|
2646
|
+
|
|
2647
|
+ return false
|
|
2648
|
+
|
|
2649
|
+fail:
|
|
2650
|
+ rb.Add(nil, server.name, "FAIL", "PERSISTENCE", "INVALID_PARAMS", client.t("Invalid parameters"))
|
|
2651
|
+ return false
|
|
2652
|
+}
|
|
2653
|
+
|
|
2654
|
+func reportPersistenceStatus(client *Client, rb *ResponseBuffer) {
|
|
2655
|
+ settings := client.AccountSettings()
|
|
2656
|
+ serverSetting := client.server.Config().Accounts.Multiclient.AlwaysOn
|
|
2657
|
+ effectiveSetting := persistenceEnabled(serverSetting, settings.AlwaysOn)
|
|
2658
|
+ toString := func(setting PersistentStatus) string {
|
|
2659
|
+ switch setting {
|
|
2660
|
+ case PersistentUnspecified:
|
|
2661
|
+ return "DEFAULT"
|
|
2662
|
+ case PersistentDisabled:
|
|
2663
|
+ return "OFF"
|
|
2664
|
+ case PersistentMandatory:
|
|
2665
|
+ return "ON"
|
|
2666
|
+ default:
|
|
2667
|
+ return "*" // impossible
|
|
2668
|
+ }
|
|
2669
|
+ }
|
|
2670
|
+ effectiveSettingStr := "OFF"
|
|
2671
|
+ if effectiveSetting {
|
|
2672
|
+ effectiveSettingStr = "ON"
|
|
2673
|
+ }
|
|
2674
|
+ rb.Add(nil, client.server.name, "PERSISTENCE", "STATUS", toString(settings.AlwaysOn), effectiveSettingStr)
|
|
2675
|
+}
|
|
2676
|
+
|
2602
|
2677
|
// PING [params...]
|
2603
|
2678
|
func pingHandler(server *Server, client *Client, msg ircmsg.Message, rb *ResponseBuffer) bool {
|
2604
|
2679
|
rb.Add(nil, server.name, "PONG", server.name, msg.Params[0])
|