]>
git.ipfire.org Git - oddments/fireinfo.git/blob - src/sendprofile
3ce68b9e733c5eeec389cd64299cc6e611320f4c
2 ###############################################################################
5 # Copyright (C) 2010, 2011 IPFire Team (www.ipfire.org) #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
20 ###############################################################################
24 import logging
.handlers
32 ENABLED_FILE
= "/var/ipfire/main/send_profile"
33 PROXY_SETTINGS
= "/var/ipfire/proxy/advanced/settings"
35 log_level
= logging
.INFO
37 log_level
= logging
.DEBUG
40 log
= logging
.getLogger()
41 log
.setLevel(log_level
)
42 log
.addHandler(logging
.handlers
.SysLogHandler("/dev/log"))
43 log
.addHandler(logging
.StreamHandler(sys
.stderr
))
44 for handler
in log
.handlers
:
45 handler
.setLevel(log_level
)
47 PROFILE_URL
= "https://fireinfo.ipfire.org/send/%(public_id)s"
49 def get_upstream_proxy():
50 if not os
.path
.exists(PROXY_SETTINGS
):
54 with
open(PROXY_SETTINGS
) as f
:
55 for line
in f
.readlines():
56 k
, v
= line
.split("=", 1)
57 proxy_settings
[k
] = v
.strip()
60 "host" : proxy_settings
.get("UPSTREAM_PROXY", ""),
61 "user" : proxy_settings
.get("UPSTREAM_USER", ""),
62 "pass" : proxy_settings
.get("UPSTREAM_PASSWORD", ""),
65 def send_profile(profile
):
66 logging
.debug("Sending profile:")
67 for line
in json
.dumps(profile
, sort_keys
=True, indent
=4).splitlines():
70 request
= urllib2
.Request(PROFILE_URL
% profile
,
71 data
= urllib
.urlencode({"profile" : json
.dumps(profile
)}),
73 request
.add_header("User-Agent", "fireinfo/%s" % fireinfo
.__version
__)
75 # Set upstream proxy if we have one.
76 proxy
= get_upstream_proxy()
79 # handling upstream proxies with authentication is more tricky...
80 if proxy
["user"] and proxy
["pass"]:
81 prx_auth_string
= "http://%s:%s@%s/" % (proxy
["user"], proxy
["pass"], proxy
["host"])
83 proxy_handler
= urllib2
.ProxyHandler({'http': prx_auth_string
, 'https': prx_auth_string
})
84 auth
= urllib2
.HTTPBasicAuthHandler()
85 opener
= urllib2
.build_opener(proxy_handler
, auth
, urllib2
.HTTPHandler
)
86 urllib2
.install_opener(opener
)
88 request
.set_proxy(proxy
["host"], "http")
89 request
.set_proxy(proxy
["host"], "https")
92 urllib2
.urlopen(request
, timeout
=60)
93 except (urllib2
.HTTPError
, urllib2
.URLError
), e
:
94 reason
= "Unknown reason"
96 if isinstance(e
, urllib2
.HTTPError
):
98 elif isinstance(e
, urllib2
.URLError
):
101 logging
.error("Profile was not sent propertly: %s" % reason
)
104 logging
.debug("Profile was sent successfully.")
107 # Collect system information
108 system
= fireinfo
.System()
109 profile
= system
.profile()
111 # If --dump is passed -> only dump the output.
112 if "--dump" in sys
.argv
:
113 # Remove the private id when dumping the profile because
114 # it contains no information and may confuse people.
115 del profile
["private_id"]
117 print json
.dumps(profile
, sort_keys
=True, indent
=4)
120 if "--secret-id" in sys
.argv
:
121 print system
.secret_id
124 if "--hardware-string" in sys
.argv
:
125 print system
._unique
_id
128 if "--public-id" in sys
.argv
:
129 print system
.public_id
132 if not os
.path
.exists(ENABLED_FILE
):
133 del profile
["profile"]
136 send_profile(profile
)
137 except urllib2
.URLError
: