This commit is contained in:
Vlad 2024-11-28 12:19:28 +03:00
parent cabcf39458
commit 12f0b91216
35 changed files with 4369 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
__pycache__
logs

577
app.py Normal file
View File

@ -0,0 +1,577 @@
from flask import Flask, render_template, send_from_directory, make_response, request, redirect, session, g, json, send_file, abort
import os
import random
import socket
import oracledb
import traceback
import requests
from logging.config import dictConfig
import secrets
from werkzeug.middleware.proxy_fix import ProxyFix
import io
import json
from expiring_dict import ExpiringDict
capcha_site = '6LcJpHMgAAAAAMQLNY_g8J2Kv_qmCGureRN_lbGl'
capcha_site_sec = '6LcJpHMgAAAAAIUf4Jg_7NvawQKZoLoVypDU6-d8'
capcha_site_url='https://www.google.com/recaptcha/api/siteverify'
site = 'salvagedb.com'
app_path = os.path.dirname(os.path.realpath(__file__))
app = Flask(__name__)
app_debug : bool = os.environ.get('APP_DEBUG',False)
app.debug = os.environ.get('APP_DEBUG',False)
app.secret_key = secrets.token_hex()
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1)
os.environ['NLS_LANG'] = 'American_America.AL32UTF8'
#Cache
app.cache = ExpiringDict(60*60*24)
try:
gips = open('gips.txt').read().split('\n')
except:
gips=[]
if app_debug:
print(gips)
def save_request(request):
req_data = {}
req_data['endpoint'] = request.endpoint
req_data['method'] = request.method
req_data['cookies'] = request.cookies
req_data['data'] = request.data
req_data['headers'] = dict(request.headers)
req_data['headers'].pop('Cookie', None)
req_data['args'] = request.args
req_data['form'] = request.form
req_data['remote_addr'] = request.remote_addr
return req_data
dictConfig(
{
"version": 1,
"formatters": {
"default": {
"format": "[%(asctime)s] [%(levelname)s | %(module)s] %(message)s",
"datefmt": " %d/%m/%Y %H:%M:%S"
},
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "default",
},
"file": {
"class": "logging.handlers.TimedRotatingFileHandler",
"filename": app_path + "/logs/app.log",
"when": "D",
"interval": 10,
"backupCount": 5,
"formatter": "default",
},
},
"root": {"level": "DEBUG", "handlers": ["console", "file"]},
}
)
@app.after_request
def after_request(response):
if request.cookies.get('user_id', None) == None:
response.set_cookie('user_id', str(random.randint(0, 10000000000)), max_age=60 * 60 * 24 * 365 * 10)
return response
def init_session(connection, requestedTag_ignored):
pass
# cursor = connection.cursor()
# cursor.execute("""
# ALTER SESSION SET
# TIME_ZONE = 'UTC'
# NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI'""")
def start_pool():
pool_min = 4
pool_max = 4
pool_inc = 0
if app_debug:
print('Connecting to {}:{}/{}'.format(os.environ.get("DB_HOST"), os.environ.get("DB_PORT"), os.environ.get("DB_DBNAME")))
pool = oracledb.create_pool(
user=os.environ.get("DB_USERNAME"),
password=os.environ.get("DB_PASSWORD"),
dsn='{}:{}/{}'.format(os.environ.get("DB_HOST"), os.environ.get("DB_PORT"), os.environ.get("DB_DBNAME")),
#params=sample_env.get_pool_params(),
min=pool_min,
max=pool_max,
increment=pool_inc,
session_callback=init_session,
)
return pool
@app.route("/sitemap.xml")
def sitemap():
conn = pool.acquire()
cur = conn.cursor()
cur.execute('select distinct trunc(pg/40000)+1 nm from mv_pages');
nm = cur.fetchall()
return render_template('sitemap.xml', site=site, siten=nm)
@app.route("/sitemaps/<int:sitemap_id>.xml")
def sitemaps_xml(sitemap_id):
try:
id: int = int(sitemap_id)
conn = pool.acquire()
cur = conn.cursor()
cur.execute('select pg from mv_pages where sitemap_number = :p1', {'p1': id})
sitemap_pages = cur.fetchall()
return render_template('sitemaps.xml', site=site, sitemap_pages=sitemap_pages)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/")
def index_html():
try:
if 'maxnum' in app.cache:
if app_debug:
print('Find in cache max_num={}'.format(app.cache['maxnum']))
cnt = app.cache['maxnum']
else:
conn = pool.acquire()
cur = conn.cursor()
cur.execute('select max(num) from salvagedb')
cnt = "{:,}".format(cur.fetchone()[0])
app.cache['maxnum'] = cnt
return render_template('index.html', site=site, cnt=cnt ,capcha_site=capcha_site)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/privacy.html")
def privacy_html():
try:
return render_template('privacy.html', site=site)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/robots.txt")
def robot_txt():
try:
return render_template('robots.txt', site=site)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/decode", methods = ['POST'])
def decode():
try:
vin = request.form.get('q').strip()
g_respone = request.form['g-recaptcha-response']
capcha_check = requests.post(url=f'{capcha_site_url}?secret={capcha_site_sec}&response={g_respone}').json()
if capcha_check['success'] == False or capcha_check['score'] <0.5:
app.logger.info(f'Google reuest: {capcha_site_url}?secret={capcha_site_sec}&response={g_respone}')
app.logger.info(f'Bad google answer: {capcha_check}')
abort(401)
return redirect(f'/detail/{vin}.html', 301)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/decodevin.html")
def decodevin_html():
try:
return render_template('decodevin.html', site=site,capcha_site=capcha_site)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/database/page<int:page_num>.html")
def database_page_prc(page_num):
try:
pg = int(page_num)
conn = pool.acquire()
cur = conn.cursor()
user_ip = get_ip(request) ## определение ip клиента
try:
returnVal = cur.callfunc("checkip", int, [user_ip, request.headers.get("CF-IPCountry", 'None'), get_addr(user_ip), 1, 0, 0])
except:
print(request)
app.logger.error(traceback.format_exc())
cur.execute('select max(pg) from mv_pages')
max_page = int(cur.fetchall()[0][0])
cur.execute("""select rownum,s.vin,
COALESCE ((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='26'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Make'),'UNKNOWN') make,
COALESCE ((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='28'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Model'),'UNKNOWN') model,
COALESCE ((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='29'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Model Year'),'UNKNOWN') year
from salvagedb s
where num between (select mi from mv_pages where pg = :p1) and (select ma from mv_pages where pg = :p1)""",
{'p1': pg})
pgf = cur.fetchall()
return render_template('database.html', site=site, cur_page=pg, max_page=max_page, pg=pgf)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/detail/<vin>.html")
def detail_vin(vin):
try:
conn = pool.acquire()
cur = conn.cursor()
user_ip = get_ip(request) ## определение ip клиента
try:
returnVal = cur.callfunc("checkip", int, [user_ip, request.headers.get("CF-IPCountry", 'None'), get_addr(user_ip), 0, 0, 1])
except:
print(request)
app.logger.error(traceback.format_exc())
cur.execute("""select 'None', COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='26'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Make'),'UNKNOWN') make,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='28'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Model'),'UNKNOWN') model,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='29'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Model Year'),'UNKNOWN') year,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='5'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Body Class'),'UNKNOWN') body,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='13'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Engine Model'),'UNKNOWN') engine,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='9'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Engine Number of Cylinders'),'UNKNOWN') celindr,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='15'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Drive Type'),'-') drive
from (select substr(:p1,1,10) svin, :p1 vin from dual) s """, {'p1': vin})
res = cur.fetchall()
return render_template('details.html', site=site, vin=vin, det=res, capcha_site=capcha_site)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route('/search', methods = ['GET'])
def search():
try:
user_ip = get_ip(request) ## определение ip клиента
vin = request.args.get('q')
ua = request.headers.get('User-Agent')
app.logger.info(f'AgeNt: {ua}')
gmedia = False
if ua == 'Mediapartners-Google':
app.logger.info(f'Find MediaPartner Aget {ua}')
if user_ip in gips:
gmedia = True
else:
gmedia = False
try:
f = open('ips.txt','a')
f.write(f'{user_ip}\n')
finally:
f.close()
g_respone = request.args.get('g-recaptcha-response')
capcha_check = requests.post(url=f'{capcha_site_url}?secret={capcha_site_sec}&response={g_respone}').json()
if capcha_check['success'] == False or capcha_check['score'] <0.5:
app.logger.info(f'Google reuest: {capcha_site_url}?secret={capcha_site_sec}&response={g_respone}')
app.logger.info(f'Bad google answer: {capcha_check}')
if gmedia ==False:
req_data = save_request(request)
app.logger.info(json.dumps(req_data, indent=4, default=str))
return 'bad req', 401
if len(vin) != 17:
return 'bad vin!', 500
conn = pool.acquire()
cur = conn.cursor()
returnVal = cur.callfunc("checkip", int, [user_ip, request.headers.get("CF-IPCountry", 'None'), get_addr(user_ip), 0, 1, 0])
cur.execute("""select 'None', COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='26'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Make'),'UNKNOWN') make,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='28'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Model'),'UNKNOWN') model,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='29'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Model Year'),'UNKNOWN') year,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='5'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Body Class'),'UNKNOWN') body,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='13'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Engine Model'),'UNKNOWN') engine,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='9'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Engine Number of Cylinders'),'UNKNOWN') celindr,
COALESCE((select value from m_JSONS_FROM_NHTSA v3 where v3.svin =s.svin and v3.variableid ='15'),(select val from vind2 where svin = substr(s.vin, 1, 8) || '*' || substr(s.vin, 10, 2) and varb = 'Drive Type'),'-') drive
from (select substr(:p1,1,10) svin, :p1 vin from dual) s """, {'p1': vin})
res = cur.fetchall()
cur.execute("""select rownum, t.vin, t.title, t.odo, t.odos, t.dem1, t.dem2, t.year||'/'||t.month from salvagedb t where vin = :p1 and svin = substr(:p1,1,10) """, {'p1': vin})
his = cur.fetchall()
return render_template('search.html', site=site, vin=vin, det=res, his=his)
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
## API
@app.route("/api/search")
def api_search():
try:
access_code = request.args.get('access_code', None)
vin = request.args.get('vin', None)
user_ip = get_ip(request) ## определение ip клиента
# базовые проверки входящих аргументов
if len(vin) != 17 or vin is None:
ret = {'status': 'incorrect vin'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
if len(access_code) > 16 or access_code is None:
ret = {'status': 'incorrect access_code'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
conn = pool.acquire()
cur = conn.cursor()
## проверяем access_code
cur.execute(
'select t.summ, t.found_price, t.notfound_price, t.decode_price from restfact t where access_code = :p1',
{'p1': str(access_code)})
res = cur.fetchone()
summ = res[0]
found_price = res[1]
notfound_price = res[2]
decode_price = res[3]
### не достаточно средств
if summ <= 0:
ret = {'status': 'You have insufficient balance.'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
## ищем в истории
cur.execute('select t.odo,t.odos,t.title,t.dem1,t.dem2,t.year,t.month from salvagedb t where vin =:p1 and svin = :p2',
{'p1': vin.upper(), 'p2': vin.upper()[:10]})
res = cur.fetchall()
if len(res) > 0:
# found
dat = []
for it in res:
dat.append({
'odometer': it[0],
'odometer_status': it[1],
'title': it[2],
'damage1': it[3],
'damage2': it[4],
'add_to_db': '{}-{}'.format(it[5], it[6])
})
ret = {
'status': 'found',
'vin': vin.upper(),
'cost': found_price,
'records': dat
}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
cur.execute("insert into billing(access_code, vin, ip, status, dt, cost) values (:p1, :p2, :p3, :p4, CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE), :p5)",
{'p1': str(access_code), 'p2': str(vin), 'p3': str(user_ip), 'p4': 'FOUND', 'p5': found_price})
conn.commit()
return response
else:
# nor found
ret = {'status': 'NOT FOUND', 'cost': notfound_price}
if app.debug:
app.logger.debug(json.dumps(ret))
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
cur.execute("insert into billing(access_code, vin, ip, status, dt, cost) values (:p1, :p2, :p3, :p4, CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE), :p5)",
{'p1': str(access_code), 'p2': str(vin), 'p3': str(user_ip), 'p4': 'NOT FOUND', 'p5': notfound_price})
conn.commit()
return response
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route("/api/restfact")
def api_restfact():
access_code = request.args.get('access_code', None)
if len(access_code) > 16 or access_code is None:
ret = {'status': 'incorrect access_code'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
conn = pool.acquire()
cur = conn.cursor()
cur.callproc('make_billing')
cur.execute(
'select t.summ, t.found_price, t.notfound_price, t.decode_price from restfact t where access_code = :p1',
{'p1': str(access_code)})
res = cur.fetchone()
summ = res[0]
if len(res) <= 0:
ret = {'status': 'incorrect access_code'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
else:
ret = {
'access_code': access_code,
'restfact': summ
}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
@app.route("/api/restfact_detail")
def restfact_detail():
access_code = request.args.get('access_code', None)
if len(access_code) > 16 or access_code is None:
ret = {'status': 'incorrect access_code'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
conn = pool.acquire()
cur = conn.cursor()
cur.callproc('make_billing')
cur.execute('select rownum from restfact t where access_code = :p1', {'p1': str(access_code)})
res = cur.fetchall()
if len(res) <= 0:
ret = {'status': 'incorrect access_code'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
cur.execute("select vin, ip, status, dt, cost from billing where access_code = :p1 and dt > CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) - 45 and made = 1 order by id", {'p1': str(access_code)})
res = cur.fetchall()
if len(res) <= 0:
ret = {'status': 'billing not found'}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
else:
dat = []
for it in res:
dat.append(
{
'VIN': it[0],
'IP': it[1],
'STATUS': it[2],
'DATETIME': it[3].isoformat(),
'COST': it[4]
}
)
ret = {
'access_code': access_code,
'report': dat
}
response = app.response_class(
response=json.dumps(ret),
status=200,
mimetype='application/json'
)
if app.debug:
app.logger.debug(json.dumps(ret))
return response
@app.route("/ads.txt")
def ads_txt():
try:
return render_template('ads.txt')
except:
app.logger.error(traceback.format_exc())
return 'bad request!', 500
@app.route('/favicon.ico')
def logo():
"""Serves the logo image."""
with open(app_path+"/static/favicon.ico", 'rb') as bites:
return send_file(
io.BytesIO(bites.read()),
attachment_filename='favicon.ico',
mimetype='image/x-icon'
)
def get_ip(req) -> str:
if 'X-Forwarded-For' in req.headers:
proxy_data = req.headers['X-Forwarded-For']
ip_list = proxy_data.split(',')
user_ip = req.headers.get("Cf-Connecting-Ip") or ip_list[0] # first address in list is User IP
else:
user_ip = req.headers.get("Cf-Connecting-Ip") or req.remote_addr
return user_ip
def get_addr(req) -> str:
try:
return socket.gethostbyaddr(req)[0]
except:
return req
if __name__ == '__main__':
# Start a pool of connections
pool = start_pool()
app.run(port=int(os.environ.get('PORT', '8080')))

414
gips.txt Normal file
View File

@ -0,0 +1,414 @@
66.249.87.194
66.249.87.206
66.249.87.193
66.249.87.205
66.249.87.195
66.249.87.204
209.85.238.172
209.85.238.161
209.85.238.162
209.85.238.173
209.85.238.174
209.85.238.163
209.85.238.164
209.85.238.160
209.85.238.165
209.85.238.166
209.85.238.166
209.85.238.166
66.249.90.164
66.249.90.173
66.249.90.173
66.249.90.160
66.249.90.160
66.249.90.161
66.249.90.161
66.249.90.160
66.249.90.160
66.249.90.173
66.249.90.173
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.164
66.249.90.164
66.249.90.165
66.249.90.165
66.249.90.163
66.249.90.164
66.249.90.164
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.161
66.249.90.163
66.249.90.165
66.249.90.163
66.249.90.163
66.249.90.165
66.249.90.160
66.249.90.164
66.249.90.173
66.249.90.161
66.249.90.161
66.249.90.161
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.163
66.249.90.163
66.249.90.163
66.249.90.163
66.249.90.161
66.249.90.164
66.249.90.163
66.249.90.164
66.249.90.173
66.249.90.173
66.249.90.173
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.165
66.249.90.165
66.249.90.163
66.249.90.165
66.249.90.161
66.249.90.160
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.160
66.249.90.160
66.249.90.160
66.249.90.163
66.249.90.163
66.249.90.164
66.249.90.160
66.249.90.161
66.249.90.161
66.249.90.164
66.249.90.164
66.249.90.165
66.249.90.172
66.249.92.193
66.249.92.193
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.193
66.249.92.202
66.249.92.203
66.249.92.194
66.249.92.203
66.249.92.195
66.249.92.195
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.195
66.249.92.202
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.204
66.249.92.195
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.202
66.249.92.202
66.249.92.194
66.249.92.204
66.249.92.194
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.204
66.249.92.195
66.249.92.203
66.249.92.204
66.249.92.202
66.249.92.194
66.249.92.202
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.203
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.204
66.249.92.195
66.249.92.195
66.249.92.194
66.249.92.203
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.194
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.202
66.249.92.195
66.249.92.195
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.195
66.249.92.194
66.249.92.195
66.249.92.195
66.249.92.195
66.249.92.203
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.195
66.249.92.195
66.249.92.194
66.249.92.195
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.202
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.195
66.249.92.194
66.249.92.203
66.249.92.203
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.203
66.249.92.194
66.249.92.194
66.249.92.202
66.249.92.202
66.249.92.195
66.249.92.195
66.249.92.195
66.249.92.203
66.249.92.202
66.249.92.203
66.249.92.195
66.249.92.194
66.249.92.195
66.249.92.202
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.203
66.249.92.202
66.249.92.195
66.249.92.204
66.249.92.202
66.249.92.194
66.249.92.194
66.249.92.202
66.249.92.194
66.249.92.195
66.249.92.203
66.249.92.203
66.249.92.202
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.203
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.194
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.195
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.203
66.249.92.195
66.249.92.195
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.202
66.249.92.195
66.249.92.204
66.249.92.202
66.249.92.204
66.249.87.192
66.249.87.192
66.249.92.201
72.14.199.162
72.14.199.163
72.14.199.161
72.14.199.163
72.14.199.161
72.14.199.165
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.164
72.14.199.165
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.161
72.14.199.161
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.161
72.14.199.163
72.14.199.164
72.14.199.163
72.14.199.165
72.14.199.164
72.14.199.164
72.14.199.163
72.14.199.163
72.14.199.163
66.249.92.200
66.249.87.128
66.249.87.128
66.249.87.132
66.249.87.132
66.249.87.196
66.249.87.196
66.249.92.199
66.249.87.131
66.249.87.133
66.249.87.131
66.249.87.131
66.249.87.141
66.249.87.129
66.249.87.133
66.249.90.171
74.125.218.227
74.125.218.231
74.125.218.231
74.125.218.225
74.125.218.232
74.125.218.232
74.125.218.233
74.125.218.225
74.125.218.231
74.125.218.226
74.125.218.225
74.125.218.232
74.125.218.225
74.125.218.227
74.125.218.226
74.125.218.226
74.125.218.225
74.125.218.226
74.125.218.227
74.125.218.233
74.125.218.233
74.125.218.227
74.125.218.226
74.125.218.232
74.125.218.225
74.125.218.233
74.125.218.233
74.125.218.227
72.14.199.193
72.14.199.37

20
ips.py Normal file
View File

@ -0,0 +1,20 @@
import os
import socket
import traceback
data = open('ips.txt').read().splitlines()
f = open('gips.txt','w')
for it in data:
try:
hostname = socket.gethostbyaddr(it)
hs = hostname[0].lower()
if hs.startswith('rate') and hs.endswith('google.com'):
print(f'GootHost {hs} ip: {it}')
f.write(f'{it}\n')
except:
print(traceback.format_exc())
hostname=''
print(f'{it} -- {hostname}')

451
ips.txt Normal file
View File

@ -0,0 +1,451 @@
66.249.87.194
66.249.87.206
66.249.87.193
66.249.87.205
66.249.87.195
66.249.87.204
172.71.147.61
172.71.147.62
172.69.58.90
172.69.58.91
172.68.150.74
172.71.147.156
172.71.147.155
172.71.150.170
172.71.150.171
172.71.146.219
172.71.151.133
172.71.150.241
172.71.147.208
172.69.7.138
172.70.178.90
172.69.6.123
172.69.7.59
172.70.126.63
172.70.131.189
172.71.254.6
172.71.254.163
172.69.59.90
172.70.126.58
172.69.7.90
172.69.6.151
172.69.7.55
172.70.178.201
172.69.7.81
172.70.131.172
172.69.6.158
172.70.130.96
172.69.6.196
172.69.6.179
172.69.6.15
172.70.131.99
172.69.58.68
172.69.6.228
209.85.238.172
209.85.238.161
209.85.238.162
209.85.238.173
209.85.238.174
209.85.238.163
209.85.238.164
209.85.238.160
209.85.238.165
209.85.238.166
209.85.238.166
209.85.238.166
66.249.90.164
66.249.90.173
66.249.90.173
66.249.90.160
66.249.90.160
66.249.90.161
66.249.90.161
66.249.90.160
66.249.90.160
66.249.90.173
66.249.90.173
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.164
66.249.90.164
66.249.90.165
66.249.90.165
66.249.90.163
66.249.90.164
66.249.90.164
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.161
66.249.90.163
66.249.90.165
66.249.90.163
66.249.90.163
66.249.90.165
66.249.90.160
66.249.90.164
66.249.90.173
66.249.90.161
66.249.90.161
66.249.90.161
66.249.90.161
66.249.90.160
66.249.90.161
66.249.90.163
66.249.90.163
66.249.90.163
66.249.90.163
66.249.90.161
66.249.90.164
66.249.90.163
66.249.90.164
66.249.90.173
66.249.90.173
66.249.90.173
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.165
66.249.90.165
66.249.90.163
66.249.90.165
66.249.90.161
66.249.90.160
66.249.90.173
66.249.90.160
66.249.90.161
66.249.90.160
66.249.90.160
66.249.90.160
66.249.90.160
66.249.90.163
66.249.90.163
66.249.90.164
66.249.90.160
66.249.90.161
66.249.90.161
66.249.90.164
66.249.90.164
66.249.90.165
66.249.90.172
66.249.92.193
66.249.92.193
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.193
66.249.92.202
66.249.92.203
66.249.92.194
66.249.92.203
66.249.92.195
66.249.92.195
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.195
66.249.92.202
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.204
66.249.92.195
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.202
66.249.92.202
66.249.92.194
66.249.92.204
66.249.92.194
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.204
66.249.92.195
66.249.92.203
66.249.92.204
66.249.92.202
66.249.92.194
66.249.92.202
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.203
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.204
66.249.92.195
66.249.92.195
66.249.92.194
66.249.92.203
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.194
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.202
66.249.92.195
66.249.92.195
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.195
66.249.92.194
66.249.92.195
66.249.92.195
66.249.92.195
66.249.92.203
66.249.92.204
66.249.92.204
66.249.92.203
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.195
66.249.92.195
66.249.92.194
66.249.92.195
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.202
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.195
66.249.92.194
66.249.92.203
66.249.92.203
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.194
66.249.92.203
66.249.92.194
66.249.92.194
66.249.92.202
66.249.92.202
66.249.92.195
66.249.92.195
66.249.92.195
66.249.92.203
66.249.92.202
66.249.92.203
66.249.92.195
66.249.92.194
66.249.92.195
66.249.92.202
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.203
66.249.92.202
66.249.92.195
66.249.92.204
66.249.92.202
66.249.92.194
66.249.92.194
66.249.92.202
66.249.92.194
66.249.92.195
66.249.92.203
66.249.92.203
66.249.92.202
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.203
66.249.92.195
66.249.92.194
66.249.92.204
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.194
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.195
66.249.92.204
66.249.92.204
66.249.92.202
66.249.92.202
66.249.92.194
66.249.92.194
66.249.92.195
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.202
66.249.92.203
66.249.92.203
66.249.92.204
66.249.92.203
66.249.92.203
66.249.92.195
66.249.92.195
66.249.92.202
66.249.92.204
66.249.92.202
66.249.92.203
66.249.92.202
66.249.92.203
66.249.92.204
66.249.92.202
66.249.92.195
66.249.92.204
66.249.92.202
66.249.92.204
66.249.87.192
66.249.87.192
66.249.92.201
72.14.199.162
72.14.199.163
72.14.199.161
72.14.199.163
72.14.199.161
72.14.199.165
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.164
72.14.199.165
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.161
72.14.199.161
72.14.199.163
72.14.199.163
72.14.199.163
72.14.199.161
72.14.199.163
72.14.199.164
72.14.199.163
72.14.199.165
72.14.199.164
72.14.199.164
72.14.199.163
72.14.199.163
72.14.199.163
66.249.92.200
66.249.87.128
66.249.87.128
66.249.87.132
66.249.87.132
66.249.87.196
66.249.87.196
66.249.92.199
66.249.87.131
66.249.87.133
66.249.87.131
66.249.87.131
66.249.87.141
66.249.87.129
66.249.87.133
66.249.90.171
74.125.218.227
74.125.218.231
74.125.218.231
74.125.218.225
74.125.218.232
74.125.218.232
74.125.218.233
74.125.218.225
74.125.218.231
74.125.218.226
74.125.218.225
74.125.218.232
74.125.218.225
74.125.218.227
74.125.218.226
74.125.218.226
74.125.218.225
74.125.218.226
74.125.218.227
74.125.218.233
74.125.218.233
74.125.218.227
74.125.218.226
74.125.218.232
74.125.218.225
74.125.218.233
74.125.218.233
74.125.218.227
72.14.199.193
72.14.199.37

1
killapp.sh Normal file
View File

@ -0,0 +1 @@
ps -ef | grep python | grep app.py | awk '{print $2;system("sudo kill -9 " $2)}'

2
refresh_ip.sh Normal file
View File

@ -0,0 +1,2 @@
cd /home/salvagedb/app
python3 ips.py

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
flask
oracledb
cacheing

9
static/bootstrap-responsive.min.css vendored Normal file

File diff suppressed because one or more lines are too long

12
static/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

BIN
static/curved-arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
static/faviconV2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 B

556
static/plus.css Normal file
View File

@ -0,0 +1,556 @@
/* Mega Menu*/
.plus-mega a{
text-decoration: none;
padding-left: 20px;
display: block;
}
.plus-mega li{
padding-top: 3px;
padding-bottom: 3px;
}
.dropdown-menu.cols2{
min-width: 280px;
}
.dropdown-menu.cols2 .span2{
margin-left: 0px !important;
}
.dropdown-menu.cols3{
min-width: 420px;
}
.dropdown-menu.cols3 .span2{
margin-left: 0px !important;
}
.dropdown-menu.cols4{
min-width: 560px;
}
.dropdown-menu.cols4 .span2{
margin-left: 0px !important;
}
.dropdown-menu.cols5{
min-width: 700px;
}
.dropdown-menu.cols5 .span2{
margin-left: 0px !important;
}
.dropdown-menu.cols6{
min-width: 840px;
}
.dropdown-menu.cols6 .span2{
margin-left: 0px !important;
}
.plus-mega li > a > i{
margin-right: 5px;
}
/* Menu With Images */
.dropdown-menu > li > a > i{
margin-right: 5px;
}
/* Comments */
.plus-comment {
margin-top: 20px;
margin-bottom: 30px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
.plus-comment .pointer{
border:solid 10px transparent;
border-right-color:#FFF;
position:absolute;
margin:20px 0px 0 80px;
}
.plus-comment img{
float:left;
max-width: 100%;
margin-left: 20px;
}
.plus-comment p{
color:#000;
padding: 10px;
margin-left: 100px;
background-color: #FFF;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
/* box-shadow */
-webkit-box-shadow: rgba(0,0,0,0.2) 0px 1px 2px;
-moz-box-shadow: rgba(0,0,0,0.2) 0px 1px 2px;
box-shadow: rgba(0,0,0,0.5) 0px 2px 3px;
}
.plus-comment .plus-comment-details{
float: left;
width: 90px;
}
.plus-comment-details label{
font-weight: normal;
font-size: 12px;
line-height: 15px;
margin-left: 0px;
margin-top: 15px;
text-align: center;
}
.plus-comment-details .plus-comment-date{
margin-top: 0px;
padding: 0px;
font-size: 10px;
}
.plus-comment .plus-comment-tools{
margin-left: 100px;
}
.plus-comment .plus-comment-tools > a{
margin-left: 10px;
text-decoration: none;
}
/* reply */
.plus-comment-reply {
margin-top: 20px;
margin-bottom: 30px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
.plus-comment-reply .pointer{
border:solid 10px transparent;
border-right-color:#FFF;
position:absolute;
margin:20px 0px 0 140px;
}
.plus-comment-reply img{
float:left;
max-width: 100%;
margin-left: 20px;
}
.plus-comment-reply p{
color:#000;
padding: 10px;
margin-left: 160px;
background-color: #FFF;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
/* box-shadow */
-webkit-box-shadow: rgba(0,0,0,0.2) 0px 1px 2px;
-moz-box-shadow: rgba(0,0,0,0.2) 0px 1px 2px;
box-shadow: rgba(0,0,0,0.5) 0px 2px 3px;
}
.plus-comment-reply .plus-comment-details{
float: left;
width: 90px;
margin-left: 60px;
}
.plus-comment-reply .plus-comment-tools{
margin-left: 150px;
}
.plus-comment-reply .plus-comment-tools > a{
margin-left: 10px;
text-decoration: none;
}
/* ////////////////////////////// */
/* Draggable */
.plus-draggable{
padding: 0px;
}
.plus-draggable p{
padding: 10px;
}
/*/////////////////////////*/
/* Collapsable */
.plus-collapsible{
padding: 0px;
}
.plus-collapsible p{
padding: 10px;
}
.plus-collapsible > .navbar{
margin-bottom: 0px !important;
}
/* ////////////////// */
/* Box */
.plus-box{
padding: 0px;
}
.plus-box p{
padding: 10px;
}
/* ///////////////// */
/* Vertical Menu */
.plus-verticalMenu > ul{
display:none;
list-style: none;
}
.plus-verticalMenu > ul > li >a{
text-decoration: none;
color:inherit;
padding-left: 5px;
}
/* ///////////// */
ul.nav li.dropdown:hover ul.dropdown-menu.plus-hover{
display: block;
margin: 0;
}
a.menu:after, .dropdown-toggle:after {
content: none;
}
/* ///////////////*/
/* Pricing Table */
.plus-pricing{
text-align: center;
list-style: none;
border-width: 1px;
border-style: solid;
-webkit-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
-moz-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
}
.plus-pricing > li{
background-color: #fff;
padding: 0.9375em;
border-bottom-width: 1px;
border-bottom-style: solid;
}
.plus-pricing-head{
background-color: #DDDDDD;
padding: 0.9375em 1.25em;
}
.plus-pricing-head h2{
margin: 0;
}
.plus-pricing-price{
background-color: #eee;
padding: 0.9375em 1.25em;
}
.plus-pricing-price h3{
margin: 0;
}
.plus-pricing-details{
padding: 0.9375em;
color:#000;
}
/* ////////////////////////// */
/* Picture Caption */
.plus-pic{
border: solid 2px #ccc;
position: relative;
}
.plus-pic > img{
width:100%;
}
.plus-pic a{
color:#fff;
text-decoration: none;
}
.plus-pic > .plus-badge{
background-color: #5DCE0C;
padding: 2px 5px;
position: absolute;
color: #fff;
-webkit-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
-moz-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
}
.plus-pic > .btn{
position: absolute;
-webkit-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
-moz-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
}
.plus-pic > .right-top{
right:-7px;
top:10px;
}
.plus-pic > .left-top{
left:-7px;
top:10px;
}
.plus-pic > .left-bottom{
left:-7px;
bottom:10px;
}
.plus-pic > .right-bottom{
right:-7px;
bottom:10px;
}
/* /////////////// */
/* Image Hovers */
.plus-pic .plus-hover{
visibility: hidden;
}
.plus-pic:hover .plus-hover{
visibility: visible;
}
/* /////////// */
.plus-empty-5{
content: " ";
height: 5px;
}
.plus-empty-10{
content: " ";
height: 10px;
}
.plus-empty-20{
content: " ";
height: 20px;
}
.plus-empty-30{
content: " ";
height: 30px;
}
.plus-empty-40{
content: " ";
height: 40px;
}
.plus-empty-50{
content: " ";
height: 50px;
}
/* Post */
.plus-post{
position: relative;
-webkit-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
-moz-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
}
.plus-post > .arrow-right{
position: absolute;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 10px solid #ccc;
right: -10px;
top: 10px;
}
.plus-social-tools > a{
margin-left: 10px;
text-decoration: none;
}
.plus-social-tools{
margin-top: 5px;
}
/* Metro Nav */
.plus-metro{
background-color: transparent;
border: none;
box-shadow: none;
border-bottom: none;
position: absolute;
left:-20px;
z-index: 999;
overflow: visible;
}
.plus-metro.plus-metro-right{
right:20px;
}
.plus-metro-nav a{
text-decoration: none;
}
.navbar .nav > li > .plus-metro:after {
border-bottom: none;
}
.navbar .nav > li > .plus-metro:before {
border-bottom:none;
}
.plus-metro-nav{
-webkit-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
-moz-box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
box-shadow: rgba(0,0,0,0.2) 0px 1px 3px;
}
.plus-metro-nav .box{
height: 100px;
margin: 5px;
display: table;
}
.plus-metro-nav .box.red{
background-color: #D32C2C;
}
.plus-metro-nav .box.lightblue{
background-color: #00A8EC;
}
.plus-metro-nav .box.darkblue{
background-color: #0061DC;
}
.plus-metro-nav .box.green{
background-color: #43B51F;
}
.plus-metro-nav .box.purple{
background-color: #640F6C;
}
.plus-metro-nav .box.orange{
background-color: #43B51F;
}
.plus-metro-nav .box.facebook{
background-color: #3C5B9B;
}
.plus-metro-nav .box.pink{
background-color: #D6668F;
}
.plus-metro-nav .box.deviant{
background-color: #455449;
}
.plus-metro-nav .box.brown{
background-color: #BF7A30;
}
.plus-metro-nav .box > h5{
color: #fff;
text-align: center;
display: table-cell;
vertical-align: middle;
}
.plus-metro-nav .box > h5 > i{
margin-right: 5px;
}
.plus-metro-nav .box.height2{
height: 210px;
}
.plus-metro-nav .box.height3{
height: 320px;
}
.plus-metro-nav .span6.box{
padding-right: 0px;
}
.plus-metro > .arrow-up {
width: 0;
height: 0;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid black;
position: absolute;
left:40px;
top:-1px;
}
@media (max-width: 980px) {
.plus-metro-nav{
height: auto !important;
z-index: 999;
left:0px;
position: static !important;
float: none;
clear: both;
width: 100%;
}
.plus-metro{
top: auto;
float: none;
}
.plus-metro-nav > a{
padding: 0px !important;
}
.plus-metro > .arrow-up{
display: none;
}
}
@media (max-width: 767px) {
.plus-metro-nav .box{
position: static;
width:90px;
height: 90px;
float: left;
}
}

215
static/plus2.css Normal file
View File

@ -0,0 +1,215 @@
body {
padding-top: 60px;
padding-bottom: 40px;
}
wrapper {
width: auto;
overflow: hidden;
}
.share_buttons {
width: 268px;
height: 38px;
float: right;
padding-top: 10px;
padding-left: 1px;
padding-right: 10px;
margin-top: 0;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
background: #E2E2E2;
}
.share_buttons .facebook {
display: block;
width: 79px;
height: 27px;
margin-left: 10px;
float: left;
background:
transparent url('https://storage.googleapis.com/static.salvagedb.com/tray_share_buttons.png') no-repeat 0 0;
}
.share_buttons .twitter {
display: block;
width: 79px;
height: 27px;
margin-left: 10px;
float: left;
background:
transparent url('https://storage.googleapis.com/static.salvagedb.com/tray_share_buttons.png') no-repeat 0 -54px;
}
.share_buttons .google {
width: 79px;
height: 27px;
margin-left: 10px;
float: left;
background:
transparent url('https://storage.googleapis.com/static.salvagedb.com/tray_share_buttons.png') no-repeat 0 -108px;
}
input {
margin: 0;
}
#find_your_car{text-align:left;color:#06c;margin-top:0;}
#s1earch_bar{width:700px;}
#vininput{width:300px;font-size:1.5em;height:35px;padding:0 0 0 10px;}
#s1earch_bar{width:700px;margin:0 0 0 -320px;}
#s1earch_bar .search_box{height:35px;font-size:1.5em;padding:0 0 0 10px;}
#s1earch_bar #make_model{width:350px;}
#s1earch_bar #near{margin:5px 5px 0px 5px;font-size:18px;}
#s1earch_bar #zipcode{width:100px;}
#s1earch_bar #go1_button{position:relative;top:1px;height:37px;font-size:20px;margin-left:8px;}
#go_button{top:1px;height:37px;font-size:22px;margin-left:8px;}
#hor-zebra
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
margin: 45px;
background-image: url("https://storage.googleapis.com/static.salvagedb.com/menu-bg.png?v=1");
background-repeat:no-repeat;
text-align: left;
border-collapse: collapse;
}
#hor-zebra a
{
font-size: 14px;
font-weight: normal;
padding: 10px 8px;
color: #fff;
text-decoration: none;
}
#hor-zebra a:hover {text-decoration:underline}
#hor-zebra th
{
font-size: 14px;
font-weight: normal;
padding: 10px 8px;
color: #039;
}
#hor-zebra td
{
padding: 8px;
color: #669;
}
#hor-zebra .odd
{
background: #e8edff;
}
#hor-minimalist-a
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
margin: 1px;
width: 495px;
border-collapse: collapse;
text-align: left;
}
#hor-minimalist-a th
{
font-size: 14px;
font-weight: normal;
color: #039;
padding: 10px 8px;
border-bottom: 2px solid #6678b1;
}
#hor-minimalist-a td
{
color: #669;
padding: 9px 8px 0px 8px;
}
#hor-minimalist-a a
{
color: #669;
padding: 9px 8px 0px 8px;
text-decoration: none;
}
#hor-minimalist-a tbody tr:hover a
{
color: #009;
}
#hor-minimalist-a tbody tr:hover td
{
color: #009;
}
#hor-minimalist2-a
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
margin: 1px;
border-collapse: collapse;
text-align: left;
}
#hor-minimalist2-a th
{
font-size: 14px;
font-weight: normal;
color: #039;
padding: 10px 8px;
border-bottom: 2px solid #6678b1;
}
#hor-minimalist2-a td
{
color: #669;
padding: 9px 8px 0px 8px;
}
#hor-minimalist2-a a
{
color: #669;
padding: 9px 8px 0px 8px;
text-decoration: none;
}
#hor-minimalist2-a tbody tr:hover a
{
color: #009;
}
#hor-minimalist2-a tbody tr:hover td
{
color: #009;
}
#one-column-emphasis
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
margin: 45px;
width: 480px;
text-align: left;
border-collapse: collapse;
}
#one-column-emphasis th
{
font-size: 14px;
font-weight: normal;
padding: 12px 15px;
color: #039;
}
#one-column-emphasis td
{
padding: 10px 15px;
color: #669;
border-top: 1px solid #e8edff;
}

307
static/privacy.css Normal file
View File

@ -0,0 +1,307 @@
html#iubenda_policy,#iubenda_policy body{
margin:0;
padding:0
}
html#iubenda_policy{
overflow-y:scroll;
font-size:100%;
-webkit-text-size-adjust:100%;
-ms-text-size-adjust:100%
}
#iubenda_policy h1,#iubenda_policy h2,#iubenda_policy h3,#iubenda_policy h4,#iubenda_policy p,#iubenda_policy strong,#iubenda_policy li,#iubenda_policy ul{
margin:0;
padding:0;
border:0;
font-weight:normal;
font-style:normal;
font-size:100%;
line-height:1;
font-family:inherit
}
#iubenda_policy ul{
list-style:none
}
html#iubenda_policy{
-webkit-font-smoothing:antialiased
}
#iubenda_policy p{
font-size:13px;
font-weight:normal;
line-height:18px;
margin-bottom:9px
}
#iubenda_policy h1,#iubenda_policy h2,#iubenda_policy h3,#iubenda_policy h4{
font-weight:bold;
color:#59636d
}
#iubenda_policy h1{
margin-bottom:18px;
font-size:30px;
line-height:2
}
#iubenda_policy h2{
font-size:24px;
margin-bottom:18px;
line-height:1.5
}
#iubenda_policy h3,#iubenda_policy h4{
margin-bottom:9px
}
#iubenda_policy h3{
font-size:18px
}
#iubenda_policy h4{
font-size:16px
}
#iubenda_policy ul{
list-style:disc;
padding-top:5px
}
#iubenda_policy ul li{
list-style:disc;
line-height:19px;
font-size:13px;
margin-left:30px;
margin-top:2px
}
#iubenda_policy hr{
margin:0 0 19px;
border:0;
border-bottom:1px solid #eee
}
#iubenda_policy strong{
font-style:inherit;
font-weight:bold
}
#iubenda_policy .box_primary{
border:1px solid #c0c1c1;
border-bottom-color:#a8aaab;
-webkit-box-shadow:0 1px 0 #ebebec;
-moz-box-shadow:0 1px 0 #ebebec;
box-shadow:0 1px 0 #ebebec;
-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.1);
-moz-box-shadow:0 1px 0 rgba(0,0,0,0.1);
box-shadow:0 1px 0 rgba(0,0,0,0.1);
background:#FFF
}
#iubenda_policy .box_10{
padding:10px;
-webkit-border-radius:3px;
-moz-border-radius:3px;
border-radius:3px;
margin-bottom:15px
}
#iubenda_policy .box_10>.w_icon_24,#iubenda_policy .box_10.expand>.w_icon_24,#iubenda_policy .box_10>.w_icon_24.expand-click,#iubenda_policy .box_10.expand>.w_icon_24.expand-click{
padding-left:45px;
background-repeat:no-repeat;
background-color:transparent;
background-position-x:10px;
background-position-y:10px;
background-position:10px 10px
}
#iubenda_policy hr{
padding-top:15px;
margin:0 0 15px 0
}
#iubenda_policy .expand-click{
cursor:pointer;
position:relative
}
#iubenda_policy .box_10.expand .expand-click{
margin:-10px;
padding:12px 25px 13px 10px
}
#iubenda_policy .box_10.expand .expand-content{
margin-top:10px
}
#iubenda_policy .box_10.expand .expand-content>*:first-child{
margin-top:0;
padding-top:0
}
#iubenda_policy .expand .expand-click,#iubenda_policy .box_10.expand .expand-click{
border-bottom:1px dotted #DDD;
margin-bottom:10px;
-webkit-transition:.2s linear all;
-moz-transition:.2s linear all;
-ms-transition:.2s linear all;
-o-transition:.2s linear all;
transition:.2s linear all
}
html#iubenda_policy,#iubenda_policy body{
background-color:#FFF
}
#iubenda_policy{
font-family:"Helvetica Neue",Helvetica,Arial,FreeSans,sans-serif;
font-size:13px;
font-weight:normal;
line-height:18px;
color:#59636d
}
#iubenda_policy body{
margin:0
}
#iubenda_policy .icon_ribbon{
background-image:url(data:image/png;
base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAW0lEQVR42u3OwQkAIQxE0XSWVrazlJpdQdGDC0pQEf7A3ELmibsPV1V9pDM%2FAQAAAAAAAAAAAAAAEAXY1%2BcUwCQnITYD6niL2ASo4z3EaoDKf8qNBQHxArgK8ALKMXCw%2Bim7vwAAAABJRU5ErkJggg%3D%3D)
}
#iubenda_policy .iub_base_container{
-webkit-border-radius:3px;
-moz-border-radius:3px;
border-radius:3px;
background:#fff;
color:#6b6b6b;
position:relative
}
#iubenda_policy p{
line-height:19px;
margin:0;
padding-top:11px
}
#iubenda_policy .iub_content{
position:relative;
padding:25px 30px;
margin:0 auto;
-webkit-border-radius:3px 3px 0 0;
-moz-border-radius:3px 3px 0 0;
border-radius:3px 3px 0 0
}
#iubenda_policy #wbars{
position:relative;
overflow-y:auto;
overflow-x:hidden
}
#iubenda_policy .iub_header{
border-bottom:1px dotted #dfdfdf;
padding-bottom:25px;
position:relative
}
#iubenda_policy .iub_header p{
margin:0;
padding:0
}
#iubenda_policy h1,#iubenda_policy h2,#iubenda_policy h3{
color:#3f3f3f;
margin:0
}
#iubenda_policy h1+p,#iubenda_policy h2+p,#iubenda_policy h3+p{
padding-top:5px
}
#iubenda_policy h1{
font-size:19px;
font-weight:normal;
line-height:23px;
margin-bottom:5px
}
#iubenda_policy h2{
font-size:17px;
font-weight:bold;
line-height:21px;
padding-top:21px
}
#iubenda_policy h3{
font-size:13px;
line-height:19px;
font-weight:bold;
padding-top:24px
}
#iubenda_policy h3+p{
padding-top:0
}
#iubenda_policy h4{
font-size:13px;
font-weight:bold;
padding-top:19px;
margin-bottom:0
}
#iubenda_policy h4:first-child{
padding-top:0
}
#iubenda_policy .one_line_col{
zoom:1;
float:left;
width:100%;
border-bottom:1px dotted #dfdfdf
}
#iubenda_policy .one_line_col:before,#iubenda_policy .one_line_col:after{
display:table;
content:"";
zoom:1;
*display:inline
}
#iubenda_policy .one_line_col:after{
clear:both
}
#iubenda_policy .legal_pp .one_line_col{
float:none;
border-top:0;
padding-bottom:21px
}
#iubenda_policy .legal_pp .definitions{
margin-top:21px
}
#iubenda_policy .legal_pp .definitions .expand-click.w_icon_24{
margin-top:-11px;
padding:14px 10px 12px 45px;
background-repeat:no-repeat;
background-color:transparent;
background-position-x:5px;
background-position-y:0;
background-position:5px 0
}
#iubenda_policy .legal_pp .definitions .expand-content{
padding-left:5px;
padding-right:5px
}
#iubenda_policy .iub_footer{
clear:both;
position:relative;
font-size:11px
}
#iubenda_policy .iub_footer p{
font-size:11px;
padding:0
}
#iubenda_policy .iub_content .iub_footer{
padding:24px 0
}
@media(max-width:767px){
#iubenda_policy .legal_pp .one_line_col{
width:100%
}
}
@media(max-width:480px){
html#iubenda_policy{
padding:0
}
#iubenda_policy body{
padding:0
}
#iubenda_policy .iub_base_container,#iubenda_policy .iub_container{
margin:0
}
#iubenda_policy .one_line_col{
width:100%
}
#iubenda_policy .iub_content{
padding-left:20px;
padding-right:20px
}
}
#iubenda_policy.iubenda_fixed_policy .iub_base_container{
max-width:800px
}
#iubenda_policy.iubenda_fixed_policy .iub_container{
margin-left:auto;
margin-right:auto;
zoom:1
}
#iubenda_policy.iubenda_fixed_policy .iub_container:before,#iubenda_policy.iubenda_fixed_policy .iub_container:after{
display:table;
content:"";
zoom:1;
*display:inline
}
#iubenda_policy.iubenda_fixed_policy .iub_container:after{
clear:both
}

