def AuthorizedNicUpdateView(request): """ similar to NicUpdateView, but the client is not a router or other dyndns client, but the admin browser who is currently logged into the nsupdate.info site. Example URLs: https://supdate.info/nic/update?hostname=fqdn&myip=1.2.3.4 :param request: django request object :return: HttpResponse object """ hostname = request.GET.get('hostname') if hostname is None: return Response('nohost') if not check_session_auth(request.user, hostname): logger.info('%s - is not owned by user: %s' % ( hostname, request.user.username, )) return Response('nohost') ipaddr = request.GET.get('myip') if not ipaddr: ipaddr = get_remote_addr(request) return _update(hostname, ipaddr)
def MyIpView(request): """ return the IP address (can be v4 or v6) of the client requesting this view. :param request: django request object :return: HttpResponse object """ return HttpResponse(get_remote_addr(request), content_type="text/plain")
def form_valid(self, form): self.object = form.save(commit=False) self.object.created_by = self.request.user self.object.save() dnstools.add(self.object.get_fqdn(), get_remote_addr(self.request), origin=self.object.domain.domain) messages.add_message(self.request, messages.SUCCESS, 'Host added.') return HttpResponseRedirect(self.get_success_url())
def form_valid(self, form): self.object = form.save(commit=False) self.object.created_by = self.request.user self.object.save() dnstools.add( self.object.get_fqdn(), get_remote_addr(self.request), origin=self.object.domain.domain ) messages.add_message(self.request, messages.SUCCESS, 'Host added.') return HttpResponseRedirect(self.get_success_url())
def get_context_data(self, *args, **kwargs): context = super(HomeView, self).get_context_data(*args, **kwargs) context['nav_home'] = True s = self.request.session ipaddr = get_remote_addr(self.request) af = dns.inet.af_for_address(ipaddr) key = 'ipv4' if af == dns.inet.AF_INET else 'ipv6' s[key] = ipaddr s.save() return context
def NicUpdateView(request): """ dyndns2 compatible /nic/update API. Example URLs: Will request username (fqdn) and password (secret) from user, for interactive testing / updating: https://nsupdate.info/nic/update You can put it also into the url, so the browser will automatically send the http basic auth with the request: https://fqdn:[email protected]/nic/update If the request does not come from the correct IP, you can give it as a query parameter, you can also give the hostname (then it won't use the username from http basic auth as the fqdn: https://fqdn:[email protected]/nic/update?hostname=fqdn&myip=1.2.3.4 :param request: django request object :return: HttpResponse object """ hostname = request.GET.get('hostname') auth = request.META.get('HTTP_AUTHORIZATION') if auth is None: logger.warning('%s - received no auth' % (hostname, )) return basic_challenge("authenticate to update DNS", 'noauth') username, password = basic_authenticate(auth) if not check_api_auth(username, password): logger.info('%s - received bad credentials, username: %s' % ( hostname, username, )) return basic_challenge("authenticate to update DNS", 'badauth') if hostname is None: # as we use update_username == hostname, we can fall back to that: hostname = username ipaddr = request.GET.get('myip') if ipaddr is None: ipaddr = get_remote_addr(request) agent = request.META.get('HTTP_USER_AGENT') if agent in settings.BAD_AGENTS: logger.info('%s - received update from bad user agent %s' % ( hostname, agent, )) return Response('badagent') return _update(hostname, ipaddr)
def NicUpdateView(request): """ dyndns2 compatible /nic/update API. Example URLs: Will request username (fqdn) and password (secret) from user, for interactive testing / updating: https://nsupdate.info/nic/update You can put it also into the url, so the browser will automatically send the http basic auth with the request: https://fqdn:[email protected]/nic/update If the request does not come from the correct IP, you can give it as a query parameter, you can also give the hostname (then it won't use the username from http basic auth as the fqdn: https://fqdn:[email protected]/nic/update?hostname=fqdn&myip=1.2.3.4 :param request: django request object :return: HttpResponse object """ hostname = request.GET.get('hostname') auth = request.META.get('HTTP_AUTHORIZATION') if auth is None: logger.warning('%s - received no auth' % (hostname, )) return basic_challenge("authenticate to update DNS", 'noauth') username, password = basic_authenticate(auth) if not check_api_auth(username, password): logger.info('%s - received bad credentials, username: %s' % (hostname, username, )) return basic_challenge("authenticate to update DNS", 'badauth') if hostname is None: # as we use update_username == hostname, we can fall back to that: hostname = username ipaddr = request.GET.get('myip') if ipaddr is None: ipaddr = get_remote_addr(request) agent = request.META.get('HTTP_USER_AGENT') if agent in settings.BAD_AGENTS: logger.info('%s - received update from bad user agent %s' % (hostname, agent, )) return Response('badagent') return _update(hostname, ipaddr)
def DetectIpView(request, secret=None): """ Put the IP address (can be v4 or v6) of the client requesting this view into the client's session. :param request: django request object :param secret: session key used to find the correct session w/o session cookie :return: HttpResponse object """ # we do not have the session as usual, as this is a different host, # so the session cookie is not received here - thus we access it via # the secret: s = SessionStore(session_key=secret) ipaddr = get_remote_addr(request) af = dns.inet.af_for_address(ipaddr) key = 'ipv4' if af == dns.inet.AF_INET else 'ipv6' s[key] = ipaddr s.save() with open(os.path.join(settings.STATIC_ROOT, "1px.gif"), "rb") as f: image_data = f.read() return HttpResponse(image_data, content_type="image/png")
def DetectIpView(request, secret=None): """ Put the IP address (can be v4 or v6) of the client requesting this view into the client's session. :param request: django request object :param secret: session key used to find the correct session w/o session cookie :return: HttpResponse object """ # we do not have the session as usual, as this is a different host, # so the session cookie is not received here - thus we access it via # the secret: s = SessionStore(session_key=secret) ipaddr = get_remote_addr(request) af = dns.inet.af_for_address(ipaddr) key = 'ipv4' if af == dns.inet.AF_INET else 'ipv6' s[key] = ipaddr s.save() with open(os.path.join(settings.STATIC_ROOT, "1px.gif"), "rb") as f: image_data = f.read() return HttpResponse(image_data, mimetype="image/png")
def AuthorizedNicUpdateView(request): """ similar to NicUpdateView, but the client is not a router or other dyndns client, but the admin browser who is currently logged into the nsupdate.info site. Example URLs: https://supdate.info/nic/update?hostname=fqdn&myip=1.2.3.4 :param request: django request object :return: HttpResponse object """ hostname = request.GET.get('hostname') if hostname is None: return Response('nohost') if not check_session_auth(request.user, hostname): logger.info('%s - is not owned by user: %s' % (hostname, request.user.username, )) return Response('nohost') ipaddr = request.GET.get('myip') if not ipaddr: ipaddr = get_remote_addr(request) return _update(hostname, ipaddr)
def get_context_data(self, *args, **kwargs): context = super(HostView, self).get_context_data(*args, **kwargs) context['nav_overview'] = True context['remote_addr'] = get_remote_addr(self.request) context['hosts'] = Host.objects.filter(created_by=self.request.user) return context