Forum d'entraide de la communauté Freedom-IP VPN
Vous n'êtes pas identifié(e).
from freedom_ip_lib import freedom
Dernière modification par Didier-T (2015-04-01 14:55:43)
Hors ligne
À noter que a priori le token possède maintenant une variable "heure" qui est réglable de 1 à 24 correspondant à la durée en heure(s) de la validité du token.
Mais il me semble que ta bibliothèque gère le token indépendamment de sa durée de vie (s’il n’éxiste pas : il le créé, s’il éxiste déjà : il utilise, s’il n’est plus valable : il en créé un autre...) et donc il n’y a rien besoin de modifier à mes yeux pour l’instant.
Edit : du moins c’est ce comportement qu’on observe sur ta traduction/version Windows...
Merci pour ton active participation en passant
Hors ligne
Bonjour Polizei,
en fait je n'y avais pas fait attention.
Par contre l'a bibliothèque regarde l'âge du token (si existant), pour savoir s'il faut en générer un nouveau.
Les codes sont à jour.
A+,
Didier.
Edit : Maintenant les scripts fonctionnes sous Windows et Linux
Dernière modification par Didier-T (2015-03-11 18:16:56)
Hors ligne
#! /usr/bin/python
# -*- coding: utf-8 -*-
# Par Didier-T pour les utilisateurs de Freedom-IP
########################################################################
# #
# UTILISATION #
# #
########################################################################
# #
# from freedom_ip_lib import freedom #
# #
# user="Identifiant VPN" #
# password="Mot de passe VPN" #
# path="Chemin de stockage clef VPN" (nom généré automatiquement) #
# Time="temp de validité du Token entre 1 et 24 heure(s)" #
# #
# Token=freedom(user, password, path, Time) #
# #
# IsLogged=Token.IsLogged() #
# FairUse=Token.FairUse() #
# DNSConfig=Token.DNSConfig() #
# Dons=Token.Dons() #
# StarPass=Token.StarPass() #
# ProxyRules=Token.ProxyRules() #
# HTTPSEverywhere=Token.HTTPSEverywhere() #
# GetAllServersInfos=Token.GetAllServersInfos() #
# #
########################################################################
########################################################################
# #
# UTILISATION FONCTION TEST API #
# #
########################################################################
# #
# python freedom_ip_lib .py user password #
# #
########################################################################
import urllib, urllib2, os, time, platform, json
import marshal
from re import search, compile
try:
import ssl
except:
pass
class freedom():
def __init__(self, user, password, path, vtime=1):
self.user=user
self.password=password
self.path=path
self.vtime=int(vtime)
self.token=None
self.delais=self.vtime*3600
self.file_token=self.path+"/"+self.user+".token"
# Si le fichier Freedom.token existe, on regarde l'heure de sa dernière modification
if os.path.isfile(self.file_token):
self.dernier_token=int(os.path.getmtime(self.file_token))
else:
self.dernier_token=0
self._token("ok")
def _past(self, url, args):
params = urllib.urlencode(args)
req = urllib2.Request(url, params)
if platform.system() != 'Linux':
gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
response = urllib2.urlopen(req, context=gcontext)
else:
response = urllib2.urlopen(req)
data=json.loads(response.read())
return data
def _token(self, status):
print("[\033[33mINFO\033[0m] Récupération clef Token")
token={}
def _recherchetoken(token):
#token=eval(token)
if token['created_token']=="null":
expire=compile("expire on (.*)").search(token['reason']).group(1)
self.dernier_token=int(time.mktime(time.strptime(expire, "%d/%m/%Y at %H:%M:%S")))-self.delais
return token['token']
else:
return token['created_token']
# si le fichier Freedom-IP.token a été modifier il y a 1 heure ou plus demande d'un nouveau Token
if int(time.time())-self.dernier_token >= self.delais or status=="bad":
if status=="bad":
print("[\033[33mINFO\033[0m] Demande nouvelle clef Token suite erreur")
else:
print("[\033[33mINFO\033[0m] Demande nouvelle clef Token suite fin de validité")
token=self._past('https://freedom-ip.com/api/login.fip', {'username':self.user, 'password':self.password, 'expire_long':self.vtime})
self.token=_recherchetoken(token)
self.dernier_token=int(time.time())
fiche = open(self.file_token, "wb")
marshal.dump(token, fiche)
fiche.close()
else:
if self.token is None:
fiche = open(self.file_token, "rb")
try:
token=marshal.load(fiche)
except:
print("[\033[31mFAIL\033[0m] Fichier Token incorrecte")
print("[\033[33mINFO\033[0m] Création d'un nouveau fichier Token")
self._token("bad")
print("[\033[32m OK \033[0m] Nouvelle clef Token obtenu")
return
self.token=_recherchetoken(token)
fiche.close()
print("[\033[32m OK \033[0m] clef Token obtenu")
def _info(self, recherche):
print("[\033[33mINFO\033[0m] Demande "+recherche)
if recherche=="IsLogged" or recherche=="GetFairUse" or recherche=="GetDNSConfig":
response=self._past('https://freedom-ip.com/api/vpn.fip', {'token':self.token, 'method':recherche})
elif recherche=="GetDons" or recherche=="GetStarPass":
response=self._past('https://freedom-ip.com/api/users.fip', {'token':self.token, 'method':recherche})
elif recherche=="GetProxyRules" or recherche=="GetHTTPSEverywhere":
response=self._past('https://freedom-ip.com/api/proxy.fip', {'token':self.token, 'method':recherche})
elif recherche=="GetAllServersInfos":
response=self._past('https://freedom-ip.com/api/servers.fip', {'token':self.token, 'method':recherche})
return response
def _verif(self, informations, recherche):
try:
status=informations["status"]
except:
status="ok"
if status=="ok":
print("[\033[32m OK \033[0m] "+recherche)
return informations
else:
print("[\033[31mFAIL\033[0m] Demande d'un nouveau Token")
self._token(status)
response=self._info(recherche)
print("[\033[32m OK \033[0m] "+recherche)
return response
def IsLogged(self):
response=self._info("IsLogged")
return self._verif(response, "IsLogged")
def FairUse(self):
response=self._info("GetFairUse")
return self._verif(response, "GetFairUse")
def DNSConfig(self):
response=self._info("GetDNSConfig")
return self._verif(response, "GetDNSConfig")
def Dons(self):
response=self._info("GetDons")
return self._verif(response, "GetDons")
def StarPass(self):
response=self._info("GetStarPass")
return self._verif(response, "GetStarPass")
def ProxyRules(self):
response=self._info("GetProxyRules")
return self._verif(response, "GetProxyRules")
def HTTPSEverywhere(self):
response=self._info("GetHTTPSEverywhere")
return self._verif(response, "GetHTTPSEverywhere")
def GetAllServersInfos(self):
response=self._info("GetAllServersInfos")
return self._verif(response, "GetAllServersInfos")
def arbres(jstr):
tableau=[]
def decoupage(nom, valeur):
if type(valeur)==list:
nb=0
for x in valeur:
decoupage(nom+"["+str(nb)+"]", x)
nb+=1
elif type(valeur)==dict:
for x in valeur:
decoupage(nom+"["+x+"]", valeur[x])
else:
try:
tableau.append(nom+"="+valeur)
except:
tableau.append(nom+"="+str(valeur))
if type(jstr)==list:
nb=0
for x in jstr:
decoupage("["+str(nb)+"]", x)
nb+=1
elif type(jstr)==dict:
for x in jstr:
decoupage("["+x+"]", jstr[x])
else:
tableau.append(str(jstr))
return tableau
def _test():
import sys
class Timer(object):
def start(self):
if hasattr(self, 'interval'):
del self.interval
self.start_time = time.time()
def inter(self):
if hasattr(self, 'start_time'):
self.interval = time.time() - self.start_time
def stop(self):
if hasattr(self, 'start_time'):
self.interval = time.time() - self.start_time
del self.start_time
timer = Timer()
path=os.path.dirname(os.path.abspath(__file__))
user=str(sys.argv[1])
password=str(sys.argv[2])
timer.start()
api=[]
Token=freedom(user, password, path, 1)
list_api=['IsLogged','FairUse','DNSConfig','Dons','StarPass','StarPass','ProxyRules','HTTPSEverywhere','GetAllServersInfos']
api.append(Token.IsLogged())
api.append(Token.FairUse())
api.append(Token.DNSConfig())
api.append(Token.Dons())
api.append(Token.StarPass())
api.append(Token.ProxyRules())
api.append(Token.HTTPSEverywhere())
api.append(Token.GetAllServersInfos())
timer.inter()
t1=timer.interval
for x in range(0,len(api)):
print("\033[41mArbre retour fonction \033[1m{}()\033[0;41m :\033[0m".format(list_api[x]))
print('\n'.join(arbres(api[x])))
print('\n')
print("\033[41mChronomètre :\033[0m")
timer.stop()
print 'Temp consultation API :', t1
print 'Temp exploration arbres :', timer.interval-t1
print 'Temp consultation API + exploration arbres :', timer.interval
if __name__ == '__main__':
_test()
Dernière modification par Didier-T (2015-04-01 14:56:24)
Hors ligne