BIN
static/slogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

1
static/styles__ltr.css Normal file

File diff suppressed because one or more lines are too long

BIN
static/vin-position1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

23
sync_cloud_nginx.sh Normal file
View File

@ -0,0 +1,23 @@
#!/bin/bash
CLOUDFLARE_FILE_PATH=/etc/nginx/cloudflare
echo "#Cloudflare" > $CLOUDFLARE_FILE_PATH;
echo "" >> $CLOUDFLARE_FILE_PATH;
echo "# - IPv4" >> $CLOUDFLARE_FILE_PATH;
for i in `curl -s -L https://www.cloudflare.com/ips-v4`; do
echo "set_real_ip_from $i;" >> $CLOUDFLARE_FILE_PATH;
done
echo "" >> $CLOUDFLARE_FILE_PATH;
echo "# - IPv6" >> $CLOUDFLARE_FILE_PATH;
for i in `curl -s -L https://www.cloudflare.com/ips-v6`; do
echo "set_real_ip_from $i;" >> $CLOUDFLARE_FILE_PATH;
done
echo "" >> $CLOUDFLARE_FILE_PATH;
echo "real_ip_header CF-Connecting-IP;" >> $CLOUDFLARE_FILE_PATH;
#test configuration and reload nginx
nginx -t && systemctl reload nginx

