]>
Commit | Line | Data |
---|---|---|
65891720 MT |
1 | #!/usr/bin/python |
2 | ||
3 | import json | |
4 | import logging | |
5 | import logging.handlers | |
3fde7e27 | 6 | import os |
65891720 MT |
7 | import sys |
8 | import urllib | |
9 | import urllib2 | |
10 | ||
11 | import fireinfo | |
12 | ||
3fde7e27 | 13 | ENABLED_FILE = "/var/ipfire/main/send_profile" |
a3560310 | 14 | PROXY_SETTINGS = "/var/ipfire/proxy/advanced/settings" |
3fde7e27 | 15 | |
7c181f39 MT |
16 | log_level = logging.INFO |
17 | if "-d" in sys.argv: | |
18 | log_level = logging.DEBUG | |
65891720 MT |
19 | |
20 | # Setup logging | |
21 | log = logging.getLogger() | |
22 | log.setLevel(log_level) | |
23 | log.addHandler(logging.handlers.SysLogHandler("/dev/log")) | |
7c181f39 | 24 | log.addHandler(logging.StreamHandler(sys.stderr)) |
65891720 MT |
25 | for handler in log.handlers: |
26 | handler.setLevel(log_level) | |
27 | ||
97821efd | 28 | PROFILE_URL = "http://fireinfo.ipfire.org/send/%(public_id)s" |
65891720 | 29 | |
a3560310 MT |
30 | def get_upstream_proxy(): |
31 | if not os.path.exists(PROXY_SETTINGS): | |
32 | return | |
33 | ||
34 | proxy_settings = {} | |
35 | with open(PROXY_SETTINGS) as f: | |
36 | for line in f.readlines(): | |
37 | k, v = line.split("=", 1) | |
38 | proxy_settings[k] = v.strip() | |
39 | ||
40 | return { | |
41 | "host" : proxy_settings.get("UPSTREAM_PROXY", ""), | |
42 | "user" : proxy_settings.get("UPSTREAM_USER", ""), | |
43 | "pass" : proxy_settings.get("UPSTREAM_PASSWORD", ""), | |
44 | } | |
45 | ||
65891720 MT |
46 | def send_profile(profile): |
47 | logging.debug("Sending profile:") | |
48 | for line in json.dumps(profile, sort_keys=True, indent=4).splitlines(): | |
49 | logging.debug(line) | |
50 | ||
a3560310 MT |
51 | request = urllib2.Request(PROFILE_URL % profile, |
52 | data = urllib.urlencode({"profile" : json.dumps(profile)}), | |
53 | ) | |
d78396e3 | 54 | request.add_header("User-Agent", "fireinfo/%s" % fireinfo.__version__) |
a3560310 MT |
55 | |
56 | # Set upstream proxy if we have one. | |
57 | # XXX this cannot handle authentication | |
58 | proxy = get_upstream_proxy() | |
59 | if proxy["host"]: | |
60 | request.set_proxy(proxy["host"], "http") | |
61 | ||
65891720 | 62 | try: |
65891720 MT |
63 | urllib2.urlopen(request, timeout=60) |
64 | except (urllib2.HTTPError, urllib2.URLError), e: | |
65 | reason = "Unknown reason" | |
66 | ||
67 | if isinstance(e, urllib2.HTTPError): | |
68 | reason = "%s" % e | |
69 | elif isinstance(e, urllib2.URLError): | |
70 | reason = e.reason | |
71 | ||
72 | logging.error("Profile was not sent propertly: %s" % reason) | |
73 | return | |
74 | ||
75 | logging.debug("Profile was sent successfully.") | |
76 | ||
77 | def main(): | |
65891720 MT |
78 | # Collect system information |
79 | system = fireinfo.System() | |
3fde7e27 | 80 | profile = system.profile() |
67906550 MT |
81 | |
82 | # If --dump is passed -> only dump the output. | |
83 | if "--dump" in sys.argv: | |
3fde7e27 | 84 | print json.dumps(profile, sort_keys=True, indent=4) |
67906550 MT |
85 | return 0 |
86 | ||
d20d3659 MT |
87 | if "--secret-id" in sys.argv: |
88 | print system.secret_id | |
89 | return 0 | |
90 | ||
91 | if "--hardware-string" in sys.argv: | |
92 | print system._unique_id | |
93 | return 0 | |
94 | ||
3fde7e27 MT |
95 | if not os.path.exists(ENABLED_FILE): |
96 | del profile["profile"] | |
97 | ||
65891720 | 98 | try: |
3fde7e27 | 99 | send_profile(profile) |
65891720 MT |
100 | except urllib2.URLError: |
101 | return 1 | |
102 | ||
103 | return 0 | |
104 | ||
105 | sys.exit(main()) |