summaryrefslogtreecommitdiff
path: root/files/plugins/check_horde_login
blob: 8c821e48128496e7d5e5ad92c34f2079a03b5d05 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/env python
# vi:si:et:sw=4:sts=4:ts=4
# -*- coding: UTF-8 -*-
# -*- Mode: Python -*-
#
# Copyright (C) 2015 mh <mh@immerda.ch>

# This file may be distributed and/or modified under the terms of
# the GNU General Public License version 2 as published by
# the Free Software Foundation.
# This file is distributed without any warranty; without even the implied
# warranty of merchantability or fitness for a particular purpose.
#

import sys, os, requests, getopt
from time import time

def usage():
    print sys.argv[0] + " -u username "+ \
                          "-p password " + \
                          "-s server path" + \
                          "[-w warning_in_s] " + \
                          "[-c critical_in_s]"
    sys.exit(1)

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "u:p:s:h:w:c")
    except getopt.GetoptError:
        usage()
        return 3

    user = url = password = None
    warning = 5
    critical = 10

    for o, a in opts:
        if o == "-u":
            user = a
        elif o == "-p":
            password = a
        elif o == "-w":
            warning = a
        elif o == "-c":
            critical = a
        elif o == "-s":
            url = a + "/login.php"
        elif o == '-h':
            usage()

    if user == None or password == None or url == None:
        usage()

    params = { 'horde_user':         user,
               'horde_pass':         password,
               'horde_select_view':  'auto',
               'anchor_string':      '',
               'app':                '',
               'login_post':         1,
               'new_lang':           'en_US',
               'url':                '',
             }


    timestamp = time()
    try:
      r = requests.post(url, data=params, allow_redirects=False)
    except Exception, e:
      print "CRITICAL Horde Login Failed: %s" % e
      sys.exit(2)

    timestamp = time() - timestamp
    if r.status_code == 302:
        if timestamp < warning:
          status = "OK"
          exitcode = 0
        if timestamp >= warning:
          status = "WARNING"
          exitcode = 1
        if timestamp >= critical:
          status = "CRITICAL"
          exitcode = 2
    else:
        status   = "ERROR"
        exitcode = 2
    # on a successfully login we are redirected to the mailbox
    print '%s Horde Login | response_time=%.3fs;%.3f;%.3f' % (status, timestamp, warning, critical)
    sys.exit(exitcode)


if __name__ == "__main__":
    sys.exit(main())