1
templates/ads.txt Normal file
View File

@ -0,0 +1 @@
google.com, pub-2964481252074108, DIRECT, f08c47fec0942fa0

114
templates/database.html Normal file
View File

@ -0,0 +1,114 @@
{% extends "head.html" %}
{% block content %}
<div class="container">
<div class="hero-unit">
<h1>Buying a Used Car? Check it!</h1>
<br>
<p><a href="https://www.salvagedb.com/" title="Salvagedb.com" rel="nofollow">Salvagedb.com</a> provides
information about salvage or junk vehicles; damage from hail, flood or fire; mileage discrepancies or
odometer rollback; and gray market vehicles. We do not claim that the car got in our databank has salvage
title, but the fact that it has been damaged for sure. Our site helps people avoid buying a damaged vehicle
in the past.
</p>
<div class="wrapper">
<!--
-->
</div>
</div>
<br><br>
<table border="0" cellspacing="0" cellpadding="0" align="center" style="padding: 0px 0px 0px 0px">
<tr>
<td width="500px">
<table id="hor-minimalist-a" summary="Salvage cars;Database page 1">
<thead>
<tr>
<th scope="col">Make</th>
<th scope="col">Model</th>
<th scope="col">Year</th>
<th scope="col">
<center>VIN</center>
</th>
</tr>
</thead>
<tbody>
{% for it in pg%}
{% if it[0] <=25 %}
<tr>
<td>{{it[2]}}</td>
<td>{{it[3][0:14]}}</td>
<td>{{it[4]}}</td>
<td style="text-align:right;"><a href="/detail/{{it[1]}}.html"
title="vin check - {{it[1]}} ">{{it[1]}}<i
class="icon-search"></i></a></td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</td>
<td width="500px">
<table id="hor-minimalist-a" summary="Salvage cars;Database page 1">
<thead>
<tr>
<th scope="col">Make</th>
<th scope="col">Model</th>
<th scope="col">Year</th>
<th scope="col">
<center>VIN</center>
</th>
</tr>
</thead>
{% for it in pg%}
{% if it[0] >25 %}
<tr>
<td>{{it[2]}}</td>
<td>{{it[3][0:14]}}</td>
<td>{{it[4]}}</td>
<td style="text-align:right;"><a href="/detail/{{it[1]}}.html"
title="vin check - {{it[1]}} ">{{it[1]}}<i
class="icon-search"></i></a></td>
</tr>
{% endif %}
{% endfor %}
</table>
</td>
</table>
<br><br>
<div class="row">
<div class="span4">&nbsp;</div>
<div class="span4 offset1">
{% if cur_page==1 %}
<button class="btn">1</button>
<a class="btn" href="/database/page2.html">2</a>
<a class="btn" href="/database/page3.html">3</a>
<a class="btn" href="/database/page2.html">Next</a>
<a class="btn" href="/database/page{{max_page}}.html">Last</a>
{% endif %}
{% if cur_page==max_page %}
<a class="btn" href="/database/page{{max_page-1}}.html">Prev</a>
<a class="btn" href="/database/page{{max_page-2}}.html">{{max_page-2}}</a>
<a class="btn" href="/database/page{{max_page-1}}.html">{{max_page-2}}</a>
<button class="btn">{{cur_page}}</button>
{% endif %}
{% if cur_page!=1 and cur_page!=max_page %}
<a class="btn" href="/database/page{{cur_page-1}}.html">Prev</a>
<button class="btn">{{cur_page}}</button>
<a class="btn" href="/database/page{{cur_page+1}}.html">Next</a>
<a class="btn" href="/database/page{{max_page}}.html">Last</a>
{% endif %}
</div>
</div>
</div><br>
<hr>
{% endblock %}

