@ -29,7 +29,6 @@ from magic import Magic
from mimetypes import guess_extension
from mimetypes import guess_extension
import sys
import sys
import requests
import requests
from short_url import UrlEncoder
from validators import url as url_valid
from validators import url as url_valid
from pathlib import Path
from pathlib import Path
@ -91,8 +90,6 @@ Please install python-magic.""")
db = SQLAlchemy ( app )
db = SQLAlchemy ( app )
migrate = Migrate ( app , db )
migrate = Migrate ( app , db )
su = UrlEncoder ( alphabet = app . config [ " URL_ALPHABET " ] , block_size = 16 )
class URL ( db . Model ) :
class URL ( db . Model ) :
id = db . Column ( db . Integer , primary_key = True )
id = db . Column ( db . Integer , primary_key = True )
url = db . Column ( db . UnicodeText , unique = True )
url = db . Column ( db . UnicodeText , unique = True )
@ -101,7 +98,7 @@ class URL(db.Model):
self . url = url
self . url = url
def getname ( self ) :
def getname ( self ) :
return su . enbase ( self . id , 1 )
return su . enbase ( self . id )
def geturl ( self ) :
def geturl ( self ) :
return url_for ( " get " , path = self . getname ( ) , _external = True ) + " \n "
return url_for ( " get " , path = self . getname ( ) , _external = True ) + " \n "
@ -132,7 +129,7 @@ class File(db.Model):
self . addr = addr
self . addr = addr
def getname ( self ) :
def getname ( self ) :
return u " {0} {1} " . format ( su . enbase ( self . id , 1 ), self . ext )
return u " {0} {1} " . format ( su . enbase ( self . id ), self . ext )
def geturl ( self ) :
def geturl ( self ) :
n = self . getname ( )
n = self . getname ( )
@ -207,6 +204,31 @@ class File(db.Model):
db . session . commit ( )
db . session . commit ( )
return f
return f
class UrlEncoder ( object ) :
def __init__ ( self , alphabet , min_length ) :
self . alphabet = alphabet
self . min_length = min_length
def enbase ( self , x ) :
n = len ( self . alphabet )
str = " "
while x > 0 :
str = ( self . alphabet [ int ( x % n ) ] ) + str
x = int ( x / / n )
padding = self . alphabet [ 0 ] * ( self . min_length - len ( str ) )
return ' %s %s ' % ( padding , str )
def debase ( self , x ) :
n = len ( self . alphabet )
result = 0
for i , c in enumerate ( reversed ( x ) ) :
result + = self . alphabet . index ( c ) * ( n * * i )
return result
su = UrlEncoder ( alphabet = app . config [ " URL_ALPHABET " ] , min_length = 1 )
def fhost_url ( scheme = None ) :
def fhost_url ( scheme = None ) :
if not scheme :
if not scheme :
return url_for ( " .fhost " , _external = True ) . rstrip ( " / " )
return url_for ( " .fhost " , _external = True ) . rstrip ( " / " )