58
templates/decodevin.html Normal file
View File

@ -0,0 +1,58 @@
{% extends "head.html" %}
{% block content %}
<div class="container">
<div class="hero-unit">
<h1>Buying a Used Car? Check it!</h1>
<br>
<p><a href="https://www.salvagedb.com/" title="Salvagedb.com" rel="nofollow">Salvagedb.com</a> provides
information about salvage or junk vehicles; damage from hail, flood or fire; mileage discrepancies or
odometer rollback; and gray market vehicles. We do not claim that the car got in our databank has salvage
title, but the fact that it has been damaged for sure. Our site helps people avoid buying a damaged vehicle
in the past.
</p>
<div class="wrapper">
<!--
-->
</div>
</div>
<br><br>
<div class="container-fluid">
<div class="row-fluid">
<center>
<form id="search_bar" action="/decode" method="post">
<div style="display: inline-block;">
<h2 id="find_your_car">ENTER <a href="https://en.wikipedia.org/wiki/Vehicle_Identification_Number"
target="_blank">VIN</a> YOU CAR</h2>
<input type="text" id="vininput" name="q" class="search_box ui-autocomplete-input" autocomplete="off"
value="" role="textbox" autofocus="" required="" validate="length_between,17,17">
<button class="g-recaptcha btn btn-primary" type="submit" data-sitekey="{{capcha_site}}" id="go_button" data-callback='onSubmit' data-action='submit' style="margin-bottom: 10px;">Check It</button>
</div>
</form>
</center>
</div>
</div>
<script>
function onSubmit(token) {
document.getElementById("search_bar").submit();
}
</script>
<br><br>
{% endblock %}

87
templates/details.html Normal file
View File

@ -0,0 +1,87 @@
{% extends "head.html" %}
{% block content %}
<div class="container">
<div class="hero-unit">
<h1>Buying a Used Car? Check it!</h1>
<br>
<p><a href="https://www.salvagedb.com/" title="Salvagedb.com" rel="nofollow">Salvagedb.com</a> provides
information about salvage or junk vehicles; damage from hail, flood or fire; mileage discrepancies or
odometer rollback; and gray market vehicles. We do not claim that the car got in our databank has salvage
title, but the fact that it has been damaged for sure. Our site helps people avoid buying a damaged vehicle
in the past.
</p></div>
<div class="wrapper">
<center>
<table id="one-column-emphasis">
<tbody>
<tr>
<td>Make</td>
<td>{{det[0][1]}}</td>
</tr>
<tr>
<td>Model</td>
<td>{{det[0][2]}}</td>
</tr>
<tr>
<td>Year</td>
<td>{{det[0][3]}}</td>
</tr>
<tr>
<td>Body Style</td>
<td>{{det[0][4]}}</td>
</tr>
<tr>
<td>Engine</td>
<td>{{det[0][5]}}</td>
</tr>
<tr>
<td>Cylinders</td>
<td>{{det[0][6]}}</td>
</tr>
<tr>
<td>Drive</td>
<td>{{det[0][7]}}</td>
</tr>
</tbody>
</table>
<table style="width: 986px; height: 78px; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td colspan="1" rowspan="1" style="text-align: center;"><h2>Search salvage history?</h2></td>
</tr>
<tr>
<td align="undefined" valign="undefined">
<div style="text-align: center;">
<form name="search_bar" id="search_bar" action="/search" method="get">
<input id="make_model" class="search_box ui-autocomplete-input" name="q" size="55" value="{{vin}}" autocomplete="off" spellcheck="false" type="text">
<button class="g-recaptcha btn btn-primary" data-sitekey="{{capcha_site}}" id="go_button" data-callback='onSubmit' data-action='submit' style="margin-bottom: 10px;">Search</button>
</form>
</div>
</td>
</tr>
</tbody>
</table>
</center>
<br>
<center>
</div>
</div>
<br><br>
<script>
function onSubmit(token) {
document.getElementById("search_bar").submit();
}
</script>
<br><br>
{% endblock %}
<input value="Search" class="btn btn-primary" type="submit" id="go_button">

View File

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="x-dns-prefetch-control" content="on">
<meta name="bothunter-verification" content="b6173305926f27509754d5b9e3a2deafd8ac1129">
<meta name="robots" content="index, follow">
<meta name="keywords"
content="salvage, vehicle, vehicles, car history, vehicle history, salvage vehicle, salvage vehicles, salvage auto, salvage autos, salvage car, salvage cars, car salvage, vehicle salvage, wreck, wrecked car, car wreck, car part, insurance salvage, insurance car, insurance vehicle, junk, junked, junk car, junk cars">
<meta name="description"
content="Salvagedb provides information about salvage or junk vehicles; damage from hail, flood or fire; mileage discrepancies or odometer rollback; and gray market vehicles.">
<meta name="msvalidate.01" content="2BB4375B58200E283A4EC3AC62DF0F3D">
<meta name="google-site-verification" content="NBTledQfL0wfsD78Ro4s-mdYTEMhXUQGBpsy4aLor9M">
<meta property="fb:admins" content="100000893732418">
<meta http-equiv="Content-Language" content="en">
<title>Vehicle history check. Check your car VIN. For FREE!</title>
<link href="https://storage.googleapis.com/static.salvagedb.com/favicon.ico" rel="shortcut icon"
type="image/x-icon">
<link href="/static/bootstrap.min.css" rel="stylesheet">
<link href="/static/bootstrap-responsive.min.css" rel="stylesheet">
<link href="/static/plus.css" rel="stylesheet">
<link href="/static/plus2.css" rel="stylesheet">
<style type="text/css">
</style>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.salvagedb.com/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<!-- Yatomo -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.com/metrika/tag.js", "ym");
ym(99030590, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
</script>
<noscript><div><img src="https://mc.yandex.com/watch/99030590" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- End Matomo Code -->
<script src="https://www.google.com/recaptcha/api.js"></script>
<link rel="stylesheet"
href="data:text/css;charset=utf-8;base64,LyogU2V0IHRoZSBhcHAgYXR0cmlidXRlIHRvIHlvdXIgYXBwJ3MgZGFzaC1kZWxpbWl0ZWQgYWxpYXMuICovCmNsb3VkZmxhcmUtYXBwW2FwcD0ieW91ci1hcHAtbmFtZSJdIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAuNWVtIDAuMmVtOwogIG91dGxpbmU6IDFweCBkb3R0ZWQ7CiAgcGFkZGluZzogMC41ZW07Cn0KCi8qIFVzZSBuYXRpdmUgZWxlbWVudHMgd2hlbiB5b3UnZCBsaWtlIHRvIGluaGVyaXQgc29tZSBzdHlsZXMgZnJvbSB0aGUgcGFnZS4gKi8KY2xvdWRmbGFyZS1hcHBbYXBwPSJ5b3VyLWFwcC1uYW1lIl0gcCB7CiAgdGV4dC1pbmRlbnQ6IDA7Cn0KCi8qIFVzZSBlbSB1bml0cyB0byBzY2FsZSBlbGVtZW50cyBmb3IgZGlmZmVyZW50IGluaGVyaXRlZCBzdHlsZXMuICovCmNsb3VkZmxhcmUtYXBwW2FwcD0ieW91ci1hcHAtbmFtZSJdIGgxIHsKICBmb250LXNpemU6IDEuOGVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgovKiBVc2UgY3VzdG9tIGVsZW1lbnRzIHRvIGF2b2lkIHN0eWxlIGluaGVyaXRhbmNlLiAqLwpjbG91ZGZsYXJlLWFwcFthcHA9InlvdXItYXBwLW5hbWUiXSBleGFtcGxlLWJ1dHRvbiB7CiAgYm9yZGVyOiAxcHggc29saWQ7Cn0KCi8qIFByZWZpeCBjbGFzc2VzIHdpdGggeW91ciBhcHAncyBhbGlhcyB0byBhdm9pZCBzdHlsZSBjb2xsaXNpb25zLiAqLwpjbG91ZGZsYXJlLWFwcFthcHA9InlvdXItYXBwLW5hbWUiXSAuZXhhbXBsZS1oaWdobGlnaHRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwogIG91dGxpbmU6IDAuMmVtIHNvbGlkIHllbGxvdzsKfQo=">
</head>
<body data-new-gr-c-s-check-loaded="14.982.0">
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="https://www.salvagedb.com/">
<img src="/static/slogo.png" height="28">
Salvagedb.com</a>
<div class="nav-collapse">
<ul class="nav">
<li class="active"><a href="/">Home</a></li>
<li class="no2"><a href="/database/page1.html">Salvage vehicles</a></li>
<li class="no3"><a href="/decodevin.html">Decode VIN</a></li>
<li class="no4"><a href="https://www.salvagedb.com/#">Salvage catalog</a></li>
<li class="no6"><a href="mailto:info@salvagedb.com">Contact</a></li>
</ul>
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<br>
<footer>
<p style="text-align:center"> All information about the vehicles and their damage was obtained from open
sources.<br> Salvagedb.com, 2010-<script>document.write(new Date().getFullYear())</script>. All Rights Reserved.</p>
<p style="text-align:center"><a href="privacy.html">Privacy Policy.</a></p>
</footer>
</div>
</body>
</html>

88
templates/head.html Normal file
View File

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="x-dns-prefetch-control" content="on">
<meta name="bothunter-verification" content="b6173305926f27509754d5b9e3a2deafd8ac1129">
<meta name="robots" content="index, follow">
<meta name="keywords"
content="salvage, vehicle, vehicles, car history, vehicle history, salvage vehicle, salvage vehicles, salvage auto, salvage autos, salvage car, salvage cars, car salvage, vehicle salvage, wreck, wrecked car, car wreck, car part, insurance salvage, insurance car, insurance vehicle, junk, junked, junk car, junk cars">
<meta name="description"
content="Salvagedb provides information about salvage or junk vehicles; damage from hail, flood or fire; mileage discrepancies or odometer rollback; and gray market vehicles.">
<meta name="msvalidate.01" content="2BB4375B58200E283A4EC3AC62DF0F3D">
<meta name="google-site-verification" content="NBTledQfL0wfsD78Ro4s-mdYTEMhXUQGBpsy4aLor9M">
<meta property="fb:admins" content="100000893732418">
<meta http-equiv="Content-Language" content="en">
<title>Vehicle history check. Check your car VIN. For FREE!</title>
<link href="https://storage.googleapis.com/static.salvagedb.com/favicon.ico" rel="shortcut icon"
type="image/x-icon">
<link href="/static/bootstrap.min.css" rel="stylesheet">
<link href="/static/bootstrap-responsive.min.css" rel="stylesheet">
<link href="/static/plus.css" rel="stylesheet">
<link href="/static/plus2.css" rel="stylesheet">
<style type="text/css">
</style>
<!-- Yatomo -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.com/metrika/tag.js", "ym");
ym(99030590, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
</script>
<noscript><div><img src="https://mc.yandex.com/watch/99030590" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- End Matomo Code -->
<script src="https://www.google.com/recaptcha/api.js"></script>
<link rel="stylesheet"
href="data:text/css;charset=utf-8;base64,LyogU2V0IHRoZSBhcHAgYXR0cmlidXRlIHRvIHlvdXIgYXBwJ3MgZGFzaC1kZWxpbWl0ZWQgYWxpYXMuICovCmNsb3VkZmxhcmUtYXBwW2FwcD0ieW91ci1hcHAtbmFtZSJdIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAuNWVtIDAuMmVtOwogIG91dGxpbmU6IDFweCBkb3R0ZWQ7CiAgcGFkZGluZzogMC41ZW07Cn0KCi8qIFVzZSBuYXRpdmUgZWxlbWVudHMgd2hlbiB5b3UnZCBsaWtlIHRvIGluaGVyaXQgc29tZSBzdHlsZXMgZnJvbSB0aGUgcGFnZS4gKi8KY2xvdWRmbGFyZS1hcHBbYXBwPSJ5b3VyLWFwcC1uYW1lIl0gcCB7CiAgdGV4dC1pbmRlbnQ6IDA7Cn0KCi8qIFVzZSBlbSB1bml0cyB0byBzY2FsZSBlbGVtZW50cyBmb3IgZGlmZmVyZW50IGluaGVyaXRlZCBzdHlsZXMuICovCmNsb3VkZmxhcmUtYXBwW2FwcD0ieW91ci1hcHAtbmFtZSJdIGgxIHsKICBmb250LXNpemU6IDEuOGVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgovKiBVc2UgY3VzdG9tIGVsZW1lbnRzIHRvIGF2b2lkIHN0eWxlIGluaGVyaXRhbmNlLiAqLwpjbG91ZGZsYXJlLWFwcFthcHA9InlvdXItYXBwLW5hbWUiXSBleGFtcGxlLWJ1dHRvbiB7CiAgYm9yZGVyOiAxcHggc29saWQ7Cn0KCi8qIFByZWZpeCBjbGFzc2VzIHdpdGggeW91ciBhcHAncyBhbGlhcyB0byBhdm9pZCBzdHlsZSBjb2xsaXNpb25zLiAqLwpjbG91ZGZsYXJlLWFwcFthcHA9InlvdXItYXBwLW5hbWUiXSAuZXhhbXBsZS1oaWdobGlnaHRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwogIG91dGxpbmU6IDAuMmVtIHNvbGlkIHllbGxvdzsKfQo=">
</head>
<body data-new-gr-c-s-check-loaded="14.982.0">
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="https://www.salvagedb.com/">
<img src="/static/slogo.png" height="28">
Salvagedb.com</a>
<div class="nav-collapse">
<ul class="nav">
<li class="active"><a href="/">Home</a></li>
<li class="no2"><a href="/database/page1.html">Salvage vehicles</a></li>
<li class="no3"><a href="/decodevin.html">Decode VIN</a></li>
<li class="no4"><a href="https://www.salvagedb.com/#">Salvage catalog</a></li>
<li class="no6"><a href="mailto:info@salvagedb.com">Contact</a></li>
</ul>
</div>
</div>
</div>
</div>
{% block content %}{% endblock %}
<br>
<footer>
<p style="text-align:center"> All information about the vehicles and their damage was obtained from open
sources.<br> Salvagedb.com, 2010-<script>document.write(new Date().getFullYear())</script>. All Rights Reserved.</p>
<p style="text-align:center"><a href="privacy.html">Privacy Policy.</a></p>
</footer>
</div>
</body>
</html>

67
templates/index.html Normal file
View File

@ -0,0 +1,67 @@
{% extends "head.html" %}
{% block content %}
<div class="container">
<div class="hero-unit">
<h1>Buying a Used Car? Check it!</h1>
<br>
<p><a href="https://www.salvagedb.com/" title="Salvagedb.com" rel="nofollow">Salvagedb.com</a> provides
information about salvage or junk vehicles; damage from hail, flood or fire; mileage discrepancies or
odometer rollback; and gray market vehicles. We do not claim that the car got in our databank has salvage
title, but the fact that it has been damaged for sure. Our site helps people avoid buying a damaged vehicle
in the past.
</p>
<div class="wrapper">
<!--
-->
</div>
</div>
<br><br>
<div class="container-fluid">
<div class="row-fluid">
<center>
<form id="search_bar" action="/decode" method="post">
<div style="display: inline-block;">
<h2 id="find_your_car">ENTER <a href="https://en.wikipedia.org/wiki/Vehicle_Identification_Number"
target="_blank">VIN</a> YOU CAR</h2>
<input type="text" id="vininput" name="q" class="search_box ui-autocomplete-input" autocomplete="off"
value="" role="textbox" autofocus="" required="" validate="length_between,17,17">
<button class="g-recaptcha btn btn-primary" type="submit" data-sitekey="{{capcha_site}}" id="go_button" data-callback='onSubmit' data-action='submit' style="margin-bottom: 10px;">Check It</button>
</div>
</form>
</center>
</div>
</div>
<h2 style="text-align: center;">Over {{ cnt }} salvage vehicles added.</h2>
<br>
<center>
</center>
<br>
<br><br>
<center>
<img src="static/vin-position1.gif">
</center>
<br>
<script>
function onSubmit(token) {
document.getElementById("search_bar").submit();
}
</script>
{% endblock %}

290
templates/privacy.html Normal file
View File

@ -0,0 +1,290 @@
{% raw %}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html id="iubenda_policy" class="iubenda_fixed_policy">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Privacy Policy of www.salvagedb.com</title>
<meta content="privacy policy" name="keywords">
<meta http-equiv="Content-Language" content="en">
<meta name="robots" content="noindex, follow">
<meta property="og:title" content="Privacy Policy of www.salvagedb.com">
<meta property="og:type" content="website">
<meta name="viewport" content="width=device-width">
<link href="static/privacy.css" media="screen" rel="stylesheet" type="text/css">
<style>@media print {#ghostery-purple-box {display:none !important}}</style>
<link rel="stylesheet"
href="data:text/css;charset=utf-8;base64,LyogU2V0IHRoZSBhcHAgYXR0cmlidXRlIHRvIHlvdXIgYXBwJ3MgZGFzaC1kZWxpbWl0ZWQgYWxpYXMuICovCmNsb3VkZmxhcmUtYXBwW2FwcD0ieW91ci1hcHAtbmFtZSJdIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAuNWVtIDAuMmVtOwogIG91dGxpbmU6IDFweCBkb3R0ZWQ7CiAgcGFkZGluZzogMC41ZW07Cn0KCi8qIFVzZSBuYXRpdmUgZWxlbWVudHMgd2hlbiB5b3UnZCBsaWtlIHRvIGluaGVyaXQgc29tZSBzdHlsZXMgZnJvbSB0aGUgcGFnZS4gKi8KY2xvdWRmbGFyZS1hcHBbYXBwPSJ5b3VyLWFwcC1uYW1lIl0gcCB7CiAgdGV4dC1pbmRlbnQ6IDA7Cn0KCi8qIFVzZSBlbSB1bml0cyB0byBzY2FsZSBlbGVtZW50cyBmb3IgZGlmZmVyZW50IGluaGVyaXRlZCBzdHlsZXMuICovCmNsb3VkZmxhcmUtYXBwW2FwcD0ieW91ci1hcHAtbmFtZSJdIGgxIHsKICBmb250LXNpemU6IDEuOGVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgovKiBVc2UgY3VzdG9tIGVsZW1lbnRzIHRvIGF2b2lkIHN0eWxlIGluaGVyaXRhbmNlLiAqLwpjbG91ZGZsYXJlLWFwcFthcHA9InlvdXItYXBwLW5hbWUiXSBleGFtcGxlLWJ1dHRvbiB7CiAgYm9yZGVyOiAxcHggc29saWQ7Cn0KCi8qIFByZWZpeCBjbGFzc2VzIHdpdGggeW91ciBhcHAncyBhbGlhcyB0byBhdm9pZCBzdHlsZSBjb2xsaXNpb25zLiAqLwpjbG91ZGZsYXJlLWFwcFthcHA9InlvdXItYXBwLW5hbWUiXSAuZXhhbXBsZS1oaWdobGlnaHRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwogIG91dGxpbmU6IDAuMmVtIHNvbGlkIHllbGxvdzsKfQo=">
</head>
<body>
<div id="wbars_all">
<div class="iub_container iub_base_container">
<div id="wbars">
<div class="iub_content legal_pp">
<div class="iub_header">
<h1>Privacy Policy of <strong>www.salvagedb.com</strong></h1>
<p>In order to receive information about your Personal Data, the purposes and the parties the Data
is shared with, contact the Owner.</p>
</div>
<div class="one_line_col">
<h2 id="owner_of_the_data">Owner and Data Controller</h2>
</div>
<div class="one_line_col">
<h2 id="types_of_data">Types of Data collected</h2>
<p>The owner does not provide a list of Personal Data types collected.</p>
<p>Complete details on each type of Personal Data collected are provided in the dedicated sections
of this privacy policy or by specific explanation texts displayed prior to the Data
collection.<br>Personal Data may be freely provided by the User, or, in case of Usage Data,
collected automatically when using this Application.<br>Unless specified otherwise, all Data
requested by this Application is mandatory and failure to provide this Data may make it
impossible for this Application to provide its services. In cases where this Application
specifically states that some Data is not mandatory, Users are free not to communicate this Data
without consequences to the availability or the functioning of the Service.<br>Users who are
uncertain about which Personal Data is mandatory are welcome to contact the Owner.<br>Any use of
Cookies <20> or of other tracking tools <20> by this Application or by the owners of third-party
services used by this Application serves the purpose of providing the Service required by the
User, in addition to any other purposes described in the present document and in the Cookie
Policy, if available.</p>
<p>Users are responsible for any third-party Personal Data obtained, published or shared through
this Application and confirm that they have the third party's consent to provide the Data to the
Owner.</p>
</div>
<div class="one_line_col">
<h2 id="place_of_processing">Mode and place of processing the Data</h2>
<h3>Methods of processing</h3>
<p>The Owner takes appropriate security measures to prevent unauthorized access, disclosure,
modification, or unauthorized destruction of the Data.<br>The Data processing is carried out
using computers and/or IT enabled tools, following organizational procedures and modes strictly
related to the purposes indicated. In addition to the Owner, in some cases, the Data may be
accessible to certain types of persons in charge, involved with the operation of this
Application (administration, sales, marketing, legal, system administration) or external parties
(such as third-party technical service providers, mail carriers, hosting providers, IT
companies, communications agencies) appointed, if necessary, as Data Processors by the Owner.
The updated list of these parties may be requested from the Owner at any time.</p>
<h3>Legal basis of processing</h3>
<p>The Owner may process Personal Data relating to Users if one of the following applies:</p>
<ul>
<li>Users have given their consent for one or more specific purposes. Note: Under some
legislations the Owner may be allowed to process Personal Data until the User objects to
such processing (<28>opt-out<75>), without having to rely on consent or any other of the following
legal bases. This, however, does not apply, whenever the processing of Personal Data is
subject to European data protection law;
</li>
<li>provision of Data is necessary for the performance of an agreement with the User and/or for
any pre-contractual obligations thereof;
</li>
<li>processing is necessary for compliance with a legal obligation to which the Owner is
subject;
</li>
<li>processing is related to a task that is carried out in the public interest or in the
exercise of official authority vested in the Owner;
</li>
<li>processing is necessary for the purposes of the legitimate interests pursued by the Owner or
by a third party.
</li>
</ul>
<p>In any case, the Owner will gladly help to clarify the specific legal basis that applies to the
processing, and in particular whether the provision of Personal Data is a statutory or
contractual requirement, or a requirement necessary to enter into a contract. </p>
<h3>Place</h3>
<p>The Data is processed at the Owner's operating offices and in any other places where the parties
involved in the processing are located.<br><br>
Depending on the User's location, data transfers may involve transferring the User's Data to a
country other than their own. To find out more about the place of processing of such transferred
Data, Users can check the section containing details about the processing of Personal Data.</p>
<p>Users are also entitled to learn about the legal basis of Data transfers to a country outside the
European Union or to any international organization governed by public international law or set
up by two or more countries, such as the UN, and about the security measures taken by the Owner
to safeguard their Data.<br><br>
If any such transfer takes place, Users can find out more by checking the relevant sections of
this document or inquire with the Owner using the information provided in the contact section.
</p>
<h3>Retention time</h3>
<p>Personal Data shall be processed and stored for as long as required by the purpose they have been
collected for.</p>
<p>Therefore:</p>
<ul>
<li>Personal Data collected for purposes related to the performance of a contract between the
Owner and the User shall be retained until such contract has been fully performed.
</li>
<li>Personal Data collected for the purposes of the Owner<65>s legitimate interests shall be
retained as long as needed to fulfill such purposes. Users may find specific information
regarding the legitimate interests pursued by the Owner within the relevant sections of this
document or by contacting the Owner.
</li>
</ul>
<p>The Owner may be allowed to retain Personal Data for a longer period whenever the User has given
consent to such processing, as long as such consent is not withdrawn. Furthermore, the Owner may
be obliged to retain Personal Data for a longer period whenever required to do so for the
performance of a legal obligation or upon order of an authority.<br><br>
Once the retention period expires, Personal Data shall be deleted. Therefore, the right to
access, the right to erasure, the right to rectification and the right to data portability
cannot be enforced after expiration of the retention period.</p>
</div>
<div class="one_line_col">
<h2>The rights of Users</h2>
<p>Users may exercise certain rights regarding their Data processed by the Owner.</p>
<p>In particular, Users have the right to do the following:</p>
<ul>
<li><b>Withdraw their consent at any time.</b> Users have the right to withdraw consent where
they have previously given their consent to the processing of their Personal Data.
</li>
<li><b>Object to processing of their Data.</b> Users have the right to object to the processing
of their Data if the processing is carried out on a legal basis other than consent. Further
details are provided in the dedicated section below.
</li>
<li><b>Access their Data.</b> Users have the right to learn if Data is being processed by the
Owner, obtain disclosure regarding certain aspects of the processing and obtain a copy of
the Data undergoing processing.
</li>
<li><b>Verify and seek rectification.</b> Users have the right to verify the accuracy of their
Data and ask for it to be updated or corrected.
</li>
<li><b>Restrict the processing of their Data.</b> Users have the right, under certain
circumstances, to restrict the processing of their Data. In this case, the Owner will not
process their Data for any purpose other than storing it.
</li>
<li><b>Have their Personal Data deleted or otherwise removed.</b> Users have the right, under
certain circumstances, to obtain the erasure of their Data from the Owner.
</li>
<li><b>Receive their Data and have it transferred to another controller.</b> Users have the
right to receive their Data in a structured, commonly used and machine readable format and,
if technically feasible, to have it transmitted to another controller without any hindrance.
This provision is applicable provided that the Data is processed by automated means and that
the processing is based on the User's consent, on a contract which the User is part of or on
pre-contractual obligations thereof.
</li>
<li><b>Lodge a complaint.</b> Users have the right to bring a claim before their competent data
protection authority.
</li>
</ul>
<h3>Details about the right to object to processing</h3>
<p>Where Personal Data is processed for a public interest, in the exercise of an official authority
vested in the Owner or for the purposes of the legitimate interests pursued by the Owner, Users
may object to such processing by providing a ground related to their particular situation to
justify the objection.</p>
<p>Users must know that, however, should their Personal Data be processed for direct marketing
purposes, they can object to that processing at any time without providing any justification. To
learn, whether the Owner is processing Personal Data for direct marketing purposes, Users may
refer to the relevant sections of this document. </p>
<h3>How to exercise these rights</h3>
<p>Any requests to exercise User rights can be directed to the Owner through the contact details
provided in this document. These requests can be exercised free of charge and will be addressed
by the Owner as early as possible and always within one month.</p>
</div>
<div class="one_line_col">
<h2 id="further_data_processing_info">Additional information about Data collection and
processing</h2>
<h3>Legal action</h3>
<p>
The User's Personal Data may be used for legal purposes by the Owner in Court or in the stages
leading to possible legal action arising from improper use of this Application or the related
Services.<br>The User declares to be aware that the Owner may be required to reveal personal
data upon request of public authorities.
</p>
<h3>Additional information about User's Personal Data</h3>
<p>
In addition to the information contained in this privacy policy, this Application may provide
the User with additional and contextual information concerning particular Services or the
collection and processing of Personal Data upon request.
</p>
<h3>System logs and maintenance</h3>
<p>
For operation and maintenance purposes, this Application and any third-party services may
collect files that record interaction with this Application (System logs) use other Personal
Data (such as the IP Address) for this purpose.
</p>
<h3>Information not contained in this policy</h3>
<p>
More details concerning the collection or processing of Personal Data may be requested from the
Owner at any time. Please see the contact information at the beginning of this document.
</p>
<h3>How <20>Do Not Track<63> requests are handled</h3>
<p>
This Application does not support <20>Do Not Track<63> requests.<br>To determine whether any of the
third-party services it uses honor the <20>Do Not Track<63> requests, please read their privacy
policies.
</p>
<h3>Changes to this privacy policy</h3>
<p>
The Owner reserves the right to make changes to this privacy policy at any time by giving notice
to its Users on this page and possibly within this Application and/or - as far as technically
and legally feasible - sending a notice to Users via any contact information available to the
Owner. It is strongly recommended to check this page often, referring to the date of the last
modification listed at the bottom. <br><br>
Should the changes affect processing activities performed on the basis of the User<65>s consent,
the Owner shall collect new consent from the User, where required.
</p>
</div>
<div class="one_line_col">
<div class="box_primary box_10 definitions expand">
<h3 class="expand-click w_icon_24 icon_ribbon">
Definitions and legal references
</h3>
<div class="expand-content">
<h4>Personal Data (or Data)</h4>
<p>Any information that directly, indirectly, or in connection with other information <20>
including a personal identification number <20> allows for the identification or
identifiability of a natural person.</p>
<h4>Usage Data</h4>
<p>Information collected automatically through this Application (or third-party services
employed in this Application), which can include: the IP addresses or domain names of
the computers utilized by the Users who use this Application, the URI addresses (Uniform
Resource Identifier), the time of the request, the method utilized to submit the request
to the server, the size of the file received in response, the numerical code indicating
the status of the server's answer (successful outcome, error, etc.), the country of
origin, the features of the browser and the operating system utilized by the User, the
various time details per visit (e.g., the time spent on each page within the
Application) and the details about the path followed within the Application with special
reference to the sequence of pages visited, and other parameters about the device
operating system and/or the User's IT environment.</p>
<h4>User</h4>
<p>The individual using this Application who, unless otherwise specified, coincides with the
Data Subject.</p>
<h4>Data Subject</h4>
<p>The natural person to whom the Personal Data refers.</p>
<h4>Data Processor (or Data Supervisor)</h4>
<p>The natural or legal person, public authority, agency or other body which processes
Personal Data on behalf of the Controller, as described in this privacy policy.</p>
<h4>Data Controller (or Owner)</h4>
<p>The natural or legal person, public authority, agency or other body which, alone or
jointly with others, determines the purposes and means of the processing of Personal
Data, including the security measures concerning the operation and use of this
Application. The Data Controller, unless otherwise specified, is the Owner of this
Application.</p>
<h4>
This Application
</h4>
<p>The means by which the Personal Data of the User is collected and processed.</p>
<h4>Service</h4>
<p>The service provided by this Application as described in the relative terms (if
available) and on this site/application.</p>
<h4>European Union (or EU)
</h4>
<p>Unless otherwise specified, all references made within this document to the European
Union include all current member states to the European Union and the European Economic
Area.
</p>
<hr>
<h4>Legal information</h4>
<p>This privacy statement has been prepared based on provisions of multiple legislations,
including Art. 13/14 of Regulation (EU) 2016/679 (General Data Protection
Regulation).</p>
<p>This privacy policy relates solely to this Application, if not stated otherwise within
this document.</p>
</div>
</div>
</div>
<div class="iub_footer">
<p>
Latest update: May 13, 2018
</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
{% endraw %}

835
templates/robots.txt Normal file
View File

@ -0,0 +1,835 @@
User-agent: *
Disallow: /detail/
Disallow: /search
Disallow: /info/
User-agent: Yandex
Disallow: /
User-agent: Amazonbot
Disallow: /
User-Agent: SemrushBot
Disallow: /
User-Agent: MJ12bot
Disallow: /
User-Agent: AhrefsBot
Disallow: /
User-Agent: gigabot
Disallow: /
User-Agent: Gigabot/2.0
Disallow: /
User-Agent: msnbot
Disallow: /
User-Agent: msnbot/1.0
Disallow: /
User-Agent: ia_archiver
Disallow: /
User-Agent: libwww-perl
Disallow: /
User-Agent: NetStat.Ru Agent
Disallow: /
User-Agent: WebAlta Crawler/1.3.25
Disallow: /
User-Agent: Yahoo!-MMCrawler/3.x
Disallow: /
User-Agent: MMCrawler/3.x
Disallow: /
User-Agent: NG/2.0
Disallow: /
User-Agent: slurp
Disallow: /
User-Agent: aipbot
Disallow: /
User-Agent: Alexibot
Disallow: /
User-Agent: GameSpyHTTP/1.0
Disallow: /
User-Agent: Aqua_Products
Disallow: /
User-Agent: asterias
Disallow: /
User-Agent: b2w/0.1
Disallow: /
User-Agent: BackDoorBot/1.0
Disallow: /
User-Agent: becomebot
Disallow: /
User-Agent: BlowFish/1.0
Disallow: /
User-Agent: Bookmark search tool
Disallow: /
User-Agent: BotALot
Disallow: /
User-Agent: BotRightHere
Disallow: /
User-Agent: BuiltBotTough
Disallow: /
User-Agent: Bullseye/1.0
Disallow: /
User-Agent: BunnySlippers
Disallow: /
User-Agent: CheeseBot
Disallow: /
User-Agent: CherryPicker
Disallow: /
User-Agent: CherryPickerElite/1.0
Disallow: /
User-Agent: CherryPickerSE/1.0
Disallow: /
User-Agent: Copernic
Disallow: /
User-Agent: CopyRightCheck
Disallow: /
User-Agent: cosmos
Disallow: /
User-Agent: Crescent
Disallow: /
User-Agent: Crescent Internet ToolPak HTTP OLE Control v.1.0
Disallow: /
User-Agent: DittoSpyder
Disallow: /
User-Agent: EmailCollector
Disallow: /
User-Agent: EmailSiphon
Disallow: /
User-Agent: EmailWolf
Disallow: /
User-Agent: EroCrawler
Disallow: /
User-Agent: ExtractorPro
Disallow: /
User-Agent: FairAd Client
Disallow: /
User-Agent: Fasterfox
Disallow: /
User-Agent: Flaming AttackBot
Disallow: /
User-Agent: Foobot
Disallow: /
User-Agent: Gaisbot
Disallow: /
User-Agent: GetRight/4.2
Disallow: /
User-Agent: Harvest/1.5
Disallow: /
User-Agent: hloader
Disallow: /
User-Agent: httplib
Disallow: /
User-Agent: HTTrack 3.0
Disallow: /
User-Agent: humanlinks
Disallow: /
User-Agent: IconSurf
Disallow: /
User-Agent: InfoNaviRobot
Disallow: /
User-Agent: Iron33/1.0.2
Disallow: /
User-Agent: JennyBot
Disallow: /
User-Agent: Kenjin Spider
Disallow: /
User-Agent: Keyword Density/0.9
Disallow: /
User-Agent: larbin
Disallow: /
User-Agent: LexiBot
Disallow: /
User-Agent: libWeb/clsHTTP
Disallow: /
User-Agent: LinkextractorPro
Disallow: /
User-Agent: LinkScan/8.1a Unix
Disallow: /
User-Agent: LinkWalker
Disallow: /
User-Agent: LNSpiderguy
Disallow: /
User-Agent: lwp-trivial
Disallow: /
User-Agent: lwp-trivial/1.34
Disallow: /
User-Agent: Mata Hari
Disallow: /
User-Agent: Microsoft URL Control
Disallow: /
User-Agent: Microsoft URL Control - 5.01.4511
Disallow: /
User-Agent: Microsoft URL Control - 6.00.8169
Disallow: /
User-Agent: MIIxpc
Disallow: /
User-Agent: MIIxpc/4.2
Disallow: /
User-Agent: Mister PiX
Disallow: /
User-Agent: moget
Disallow: /
User-Agent: moget/2.1
Disallow: /
User-Agent: MSIECrawler
Disallow: /
User-Agent: NetAnts
Disallow: /
User-Agent: NICErsPRO
Disallow: /
User-Agent: Offline Explorer
Disallow: /
User-Agent: Openbot
Disallow: /
User-Agent: Openfind
Disallow: /
User-Agent: Openfind data gatherer
Disallow: /
User-Agent: Oracle Ultra Search
Disallow: /
User-Agent: PerMan
Disallow: /
User-Agent: ProPowerBot/2.14
Disallow: /
User-Agent: ProWebWalker
Disallow: /
User-Agent: psbot
Disallow: /
User-Agent: Python-urllib
Disallow: /
User-Agent: QueryN Metasearch
Disallow: /
User-Agent: Radiation Retriever 1.1
Disallow: /
User-Agent: RepoMonkey
Disallow: /
User-Agent: RepoMonkey Bait & Tackle/v1.01
Disallow: /
User-Agent: RMA
Disallow: /
User-Agent: searchpreview
Disallow: /
User-Agent: SiteSnagger
Disallow: /
User-Agent: SpankBot
Disallow: /
User-Agent: spanner
Disallow: /
User-Agent: SurveyBot
Disallow: /
User-Agent: suzuran
Disallow: /
User-Agent: Szukacz/1.4
Disallow: /
User-Agent: Teleport
Disallow: /
User-Agent: TeleportPro
Disallow: /
User-Agent: Telesoft
Disallow: /
User-Agent: The Intraformant
Disallow: /
User-Agent: TheNomad
Disallow: /
User-Agent: TightTwatBot
Disallow: /
User-Agent: toCrawl/UrlDispatcher
Disallow: /
User-Agent: True_Robot
Disallow: /
User-Agent: True_Robot/1.0
Disallow: /
User-Agent: turingos
Disallow: /
User-Agent: TurnitinBot
Disallow: /
User-Agent: TurnitinBot/1.5
Disallow: /
User-Agent: URL Control
Disallow: /
User-Agent: URL_Spider_Pro
Disallow: /
User-Agent: URLy Warning
Disallow: /
User-Agent: VCI
Disallow: /
User-Agent: VCI WebViewer VCI WebViewer Win32
Disallow: /
User-Agent: Web Image Collector
Disallow: /
User-Agent: WebAuto
Disallow: /
User-Agent: WebBandit
Disallow: /
User-Agent: WebBandit/3.50
Disallow: /
User-Agent: WebCapture 2.0
Disallow: /
User-Agent: WebCopier
Disallow: /
User-Agent: WebCopier v.2.2
Disallow: /
User-Agent: WebCopier v3.2a
Disallow: /
User-Agent: WebEnhancer
Disallow: /
User-Agent: WebSauger
Disallow: /
User-Agent: Website Quester
Disallow: /
User-Agent: Webster Pro
Disallow: /
User-Agent: WebStripper
Disallow: /
User-Agent: WebZip
Disallow: /
User-Agent: WebZip
Disallow: /
User-Agent: WebZip/4.0
Disallow: /
User-Agent: WebZIP/4.21
Disallow: /
User-Agent: WebZIP/5.0
Disallow: /
User-Agent: Wget
Disallow: /
User-Agent: wget
Disallow: /
User-Agent: Wget/1.5.3
Disallow: /
User-Agent: Wget/1.6
Disallow: /
User-Agent: WWW-Collector-E
Disallow: /
User-Agent: Xenu's
Disallow: /
User-Agent: Xenu's Link Sleuth 1.1c
Disallow: /
User-Agent: Zeus
Disallow: /
User-Agent: Zeus 32297 Webster Pro V2.9 Win32
Disallow: /
User-Agent: Zeus Link Scout
Disallow: /
User-Agent: EmailSiphon
Disallow: /
User-Agent: EmailCollector
Disallow: /
User-Agent: teoma
Disallow: /
User-Agent: NjuiceBot
Disallow: /
User-Agent: Scrapy
Disallow: /
User-Agent: Baiduspider
Disallow: /
User-Agent: SeznamBot
Disallow: /
User-Agent: crawler
Disallow: /
User-Agent: JS-Kit
Disallow: /
User-Agent: HybridBot
Disallow: /
User-Agent: Voyager
Disallow: /
User-Agent: PostRank
Disallow: /
User-Agent: DomainCrawler
Disallow: /
User-Agent: MegaIndex.ru
Disallow: /
User-Agent: ltx71
Disallow: /
User-Agent: Exabot
Disallow: /
User-Agent: CCBot
Disallow: /
User-Agent: DotBot
Disallow: /
User-Agent: GetIntent\ Crawler
Disallow: /
User-Agent: Butterfly
Disallow: /
User-Agent: libwww
Disallow: /
User-Agent: SWeb
Disallow: /
User-Agent: LinkExchanger
Disallow: /
User-Agent: Soup
Disallow: /
User-Agent: GrapeshotCrawler
Disallow: /
User-Agent: DnyzBot
Disallow: /
User-Agent: spbot
Disallow: /
User-Agent: DeuSu
Disallow: /
User-Agent: MLBot
Disallow: /
User-Agent: InternetSeer
Disallow: /
User-Agent: BUbiNG
Disallow: /
User-Agent: FairShare
Disallow: /
User-Agent: Yeti
Disallow: /
User-Agent: Birubot
Disallow: /
User-Agent: YottosBot
Disallow: /
User-Agent: gold\ crawler
Disallow: /
User-Agent: Linguee
Disallow: /
User-Agent: Ezooms
Disallow: /
User-Agent: Purebot
Disallow: /
User-Agent: kmSearchBot
Disallow: /
User-Agent: SiteBot
Disallow: /
User-Agent: CamontSpider
Disallow: /
User-Agent: ptd-crawler
Disallow: /
User-Agent: HTTrack
Disallow: /
User-Agent: suggybot
Disallow: /
User-Agent: ttCrawler
Disallow: /
User-Agent: Nutch
Disallow: /
User-Agent: msnbot-media
Disallow: /
User-Agent: Abonti
Disallow: /
User-Agent: aggregator
Disallow: /
User-Agent: BDCbot
Disallow: /
User-Agent: BLEXBot
Disallow: /
User-Agent: Bullseye
Disallow: /
User-Agent: ca\-crawler
Disallow: /
User-Agent: Cegbfeieh
Disallow: /
User-Agent: coccoc
Disallow: /
User-Agent: CyotekWebCopy/1\.7
Disallow: /
User-Agent: CyotekHTTP/2\.0
Disallow: /
User-Agent: discobot
Disallow: /
User-Agent: Download Ninja
Disallow: /
User-Agent: EasouSpider
Disallow: /
User-Agent: FeedBooster
Disallow: /
User-Agent: Genieo
Disallow: /
User-Agent: grub\-client
Disallow: /
User-Agent: Harvest
Disallow: /
User-Agent: ieautodiscovery
Disallow: /
User-Agent: Incutio
Disallow: /
User-Agent: IstellaBot
Disallow: /
User-Agent: JamesBOT
Disallow: /
User-Agent: k2spider
Disallow: /
User-Agent: Keyword Density/0\.9
Disallow: /
User-Agent: libWeb
Disallow: /
User-Agent: linko
Disallow: /
User-Agent: LinkScan/8\.1a Unix
Disallow: /
User-Agent: lmspider
Disallow: /
User-Agent: lwp\-trivial
Disallow: /
User-Agent: magpie
Disallow: /
User-Agent: MaxPointCrawler
Disallow: /
User-Agent: MegaIndex
Disallow: /
User-Agent: memoryBot
Disallow: /
User-Agent: Mippin
Disallow: /
User-Agent: Missigua Locator
Disallow: /
User-Agent: Niki\-Bot
Disallow: /
User-Agent: NPBot
Disallow: /
User-Agent: OLEcrawler
Disallow: /
User-Agent: panscient\.com
Disallow: /
User-Agent: ProPowerBot/2\.14
Disallow: /
User-Agent: Python\-urllib
Disallow: /
User-Agent: Riddler
Disallow: /
User-Agent: serf
Disallow: /
User-Agent: SISTRIX
Disallow: /
User-Agent: sitecheck\.Internetseer\.com
Disallow: /
User-Agent: Serpstat
Disallow: /
User-Agent: SnapPreviewBot
Disallow: /
User-Agent: Sogou
Disallow: /
User-Agent: Spinn3r
Disallow: /
User-Agent: SpyFu
Disallow: /
User-Agent: Szukacz/1\.4
Disallow: /
User-Agent: Titan
Disallow: /
User-Agent: UbiCrawler
Disallow: /
User-Agent: UnisterBot
Disallow: /
User-Agent: Unknown
Disallow: /
User-Agent: uptime files
Disallow: /
User-Agent: User-Agent
Disallow: /
User-Agent: Vedma
Disallow: /
User-Agent: WBSearchBot
Disallow: /
User-Agent: Web Downloader/6\.9
Disallow: /
User-Agent: WebmasterWorldForumBot
Disallow: /
User-Agent: WebReaper
Disallow: /
User-Agent: Wotbox
Disallow: /
User-Agent: wsr\-agent
Disallow: /
User-Agent: WWW\-Collector\-E
Disallow: /
User-Agent: Zao
Disallow: /
User-Agent: ZyBORG
Disallow: /
User-Agent: ahrefs
Disallow: /
User-Agent: qwantify
Disallow: /
User-Agent: qwant
Disallow: /
User-Agent: semrush
Disallow: /
User-Agent: Detectify
Disallow: /
User-Agent: LinkpadBot
Disallow: /
User-Agent: FlipboardProxy
Disallow: /
User-Agent: aiHitBot
Disallow: /
User-Agent: trovitBot
Disallow: /
Sitemap: https://www.salvagedb.com/sitemap.xml
Host: https://www.salvagedb.com

106
templates/search.html Normal file
View File

@ -0,0 +1,106 @@
{% extends "head.html" %}
{% block content %}
<div class="container">
<div class="hero-unit">
<h1>Buying a Used Car? Check it!</h1>
<br>
<p><a href="https://www.salvagedb.com/" title="Salvagedb.com" rel="nofollow">Salvagedb.com</a> provides
information about salvage or junk vehicles; damage from hail, flood or fire; mileage discrepancies or
odometer rollback; and gray market vehicles. We do not claim that the car got in our databank has salvage
title, but the fact that it has been damaged for sure. Our site helps people avoid buying a damaged vehicle
in the past.
</p></div>
<div class="wrapper">
<center>
<br>
<table border="0">
<tr>
<td>
<div class="span4">
</div>
</td>
<td>
<table id="one-column-emphasis" style="font-size: 16px;">
<tbody>
<tr>
<td>Make</td>
<td>{{det[0][1]}}</td>
</tr>
<tr>
<td>Model</td>
<td>{{det[0][2]}}</td>
</tr>
<tr>
<td>Year</td>
<td>{{det[0][3]}}</td>
</tr>
<tr>
<td>Body Style</td>
<td>{{det[0][4]}}</td>
</tr>
<tr>
<td>Engine</td>
<td>{{det[0][5]}}</td>
</tr>
<tr>
<td>Cylinders</td>
<td>{{det[0][6]}}</td>
</tr>
<tr>
<td>Drive</td>
<td>{{det[0][7]}}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
<center>
{% if his %}
<table id="hor-minimalist-a" style="width:900px;font-size: 16px;">
<thead>
<tr>
<th scope="col">VIN</th>
<th scope="col">Title</th>
<th scope="col">Odometer</th>
<th scope="col">Odometer Status</th>
<th scope="col">Primary Damage</th>
<th scope="col">Secondary Damage</th>
</tr>
</thead>
</thead>
<tbody>
{% for it in his%}
<tr>
<td style="color:red">{{it[1]}}</td>
<td style="color:red">{{it[2]}}</td>
<td style="color:red">{{it[3]}}</td>
<td style="color:red">{{it[4]}}</td>
<td style="color:red">{{it[5]}}</td>
<td style="color:red">{{it[6]}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<table border="0">
<tr><td><h1>Salvage history not found.<h1></td></tr>
</table>
{% endif %}
<div style="height: 50px"></div>
</center>
</div>
</div>
<br><br>
<br><br>
{% endblock %}

7
templates/sitemap.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
{% for n in siten %}
<loc>https://{{site}}/sitemaps/{{n[0]}}.xml</loc>
{% endfor %}
</sitemap>
</sitemapindex>

6
templates/sitemaps.xml Normal file
View File

@ -0,0 +1,6 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://{{site}}/</loc></url>
{% for it in sitemap_pages %}
<url><loc>https://{{site}}/database/page{{it[0]}}.html</loc><changefreq>yearly</changefreq><priority>0.9</priority></url>
{% endfor %}
</urlset>

1
tnsnames.ora Normal file
View File

@ -0,0 +1 @@
db1_local=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=89.110.92.87) (PORT=17921))) (CONNECT_DATA=(SERVICE_NAME=db1)))

8
watchdog.sh Normal file
View File

@ -0,0 +1,8 @@
wget -q --spider https://www.salvagedb.com
retVal=$?
if [ $retVal -ne 0 ]; then
ps -ef | grep python | grep app.py | awk '{print $2;system("sudo kill -9 " $2)}'
fi
exit $retVal
#ps -ef | grep python | grep app.py | awk '{print $2;system("sudo kill -9 " $2)}'

5
wsgi.py Normal file
View File

@ -0,0 +1,5 @@
from app import app,start_pool
if __name__ == "__main__":
pool = start_pool()
app.run(port=int(os.environ.get('PORT', '8080')))