rebrending

This commit is contained in:
Vyacheslav Anzhiganov 2016-01-03 06:52:57 +03:00
parent a16c55a609
commit ddde3b08a7
67 changed files with 1144 additions and 1108 deletions

View file

@ -3,6 +3,7 @@
# import ConfigParser
from flask import g
from flask import Flask
from flask import session
from flask import request
from flask import render_template
from flask_babel import Babel
@ -10,6 +11,7 @@ from flaskext.markdown import Markdown
from app.cloud.views import viewHomepage
from app.cloud.views.documents import viewDocuments
from app.cloud.views.settings import viewSettings
from app.cloud.views.kb import viewKB
from app.cloud.views.support import viewSupport
from app.cloud.views.account import viewAccount
@ -47,29 +49,30 @@ app.register_blueprint(viewAccount)
app.register_blueprint(viewPayments)
# /api
app.register_blueprint(viewServerAPI)
app.register_blueprint(viewSettings)
# /administrator
app.register_blueprint(viewAdministrator)
@app.errorhandler(404)
def page_not_found(e):
return render_template('errors/404.html'), 404
return render_template('default/errors/404.html'), 404
@app.errorhandler(403)
def page_not_found(e):
return render_template('errors/403.html'), 403
return render_template('default/errors/403.html'), 403
@app.errorhandler(410)
def page_not_found(e):
return render_template('errors/410.html'), 410
return render_template('default/errors/410.html'), 410
@app.errorhandler(500)
def page_not_found(e):
print e
return render_template('errors/500.html'), 500
return render_template('default/errors/500.en.html'), 500
@app.before_request
@ -85,7 +88,7 @@ def before_request():
print e
print request.path
# g.endpoint = request.endpoint.replace('.', '/')
return render_template('errors/500.html'), 500
return render_template('default/errors/500.en.html'), 500
# извлекаем настройки и определяем их в глобальную переменную
for setting in models.Settings.select(models.Settings.key, models.Settings.val).execute():

1
app/cdn/__init__.py Normal file
View file

@ -0,0 +1 @@
__author__ = 'vanzhiganov'

View file

@ -4,6 +4,7 @@ from sshpubkeys import SSHKey
from flask import render_template, session, redirect, url_for, request
from flask import g
from flask import Blueprint
# from flask.ext.babel import gettext
from app import models
from app.cloud.controllers.common import special_match
from app.cloud.controllers.common import ControllerMessagesEmail
@ -17,116 +18,6 @@ from app.cloud.controllers.billing import ControllerBilling
viewAccount = Blueprint('account', __name__, url_prefix='/account')
@viewAccount.route('/', methods=['GET', 'POST'])
def index():
# check session
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
return redirect(url_for("account.logout"))
cud = ControllerUsersDetails(session['user_id'])
user = cud.details_get()
# проверяем, есть ли запись в таблице usersdetails, чтобы небыло ошибок
if not cud.details_exists():
# если нет, то делаем запись в таблицу, чтобы небыло ошибок
cud.details_create()
# извлекаем из базы детали пользователя
user_details = cud.details_get()
return render_template(
'default/id/index.html',
user=user,
user_details=user_details
)
@viewAccount.route('/edit', methods=['GET', 'POST'])
def edit():
# check session
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
return redirect(url_for("account.logout"))
cud = ControllerUsersDetails(session['user_id'])
user = cud.details_get()
if not cud.details_exists():
cud.details_create()
if request.method == "POST":
if not request.form['zipcode'].isdigit():
g.errors['items'].append(u'Индекс должен содержать только цифры')
g.errors['total'] += 1
if g.errors['total'] == 0:
cud.details_update(
fname=request.form['fname'],
lname=request.form['lname'],
address=request.form['address'],
city=request.form['city'],
country=request.form['country'],
state=request.form['state'],
zipcode=request.form['zipcode']
)
return redirect(url_for('account.edit'))
# get user details
user_details = cud.details_get()
return render_template('default/id/edit.html', user=user, user_details=user_details)
@viewAccount.route('/settings', methods=['GET', 'POST'])
def settings():
# check session
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
return redirect(url_for("account.logout"))
# get user data
user = ControllerUsers(session['user_id']).get()
return render_template('default/id/index.html', user_details=user)
@viewAccount.route('/billing', methods=['GET', 'POST'])
def billing():
# check session
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
return redirect(url_for("account.logout"))
user_id = session['user_id']
if models.UsersBalance.select().where(models.UsersBalance.user == user_id).count() == 0:
models.UsersBalance.create(user=user_id, balance=10)
user_balance = models.UsersBalance.select().where(models.UsersBalance.user == user_id).limit(1)[0].balance
user_details = models.Users.select().where(models.Users.id == session['user_id']).limit(1)[0]
# выгрузка истории платежей
history = dict()
history['total'] = models.UsersBalanceTransactions.select().\
where(models.UsersBalanceTransactions.user == user_id).count()
history['items'] = models.UsersBalanceTransactions.select().\
where(models.UsersBalanceTransactions.user == user_id)
return render_template(
'default/id/balance.html',
user_details=user_details,
user_balance=user_balance,
history=history
)
@viewAccount.route('/registration', methods=['GET', 'POST'])
def registration():
# check session
@ -158,21 +49,15 @@ def registration():
# ControllerU
# send mail message with recovery code
message = u"""
Е-почта: %s
Пароль: %s
Email: %s
Password: %s
""" % (request.form['email'], request.form['password'])
subject = u'GoCloud.ru: Успешная регистрация'
lead = u"""
Поздравляем с успешной зарегистрацией.
"""
callout = u"""
Для входа в личный кабинет воспользуйтесь
<a href="https://gocloud.ru/account/login">страницей авторизации</a>.
"""
subject = u'Puluttar.ru: Successful registration'
lead = u'Congratulations upon successful registration.'
callout = u'Use the <a href="http://puluttar.com/account/login">login page</a> to enter your account.'
email = ControllerMessagesEmail()
email.send(title=subject, to=request.form['email'], lead=lead, message=message, callout=callout)
# redirect to login page
return redirect(url_for('account.login'))
else:
@ -232,13 +117,13 @@ def password_reset():
ControllerUsersRecoveryCodes().create(user_id, recovery_code)
# send mail message with recovery code
subject = u'GoCloud.ru: Код восстановления доступа'
message = u'Код восстановления: %s' % recovery_code
subject = u'Puluttar.com: Access recovery code'
message = u'Recovery code: %s' % recovery_code
lead = u"""
Данный код необходимо ввести на странице подтверждения
<a href="https://gocloud.ru/account/password_reset_step2">сброса пароля</a>.
This verification code is required to confirm the
<a href="http://puluttar.com/account/password_reset_step2">password reset</a>.
"""
callout = u'Если вы не хотите сбрасывать пароль, то просто проигнорируйте (или удалите) данное письмо.'
callout = u'If you do not want to reset your password, just ignore (or remove) the letter.'
# controllers.Mail().send(request.form['email'], subject, message)
email = ControllerMessagesEmail()
@ -247,7 +132,7 @@ def password_reset():
# redirect to step 2
return redirect(url_for('account.password_reset_step2'))
else:
g.errors['items'].append(u'Произошла ошибка. Введите корректный адрес е.почты.')
g.errors['items'].append(u'An error has occurred. Please enter a valid email address.')
g.errors['total'] += 1
return render_template('default/id/password_reset_step1.html')
@ -273,25 +158,25 @@ def password_reset_step2():
ControllerUsers().update(user_id, password=new_password)
# send mail message with new password
message = u"""Новый пароль: %s""" % new_password
subject = u"""GoCloud.ru: Новый пароль"""
message = u"""New password: %s""" % new_password
subject = u"""Puluttar.com: New password"""
lead = u"""
Пароль для доступа в a< href="https://gocloud.ru/account/login">личный кабинет</a> был сброшен.
Old password for your < href="http://puluttar.com/account/login">account</a> was reset.
"""
callout = u"""Запомните новый пароль и удалите данное сообщение."""
callout = u"""Remember the new password and delete this message."""
# controllers.Mail().send(request.form['email'], subject, message)
email = ControllerMessagesEmail()
email.send(title=subject, to=session['email'], lead=lead, message=message, callout=callout)
email.send(title=subject, to=request.form['email'], lead=lead, message=message, callout=callout)
# redirect to login page
return redirect(url_for('account.login'))
# redirect to step 2
g.errors['items'].append(u'Ошибочный код')
g.errors['items'].append(u'Wrong recovery code.')
g.errors['total'] += 1
return redirect(url_for('account.password_reset_step2'))
else:
g.errors['items'].append(u'Произошла ошибка. Введите корректный адрес е.почты.')
g.errors['items'].append(u'An error has occurred. Please enter a valid email address.')
g.errors['total'] += 1
return render_template('default/id/password_reset_step2.html')
@ -319,12 +204,11 @@ def password_update():
# send mail message with recovery code
lead = u"""
Пароль для достуна в личный кабинет был успешно изменён.
Password to access your account has been successfully changed.
"""
message = u"""Пароль: %s""" % request.form['new_password']
callout = u"""
"""
subject = u'GoCloud.ru: Смена пароля'
callout = u''
subject = u'Puluttar.com: Change Password'
email = ControllerMessagesEmail()
email.send(
@ -354,7 +238,7 @@ def sshkey():
try:
ssh = SSHKey(request.form['sshkey'])
except Exception as e:
g.errors['items'].append(u"Не корректный ssh-ключ.")
g.errors['items'].append(u"Incorrect ssh-key.")
g.errors['total'] += 1
else:
print(ssh.bits)

View file

@ -15,10 +15,11 @@ from flask import Blueprint
from app import models
from app.settings import settings
from app.cloud.controllers.users import ControllerUsers
from app.cloud.controllers.users import ControllerSSHKey
from app.cloud.controllers.billing import ControllerBilling
from app.cloud.controllers.users import ControllerAPI
from app.cloud.controllers.datacenters import ControllerDataCenters
from app.cloud.controllers.containers import ControllerContainers
from cloudnsru import CloudnsClient
viewAPI = Blueprint('api', __name__, url_prefix='/api')

View file

@ -61,14 +61,11 @@ def create():
if g.errors['total'] == 0:
# select server from selected region with available ip-addresses
# TODO: make function... this part use in API method
# select IP
select_ip = models.Ips.select().where(
models.Ips.datacenter == request.form['datacenter'] and models.Ips.status == 0
)[0]
print 'select ip: %s' % select_ip.id
# mark ip as busy (taken)
up = models.Ips.update(status=1).where(models.Ips.id == select_ip.id)
up.execute()
@ -139,12 +136,9 @@ def create():
message_parts.append(u"SSH ключ: добавлен")
message = '<br/>\n'.join(message_parts)
subject = u'GoCloud.ru: Новый контейнер'
lead = u"""Поздравляем с новым контейнером."""
callout = u"""
Для входа в личный кабинет воспользуйтесь
<a href="https://gocloud.ru/account/login">страницей авторизации</a>.
"""
subject = u'Puluttar.com: New continer'
lead = u"""Congratulations on the new container."""
callout = u"""<a href="http://puluttar.com/account/login">Account</a>."""
user_data = ControllerUsers(session['user_id']).get()

View file

@ -11,6 +11,7 @@ from flask import Blueprint
from app import models
from app.cloud.controllers.users import ControllerUsers
from app.cloud.controllers.payments import ControllerPaymentsRobokassa
from app.cloud.controllers.payments import twocheckout
viewPayments = Blueprint('payments', __name__, url_prefix='/payments')
@ -113,3 +114,38 @@ def robokassa(action):
return redirect(url_for('payments.robokassa', action='fail'))
return render_template('default/payment/robokassa/fail.html')
@viewPayments.route('/twocheckout/order', methods=['POST'])
def twocheckout_order():
# Setup credentials and environment
twocheckout.Api.auth_credentials({
'private_key': 'sandbox-private-key',
'seller_id': 'sandbox-seller_id',
'mode': 'sandbox'
})
# Setup arguments for authorization request
args = {
'merchantOrderId': '123',
'token': request.form["token"],
'currency': 'USD',
'total': '1.00',
'billingAddr': {
'name': 'Testing Tester',
'addrLine1': '123 Test St',
'city': 'Columbus',
'state': 'OH',
'zipCode': '43123',
'country': 'USA',
'email': 'example@2co.com',
'phoneNumber': '555-555-5555'
}
}
# Make authorization request
try:
result = twocheckout.Charge.authorize(args)
return result.responseMsg
except twocheckout.TwocheckoutError as error:
return error.msg

View file

@ -0,0 +1,136 @@
# coding: utf-8
from sshpubkeys import SSHKey
from flask import render_template, session, redirect, url_for, request
from flask import g
from flask import Blueprint
from app import models
from app.cloud.controllers.common import special_match
from app.cloud.controllers.common import ControllerMessagesEmail
from app.cloud.controllers.users import ControllerUsers
from app.cloud.controllers.users import ControllerAPI
from app.cloud.controllers.users import ControllerSSHKey
from app.cloud.controllers.users import ControllerUsersDetails
from app.cloud.controllers.users import ControllerUsersRecoveryCodes
from app.cloud.controllers.billing import ControllerBilling
viewSettings = Blueprint('settings', __name__, url_prefix='/settings')
@viewSettings.route('/', methods=['GET', 'POST'])
def index():
return redirect(url_for('settings.billing'))
@viewSettings.route('/billing')
def billing():
# check session
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
return redirect(url_for("account.logout"))
user_id = session['user_id']
if models.UsersBalance.select().where(models.UsersBalance.user == user_id).count() == 0:
models.UsersBalance.create(user=user_id, balance=10)
user_balance = models.UsersBalance.select().where(models.UsersBalance.user == user_id).limit(1)[0].balance
user_details = models.Users.select().where(models.Users.id == session['user_id']).limit(1)[0]
# выгрузка истории платежей
history = dict()
history['total'] = models.UsersBalanceTransactions.select().\
where(models.UsersBalanceTransactions.user == user_id).count()
history['items'] = models.UsersBalanceTransactions.select().\
where(models.UsersBalanceTransactions.user == user_id).order_by(models.UsersBalanceTransactions.id.desc())
return render_template(
'default/settings/billing/index.html',
user_details=user_details,
user_balance=user_balance,
history=history
)
@viewSettings.route('/profile')
def profile():
# check session
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
return redirect(url_for("account.logout"))
cud = ControllerUsersDetails(session['user_id'])
user = cud.details_get()
# проверяем, есть ли запись в таблице usersdetails, чтобы небыло ошибок
if not cud.details_exists():
# если нет, то делаем запись в таблицу, чтобы небыло ошибок
cud.details_create()
# извлекаем из базы детали пользователя
user_details = cud.details_get()
return render_template(
'default/settings/profile/index.html',
user=user,
user_details=user_details
)
@viewSettings.route('/profile_edit')
def profile_edit():
# check session
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
return redirect(url_for("account.logout"))
cud = ControllerUsersDetails(session['user_id'])
user = cud.details_get()
if not cud.details_exists():
cud.details_create()
if request.method == "POST":
if not request.form['zipcode'].isdigit():
g.errors['items'].append(u'ZIP code must contain only digits.')
g.errors['total'] += 1
if g.errors['total'] == 0:
cud.details_update(
fname=request.form['fname'],
lname=request.form['lname'],
address=request.form['address'],
city=request.form['city'],
country=request.form['country'],
state=request.form['state'],
zipcode=request.form['zipcode']
)
return redirect(url_for('account.edit'))
# get user details
user_details = cud.details_get()
return render_template(
'default/settings/profile/edit.html',
user=user,
user_details=user_details
)
@viewSettings.route('/security')
def security():
return render_template('default/settings/security/index.html')
@viewSettings.route('/notifications')
def notifications():
return render_template('default/settings/security/index.html')
@viewSettings.route('/team')
def team():
return render_template('default/settings/team/index.html')

View file

@ -40,7 +40,7 @@ def index():
# send mail message with recovery code
subject = ticket_title
message = ticket_message
lead = u'Отправитель: %s' % ticket_email
lead = u'Sender: %s' % ticket_email
callout = u''
email = ControllerMessagesEmail()

1
app/dns/__init__.py Normal file
View file

@ -0,0 +1 @@
__author__ = 'vanzhiganov'

View file

@ -12,7 +12,8 @@ header {
padding: 4em 0em 5em;
background: #202020 none repeat scroll 0% 0% / cover;
background-position:
color: rgba(255, 255, 255, 0.8)
color: rgba(255, 255, 255, 0.8);
background: transparent url(/static/images/promo/bg2.png) repeat-x scroll 0% 0%;
}
#banner p {
@ -68,3 +69,12 @@ ul#paymentlist li img {
margin-top: 15px;
margin-bottom: 15px;
}
ul#features-list {
/* list-style: none; */
font-size: 1.5em;
}
ul#features-list li {
font-family: 'Clear sans';
margin-left: 15px;
}

View file

@ -1,29 +0,0 @@
#logo {
margin-top: 15px;
margin-bottom: 15px;
}
footer {
margin-top: 30px;
}
.top-bar {
background: none repeat scroll 0% 0% #371A5B;
}
.top-bar-section ul li {
/*background: none repeat scroll 0% 0% #371A5B;*/
}
.top-bar-section li:not(.has-form) a:not(.button) {
background: none repeat scroll 0% 0% #371A5B;
}
.top-bar-section li:hover(.has-form) a:hover(.button) {
/*background: none repeat scroll 0% 0% #371A5B;*/
}
.top-bar-section ul li {
background: none repeat scroll 0% 0% #371A5B;
}

View file

@ -1,427 +0,0 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}

View file

@ -1,29 +0,0 @@
#logo {
margin-top: 15px;
margin-bottom: 15px;
}
footer {
margin-top: 30px;
}
.top-bar {
background: none repeat scroll 0% 0% #371A5B;
}
.top-bar-section ul li {
/*background: none repeat scroll 0% 0% #371A5B;*/
}
.top-bar-section li:not(.has-form) a:not(.button) {
background: none repeat scroll 0% 0% #371A5B;
}
.top-bar-section li:hover(.has-form) a:hover(.button) {
/*background: none repeat scroll 0% 0% #371A5B;*/
}
.top-bar-section ul li {
background: none repeat scroll 0% 0% #371A5B;
}

View file

@ -2,21 +2,15 @@
<div class="row">
<div class="large-4 columns">
<p>
GoCloud &copy; Все права защищены.
{{ _("Puluttar &copy; All rights reserved.") }}
</p>
</div>
<div class="large-4 columns">
<p><b>Документы</b></p>
<ul>
<li><a href="{{ url_for('documents.view', document_name='politica_konfidencialnosti') }}">Политика конфиденциальности</a></li>
<li><a href="{{ url_for('documents.view', document_name='pravila_ispolzovaniya') }}">Условия использования</a></li>
</ul>
</div>
<div class="large-4 columns">
<p><b>Поддержка</b></p>
<ul>
<li><a href="{{ url_for('support.index') }}">Поддержка</a></li>
<li><a href="{{ url_for('kb.index') }}">База знаний</a></li>
<div class="large-8 columns">
<ul class="inline-list">
<li><a href="{{ url_for('documents.view', document_name='politica_konfidencialnosti') }}">{{ _("Privacy policy") }}</a></li>
<li><a href="{{ url_for('documents.view', document_name='pravila_ispolzovaniya') }}">{{ _("Terms of Use") }}</a></li>
<li><a href="{{ url_for('support.index') }}">{{ _("Support") }}</a></li>
<li><a href="{{ url_for('kb.index') }}">{{ _("Knowledge base") }}</a></li>
</ul>
</div>
</div>

View file

@ -5,28 +5,26 @@
<nav class="top-bar" data-topbar role="navigation" data-options="sticky_on: large">
<ul class="title-area">
<li class="name">
<!--<h1><a href="{{ url_for('homepage.index') }}"><img src="{{ url_for('static', filename='images/logo/procdn-logo-24.png') }}" border="0" /></a></h1>-->
<h1><a href="{{ url_for('homepage.index') }}">GoCloud</a></h1>
<h1><a href="{{ url_for('homepage.index') }}">Puluttar</a></h1>
</li>
</ul>
<section class="top-bar-section">
{% if session['user_id'] %}
<ul class="right">
<li><a href="{{ url_for('account.index') }}">Учётная запись</a></li>
<li><a href="{{ url_for('account.billing') }}">Биллинг</a></li>
<li><a href="{{ url_for('account.logout') }}">Выход</a></li>
<li><a href="{{ url_for('settings.index') }}">{{ _("Settings") }}</a></li>
<li><a href="{{ url_for('account.logout') }}">{{ _("Logout") }}</a></li>
</ul>
<ul class="left">
<li><a href="{{ url_for('containers.index') }}">Контейнеры</a></li>
<li><a href="{{ url_for('containers.create') }}">Добавить</a></li>
<li><a href="{{ url_for('containers.index') }}">{{ _("Containers") }}</a></li>
<li><a href="{{ url_for('containers.create') }}">{{ _("Create new") }}</a></li>
</ul>
{% else %}
<ul class="right">
<li class="active"><a href="{{ url_for('account.login') }}">Вход</a></li>
<li><a href="{{ url_for('account.registration') }}">Регистрация</a></li>
<li class="active"><a href="{{ url_for('account.login') }}">{{ _("Login") }}</a></li>
<li><a href="{{ url_for('account.registration') }}">{{ _("Registration") }}</a></li>
</ul>
<ul class="left">
<li><a href="{{ url_for('homepage.index') }}">Главная</a></li>
<li><a href="{{ url_for('homepage.index') }}">{{ _("Home") }}</a></li>
</ul>
{% endif %}
</section>

View file

@ -8,7 +8,7 @@
<script src="{{ url_for('static', filename='js/vendor/modernizr.js') }}"></script>
<script src="{{ url_for('static', filename='js/foundation/foundation.min.js') }}"></script>
<link rel="stylesheet" href="{{ url_for('static', filename='css/foundation.min.css') }}" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/gocloud.css') }}" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/app.css') }}" />
<meta name='shareinstock' content='' />
{% block head %}{% endblock %}
</head>

View file

@ -0,0 +1,49 @@
{% extends "default/_layout.html" %}
{% block title %}New container{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>New container</h3>
</div>
</div>
<div class="row">
<div class="large-12 columns">
{% if g.errors['total'] > 0 %}
<div class="alert-box alert">
<ul>
{% for error in g.errors['items'] %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if datacenters['total'] == 0 %}
<div class="row">
<div class="small-12 columns">
Нет возможности создать контейнер. Обратитесь в <a href="mailto:support@gocloud.ru">поддержку</a>.
</div>
</div>
{% else %}
<div class="row">
<form action="{{ url_for('containers.create') }}" method="post" id="containercreateform">
<div class="small-12 columns">
<label for="backend">
Datacenter
<select name="datacenter" class="form">
{% for datacenter in datacenters['items'] %}
<option value="{{ datacenter.id }}">{{ datacenter.name }}: {{ datacenter.country }}, {{ datacenter.city }}</option>
{% endfor %}
</select>
</label>
</div>
<div class="small-12 columns">
<input type="submit" value="Create" class="button success" id="submitform" />
</div>
</form>
</div>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Новый{% endblock %}
{% block title %}{{ _('New container') }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Новый контейнер</h3>
<h3>{{ _('New container') }}</h3>
</div>
</div>
<div class="row">
@ -29,9 +29,9 @@
<div class="row">
<form action="{{ url_for('containers.create') }}" method="post" id="containercreateform">
<div class="small-12 columns">
<label for="backend">
Датацентр
<select name="datacenter" class="form">
<label for="datacenter">
{{ _('Data center') }}
<select name="datacenter" class="form" id="datacenter">
{% for datacenter in datacenters['items'] %}
<option value="{{ datacenter.id }}">{{ datacenter.name }}: {{ datacenter.country }}, {{ datacenter.city }}</option>
{% endfor %}
@ -39,7 +39,7 @@
</label>
</div>
<div class="small-12 columns">
<input type="submit" value="Создать контейнер" class="button success" id="submitform" />
<input type="submit" value="{{ _('Create container') }}" class="button success" id="submitform" />
</div>
</form>
</div>

View file

@ -0,0 +1,31 @@
{% extends "default/_layout.html" %}
{% block title %}Removing container{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Removing container</h3>
</div>
</div>
<div class="row">
<div class="large-12 columns">
{% if g.errors['total'] > 0 %}
<div class="alert-box alert">
<ul>
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
</ul>
</div>
{% else %}
<form action="{{ url_for('containers.delete', container_id=container.id) }}" method="post">
<input type="hidden" name="id" value="{{ container.id }}" />
<p>
Do you really want to remove container?<br/>
</p>
<input type="submit" value="Yes, I want!" class="button alert" />
<a href="{{ url_for('containers.index') }}" class="">Cancel</a>
</form>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Удаление контейнера{% endblock %}
{% block title %}{{ _('Delete container') }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Удаление контейнера</h3>
<h3>{{ _('Delete container') }}</h3>
</div>
</div>
<div class="row">
@ -20,10 +20,10 @@
<form action="{{ url_for('containers.delete', container_id=container.id) }}" method="post">
<input type="hidden" name="id" value="{{ container.id }}" />
<p>
Вы действительно хотите удалить контейнер?<br/>
{{ _('Do you really want to delete container?') }}<br/>
</p>
<input type="submit" value="Удалить" class="button alert" />
<a href="{{ url_for('containers.index') }}" class="">Отмена</a>
<input type="submit" value="{{ _('Yes, I want!') }}" class="button alert" />
<a href="{{ url_for('containers.index') }}" class="">{{ _('Cancel') }}</a>
</form>
{% endif %}
</div>

View file

@ -0,0 +1,71 @@
{% extends "default/_layout.html" %}
{% block title %}Containers{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Containers <a href="{{ url_for('containers.create') }}">+</a></h3>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<table id="zones" width="100%">
<thead>
<tr>
<th width="45%">ID</th>
<th>IP</th>
<th>Storage</th>
<th>Status</th>
<th width="10%">&nbsp;</th>
</tr>
</thead>
<tbody>
{% if containers.total == 0 %}
<tr>
<td>No containers. <a href="{{ url_for('containers.create') }}">Create one</a>.</td>
</tr>
{% else %}
{% for container in containers['items'] %}
<tr>
<td>
{{ container['id'] }}
</td>
<td>
{% if container['ipv4'] %}
IPv4: {{ container['ipv4'] }}
{% endif %}
{% if container['ipv6'] %}
IPv6: {{ container['ipv6'] }}
{% endif %}
</td>
<td>
{% set size_gb = (container.size / 1024 / 1024) %}
{{ '%0.2f' | format(size_gb|float) }}GB
</td>
<td>
{% if container['status'] == 0 %}
Inactive
{% elif container['status'] == 1 %}
Active
{% elif container['status'] == 2 %}
Activating
{% elif container['status'] == 3 %}
Deactivating
{% elif container['status'] == 4 %}
Creating...
{% elif container['status'] == 5 %}
Removing...
{% endif %}
</td>
<td>
<a href="{{ url_for('containers.settings', container_id=container.id) }}">Settings</a>
</td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View file

@ -1,29 +1,31 @@
{% extends "default/_layout.html" %}
{% block title %}Правила{% endblock %}
{% block title %}{{ _('Containers') }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Список <a href="{{ url_for('containers.create') }}">+</a></h3>
<h3>{{ _('List') }} <a href="{{ url_for('containers.create') }}">+</a></h3>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<table id="zones" width="100%">
<table id="containers" width="100%">
<thead>
<tr>
<th width="45%">ID</th>
<th>IP</th>
<th>Диск</th>
<th>Статус</th>
<th width="45%">{{ _('ID') }}</th>
<th>{{ _('IP address') }}</th>
<th>{{ _('Storage') }}</th>
<th>{{ _('Status') }}</th>
<th width="10%">&nbsp;</th>
</tr>
</thead>
<tbody>
{% if containers.total == 0 %}
<tr>
<td>Нет ни одного контейнера. <a href="{{ url_for('containers.create') }}">Добавить</a>.</td>
<td>
{{ _('No one container created yet. <a href="%s">Create one</a>.' % url_for('containers.create')) }}
</td>
</tr>
{% else %}
{% for container in containers['items'] %}
@ -45,21 +47,21 @@
</td>
<td>
{% if container['status'] == 0 %}
Неактивно
{{ _('Inactive') }}
{% elif container['status'] == 1 %}
Активно
{{ _('Active') }}
{% elif container['status'] == 2 %}
Процесс активации
{{ _('Activation') }}
{% elif container['status'] == 3 %}
Процесс деактивации
{{ _('Deactivation') }}
{% elif container['status'] == 4 %}
Создание...
{{ _('Creation...') }}
{% elif container['status'] == 5 %}
Удаление...
{{ _('Deletion...') }}
{% endif %}
</td>
<td>
<a href="{{ url_for('containers.settings', container_id=container.id) }}">Настройки</a>
<a href="{{ url_for('containers.settings', container_id=container.id) }}">{{ _('Settings') }}</a>
</td>
</tr>
{% endfor %}

View file

@ -0,0 +1,45 @@
{% extends "default/_layout.html" %}
{% block title %}Settings{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Settings</h3>
</div>
</div>
<div class="row">
{% if g.errors['total'] > 0 %}
<div class="large-12 columns">
{% for error in g.errors['items'] %}
<div class="alert-box alert">
{{ error }}
</div>
{% endfor %}
</div>
{% else %}
<div class="large-12 columns">
<h4>Status</h4>
{% if container.status == 0 %}
<p style="color: red">Inactive</p>
{% else %}
<p style="color: green">Active</p>
{% endif %}
<form action="{{ url_for('containers.settings', container_id=container.id) }}" method="post">
<input type="hidden" name="action" value="set_status">
<div class="input-group">
<select name="status">
<option value="active">Active</option>
<option value="inactive">Inactive</option>
</select>
</div>
<input type="submit" value="Change status" class="button success small">
</form>
<h4>Remove</h4>
<a href="{{ url_for('containers.delete', container_id=container.id) }}">
<button class="button alert">Remove</button>
</a>
</div>
{% endif %}
</div>
{% endblock %}

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Статистика{% endblock %}
{% block title %}{{ _('Settings') }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Настройки</h3>
<h3>{{ _('Settings') }}</h3>
</div>
</div>
<div class="row">
@ -19,25 +19,25 @@
</div>
{% else %}
<div class="large-12 columns">
<h4>Статус</h4>
<h4>{{ _('Status') }}</h4>
{% if container.status == 0 %}
<p style="color: red">Неактивен</p>
<p style="color: red">{{ _('Inactive') }}</p>
{% else %}
<p style="color: green">Активен</p>
<p style="color: green">{{ _('Active') }}</p>
{% endif %}
<form action="{{ url_for('containers.settings', container_id=container.id) }}" method="post">
<input type="hidden" name="action" value="set_status">
<div class="input-group">
<select name="status">
<option value="active">Активировать</option>
<option value="inactive">Деактивировать</option>
<option value="active">{{ _('Activate') }}</option>
<option value="inactive">{{ _('Deactivate') }}</option>
</select>
</div>
<input type="submit" value="Изменить статус" class="button success small">
<input type="submit" value="{{ _('Change status') }}" class="button success small">
</form>
<h4>Удалить</h4>
<h4>{{ _('Delete container') }}</h4>
<a href="{{ url_for('containers.delete', container_id=container.id) }}">
<button class="button alert">Удалить</button>
<button class="button alert">{{ _('Delete') }}</button>
</a>
</div>
{% endif %}

View file

@ -0,0 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Documents{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
{% filter markdown %}{{ doc_markdown }}{% endfilter %}
</div>
</div>
{% endblock %}

View file

@ -1,6 +1,6 @@
{% extends "default/_layout.html" %}
{% block title %}Документы{% endblock %}
{% block title %}{{ _('Documents') }}{% endblock %}
{% block content %}
<div class="row">

View file

@ -0,0 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Access denied{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h1>Access denied</h1>
<p>View page is forbidden.</p>
<p><a href="{{ url_for('homepage.index') }}">Go to Home page</a>.</p>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}{{ _('Forbidden') }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h1>{{ _('Forbidden') }}</h1>
<p>Указанная страница закрыта для общего доступа.</p>
<p><a href="{{ url_for('homepage.index') }}">Перейти на главную</a>.</p>
</div>
</div>
{% endblock %}

View file

@ -1,46 +0,0 @@
{% extends "default/_layout.html" %}
{% block title %}GoCloud{% endblock %}
{% block content %}
<div id="banner">
<div class="row">
<div class="large-12 columns">
<p id="slogan">Cloud hosting for developers</p>
<p id="sub">Linux containers from $1 per month</p>
<p>
<a href="{{ url_for('account.registration') }}" class="button alert">Create container</a>
</p>
</div>
</div>
</div>
<div class="row">
<div class="large-4 columns">
<h2>Features</h2>
<ul>
<li>Containers with Ubuntu Linux</li>
<li>Pay only for the resources used</li>
<li>Автоматическое доабвление SSH-ключа при создании контейнера</li>
<li>Public IP address</li>
<li>Unlimited network traffic</li>
<li>Firewall</li>
</ul>
</div>
<div class="large-4 columns">
<h2>Тарификация</h2>
<ul>
<li>Включено 2 Гб дискового пространства</li>
<li>Дисковое пространство - 100 рублей в месяц за каждые 10Гб</li>
</ul>
</div>
<div class="large-4 columns">
<h2>Способы оплаты</h2>
<ul>
<li>Visa и MasterCard</li>
<li>WebMoney</li>
<li>Яндекс.Деньги</li>
<li>Robokassa</li>
</ul>
</div>
</div>
{% endblock %}

View file

@ -1,48 +1,67 @@
{% extends "default/_layout.html" %}
{% block title %}GoCloud{% endblock %}
{% block title %}Puluttar{% endblock %}
{% block content %}
<div id="banner">
<div class="row">
<div class="large-12 columns">
<p id="slogan">Облачный хостинг для разработчиков</p>
<p id="sub">Linux контейнер от 100 рублей в месяц</p>
<div>
<p id="slogan">{{ _("Cloud hosting for developers") }}</p>
<p id="sub">{{ _("Linux containers from $3.50 per month") }}</p>
<p>
<a href="{{ url_for('account.registration') }}" class="button alert">Создать контейнер</a>
<a href="{{ url_for('account.registration') }}" class="button alert">{{ _("Create container") }}</a>
</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="large-4 columns">
<h2>Особенности</h2>
<ul>
<li>Контейнеры с операционной системой Ubuntu</li>
<li>Оплата только за использованные ресурсы</li>
<li>Автоматическое добавление SSH-ключа при создании контейнера</li>
<li>Реальный IP</li>
<li>Неограниченный трафик</li>
<li>Защита Firewall</li>
<div class="large-8 columns">
<div class="row">
<div class="large-12 columns">
<h2>Features</h2>
</div>
<div class="large-12 columns">
<ul id="features-list">
<li>Auto scaling LXC containers with Ubuntu Linux</li>
<li>Pay only for the resources used</li>
<li>Ready to deploy with one minute</li>
<li>Public IP address</li>
<li>Unlimited network traffic with firewall</li>
<li>Several data centers around the world</li>
</ul>
</div>
<div class="large-4 columns">
<h2>Тарификация </h2>
<ul>
<li>Включено 2 Гб дискового пространства</li>
<li>Дисковое пространство - 100 рублей в месяц за каждые 10Гб</li>
</ul>
<h2>Способы оплаты</h2>
<ul>
<li>Visa и MasterCard</li>
<li>WebMoney</li>
<li>Яндекс.Деньги</li>
<li>Robokassa</li>
</ul>
</div>
</div>
<div class="large-4 columns">
<ul class="pricing-table">
<li class="title">Standard</li>
<li class="price">from $3.50/mo</li>
<li class="description">Auto scaling LXC container</li>
<li class="bullet-item">5GB Storage</li>
<li class="bullet-item">512MB Memory</li>
<li class="bullet-item">Unlimited bandwidth</li>
<li class="cta-button"><a class="button" href="#">Get started</a></li>
</ul>
</div>
<!-- div class="large-4 columns">
<a class="twitter-timeline" href="https://twitter.com/gocloud_ru" data-widget-id="678726736645922816">Tweets by @gocloud_ru</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div- -->
</div>
<!-- div class="row" data-equalizer>
<div class="large-3 columns panel" data-equalizer-watch style="background-color: #cc0000; color: #ffffff">
Advertious.com
</div>
<div class="large-3 columns panel" data-equalizer-watch style="background-color: #563D7D; color: #ffffff">
NotePlex.net
</div>
<div class="large-3 columns panel" data-equalizer-watch>
wefewf
</div>
<div class="large-3 columns panel" data-equalizer-watch>
gergr
</div>
</div -->
{% endblock %}

View file

@ -1,123 +0,0 @@
<form action="{{ url_for('account.edit') }}" method="post">
<input type="hidden" name="update_information" value="1">
<!-- BILLING BLOCK -->
<label for="fname">Имя</label>
<input name="fname" id="fname" type="text" class="long-field" value="{{ user_details['fname'] }}" />
<label for="lname">Фамилия</label>
<input name="lname" id="lname" type="text" class="long-field" value="{{ user_details['lname'] }}" />
<label for="address">Адрес</label>
<input name="address" id="address" type="text" class="long-field" value="{{ user_details['address'] }}" />
<label for="city">Город</label>
<input name="city" id="city" type="text" class="long-field" value="{{ user_details['city'] }}" />
<label for="country">Страна</label>
<input name="country" id="country" type="text" class="long-field" value="{{ user_details['country'] }}" />
{# <select name="country" id="country" class="long-field">#}
{# <option value="">Выберите страну</option>#}
{# {% for country in countries_list %}#}
{# {% if country['iso'] == user_details['country'] %}#}
{# <option value="{{ country['iso'] }}" selected>{{ country['name'] }}</option>#}
{# {% else %}#}
{# <option value="{{ country['iso'] }}">{{ country['name'] }}</option>#}
{# {% endif %}#}
{# {% endfor %}#}
{# </select>#}
<label for="state">Регион</label>
<input name="state" id="state" type="text" class="long-field" value="{{ user_details['state'] }}" />
{# <select name="state" id="state" class="long-field">#}
{# <option value="">{{ text['please_select'] }}</option>#}
{# <optgroup label="Australian Provinces">#}
{# <option value="-AU-NSW" {% if user_details['state'] == "-AU-NSW" %}selected{% endif %}>New South Wales</option>#}
{# <option value="-AU-QLD" {% if user_details['state'] == "-AU-QLD" %}selected{% endif %}>Queensland</option>#}
{# <option value="-AU-SA" {% if user_details['state'] == "-AU-SA" %}selected{% endif %}>South Australia</option>#}
{# <option value="-AU-TAS" {% if user_details['state'] == "-AU-TAS" %}selected{% endif %}>Tasmania</option>#}
{# <option value="-AU-VIC" {% if user_details['state'] == "-AU-VIC" %}selected{% endif %}>Victoria</option>#}
{# <option value="-AU-WA" {% if user_details['state'] == "-AU-WA" %}selected{% endif %}>Western Australia</option>#}
{# <option value="-AU-ACT" {% if user_details['state'] == "-AU-ACT" %}selected{% endif %}>Australian Capital Territory</option>#}
{# <option value="-AU-NT" {% if user_details['state'] == "-AU-NT" %}selected{% endif %}>Northern Territory</option>#}
{# </optgroup>#}
{# <optgroup label="Canadian Provinces">#}
{# <option value="AB" {% if user_details['state'] == "AB" %}selected{% endif %}>Alberta</option>#}
{# <option value="BC" {% if user_details['state'] == "BC" %}selected{% endif %}>British Columbia</option>#}
{# <option value="MB" {% if user_details['state'] == "MB" %}selected{% endif %}>Manitoba</option>#}
{# <option value="NB" {% if user_details['state'] == "NB" %}selected{% endif %}>New Brunswick</option>#}
{# <option value="NF" {% if user_details['state'] == "NF" %}selected{% endif %}>Newfoundland</option>#}
{# <option value="NT" {% if user_details['state'] == "NT" %}selected{% endif %}>Northwest Territories</option>#}
{# <option value="NS" {% if user_details['state'] == "NS" %}selected{% endif %}>Nova Scotia</option>#}
{# <option value="NVT" {% if user_details['state'] == "NVT" %}selected{% endif %}>Nunavut</option>#}
{# <option value="ON" {% if user_details['state'] == "ON" %}selected{% endif %}>Ontario</option>#}
{# <option value="PE" {% if user_details['state'] == "PE" %}selected{% endif %}>Prince Edward Island</option>#}
{# <option value="QC" {% if user_details['state'] == "QC" %}selected{% endif %}>Quebec</option>#}
{# <option value="SK" {% if user_details['state'] == "SK" %}selected{% endif %}>Saskatchewan</option>#}
{# <option value="YK" {% if user_details['state'] == "YK" %}selected{% endif %}>Yukon</option>#}
{# </optgroup>#}
{# <optgroup label="US States">#}
{# <option value="AL" {% if user_details['state'] == "AL" %}selected{% endif %}>Alabama</option>#}
{# <option value="AK" {% if user_details['state'] == "AK" %}selected{% endif %}>Alaska</option>#}
{# <option value="AZ" {% if user_details['state'] == "AZ" %}selected{% endif %}>Arizona</option>#}
{# <option value="AR" {% if user_details['state'] == "AR" %}selected{% endif %}>Arkansas</option>#}
{# <option value="BVI" {% if user_details['state'] == "BVI" %}selected{% endif %}>British Virgin Islands</option>#}
{# <option value="CA" {% if user_details['state'] == "CA" %}selected{% endif %}>California</option>#}
{# <option value="CO" {% if user_details['state'] == "CO" %}selected{% endif %}>Colorado</option>#}
{# <option value="CT" {% if user_details['state'] == "CT" %}selected{% endif %}>Connecticut</option>#}
{# <option value="DE" {% if user_details['state'] == "DE" %}selected{% endif %}>Delaware</option>#}
{# <option value="FL" {% if user_details['state'] == "FL" %}selected{% endif %}>Florida</option>#}
{# <option value="GA" {% if user_details['state'] == "GA" %}selected{% endif %}>Georgia</option>#}
{# <option value="GU" {% if user_details['state'] == "GU" %}selected{% endif %}>Guam</option>#}
{# <option value="HI" {% if user_details['state'] == "HI" %}selected{% endif %}>Hawaii</option>#}
{# <option value="ID" {% if user_details['state'] == "ID" %}selected{% endif %}>Idaho</option>#}
{# <option value="IL" {% if user_details['state'] == "IL" %}selected{% endif %}>Illinois</option>#}
{# <option value="IN" {% if user_details['state'] == "IN" %}selected{% endif %}>Indiana</option>#}
{# <option value="IA" {% if user_details['state'] == "IA" %}selected{% endif %}>Iowa</option>#}
{# <option value="KS" {% if user_details['state'] == "KS" %}selected{% endif %}>Kansas</option>#}
{# <option value="KY" {% if user_details['state'] == "KY" %}selected{% endif %}>Kentucky</option>#}
{# <option value="LA" {% if user_details['state'] == "LA" %}selected{% endif %}>Louisiana</option>#}
{# <option value="ME" {% if user_details['state'] == "ME" %}selected{% endif %}>Maine</option>#}
{# <option value="MP" {% if user_details['state'] == "MP" %}selected{% endif %}>Mariana Islands</option>#}
{# <option value="MPI" {% if user_details['state'] == "MPI" %}selected{% endif %}>Mariana Islands (Pacific)</option>#}
{# <option value="MD" {% if user_details['state'] == "MD" %}selected{% endif %}>Maryland</option>#}
{# <option value="MA" {% if user_details['state'] == "MA" %}selected{% endif %}>Massachusetts</option>#}
{# <option value="MI" {% if user_details['state'] == "MI" %}selected{% endif %}>Michigan</option>#}
{# <option value="MN" {% if user_details['state'] == "MN" %}selected{% endif %}>Minnesota</option>#}
{# <option value="MS" {% if user_details['state'] == "MS" %}selected{% endif %}>Mississippi</option>#}
{# <option value="MO" {% if user_details['state'] == "MO" %}selected{% endif %}>Missouri</option>#}
{# <option value="MT" {% if user_details['state'] == "MT" %}selected{% endif %}>Montana</option>#}
{# <option value="NE" {% if user_details['state'] == "NE" %}selected{% endif %}>Nebraska</option>#}
{# <option value="NV" {% if user_details['state'] == "NV" %}selected{% endif %}>Nevada</option>#}
{# <option value="NH" {% if user_details['state'] == "NH" %}selected{% endif %}>New Hampshire</option>#}
{# <option value="NJ" {% if user_details['state'] == "NJ" %}selected{% endif %}>New Jersey</option>#}
{# <option value="NM" {% if user_details['state'] == "NM" %}selected{% endif %}>New Mexico</option>#}
{# <option value="NY" {% if user_details['state'] == "NY" %}selected{% endif %}>New York</option>#}
{# <option value="NC" {% if user_details['state'] == "NC" %}selected{% endif %}>North Carolina</option>#}
{# <option value="ND" {% if user_details['state'] == "ND" %}selected{% endif %}>North Dakota</option>#}
{# <option value="OH" {% if user_details['state'] == "OH" %}selected{% endif %}>Ohio</option>#}
{# <option value="OK" {% if user_details['state'] == "OK" %}selected{% endif %}>Oklahoma</option>#}
{# <option value="OR" {% if user_details['state'] == "OR" %}selected{% endif %}>Oregon</option>#}
{# <option value="PA" {% if user_details['state'] == "PA" %}selected{% endif %}>Pennsylvania</option>#}
{# <option value="PR" {% if user_details['state'] == "PR" %}selected{% endif %}>Puerto Rico</option>#}
{# <option value="RI" {% if user_details['state'] == "RI" %}selected{% endif %}>Rhode Island</option>#}
{# <option value="SC" {% if user_details['state'] == "SC" %}selected{% endif %}>South Carolina</option>#}
{# <option value="SD" {% if user_details['state'] == "SD" %}selected{% endif %}>South Dakota</option>#}
{# <option value="TN" {% if user_details['state'] == "TN" %}selected{% endif %}>Tennessee</option>#}
{# <option value="TX" {% if user_details['state'] == "TX" %}selected{% endif %}>Texas</option>#}
{# <option value="UT" {% if user_details['state'] == "UT" %}selected{% endif %}>Utah</option>#}
{# <option value="VT" {% if user_details['state'] == "VT" %}selected{% endif %}>Vermont</option>#}
{# <option value="USVI" {% if user_details['state'] == "USVI" %}selected{% endif %}>VI U.S. Virgin Islands</option>#}
{# <option value="VA" {% if user_details['state'] == "VA" %}selected{% endif %}>Virginia</option>#}
{# <option value="WA" {% if user_details['state'] == "WA" %}selected{% endif %}>Washington</option>#}
{# <option value="DC" {% if user_details['state'] == "DC" %}selected{% endif %}>Washington, D.C.</option>#}
{# <option value="WV" {% if user_details['state'] == "WV" %}selected{% endif %}>West Virginia</option>#}
{# <option value="WI" {% if user_details['state'] == "WI" %}selected{% endif %}>Wisconsin</option>#}
{# <option value="WY" {% if user_details['state'] == "WY" %}selected{% endif %}>Wyoming</option>#}
{# </optgroup>#}
{# <option value="N/A" {% if user_details['state'] == "N/A" %}selected{% endif %}>Other</option>#}
{# </select>#}
<label for="zipcode">Индекс</label>
<input name="zipcode" id="zipcode" type="text" class="small-field" value="{{ user_details['zipcode'] }}" />
<input type="submit" value="Сохранить изменения" class="button success" />
</form>

View file

@ -1,8 +1,5 @@
<ul class="inline-list">
<li><a href="{{ url_for('account.index') }}">Учётная запись</a></li>
<li><a href="{{ url_for('account.billing') }}">Биллинг</a></li>
{# <li><a href="{{ url_for('account.settings') }}">Настройки</a></li>#}
<li><a href="{{ url_for('account.password_update') }}">Смена пароля</a></li>
<li><a href="{{ url_for('account.sshkey') }}">SSH ключ</a></li>
<li><a href="{{ url_for('account.api') }}">API</a></li>
<li><a href="{{ url_for('account.password_update') }}">{{ _("Password update") }}</a></li>
<li><a href="{{ url_for('account.sshkey') }}">{{ _("SSH-key") }}</a></li>
<li><a href="{{ url_for('account.api') }}">{{ _("API") }}</a></li>
</ul>

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Баланс{% endblock %}
{% block title %}{{ _("API") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Учётная запись</h2>
<h2>{{ _("Account") }}</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %}
@ -13,10 +13,9 @@
</div>
<div class="row">
<div class="large-12 columns">
<h3>API</h3>
<h3>{{ _("API") }}</h3>
</div>
</div>
<div class="row">
<div class="large-12 columns">
{% if g.errors['total'] > 0 %}
@ -28,26 +27,19 @@
</ul>
</div>
{% endif %}
<form action="{{ url_for('account.api_update') }}" method="post">
<input type="hidden" name="method" value="secret_update" />
<label>
Email
<input type="text" name="email" value="{{ session['email'] }}" disabled />
</label>
<label>
Ключ API
<label for="email">{{ _("Email") }}</label>
<input type="text" name="email" value="{{ session['email'] }}" id="email" disabled />
<label for="secret">{{ _("API-key") }}</label>
<input type="text" name="secret" value="{{ user_secret.secret }}" id="secret" />
</label>
<label for="acl">
IP
<label for="acl">IP</label>
<input type="text" name="acl" value="{{ user_secret.acl }}" id="acl" />
</label>
<input type="button" value="Обновить ключ API" class="button small default" id="generate_secret" />
<input type="submit" value="Сохранить изменения" class="button small success" />
&nbsp;
<input type="radio" name="status" value="0" {% if user_secret.status == 0 or not user_secret.status %}checked="checked"{% endif %} /> Неактивно
<input type="radio" name="status" value="1" {% if user_secret.status == 1 %}checked="checked"{% endif %} /> Активно
<input type="button" value="{{ _('Update API-key') }}" class="button small default" id="generate_secret" />
<input type="submit" value="{{ _('Save changes') }}" class="button small success" />
&nbsp;&nbsp;&nbsp;
<input type="radio" name="status" value="0" {% if user_secret.status == 0 or not user_secret.status %}checked="checked"{% endif %} /> {{ _("Inactive") }}
<input type="radio" name="status" value="1" {% if user_secret.status == 1 %}checked="checked"{% endif %} /> {{ _("Active") }}
</form>
</div>
</div>

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Баланс{% endblock %}
{% block title %}{{ _("Balance") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Учётная запись</h2>
<h2>{{ _("Account") }}</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %}
@ -13,7 +13,7 @@
</div>
<div class="row">
<div class="large-12 columns">
<h3>Баланс</h3>
<h3>{{ _("Balance") }}</h3>
</div>
</div>
<div class="row">
@ -23,6 +23,32 @@
</div>
</div>
<div class="row">
<div class="large-12 columns">
<form id="myCCForm" action="/order" method="post">
<input id="token" name="token" type="hidden" value="">
<div>
<label>
<span>Card Number</span>
</label>
<input id="ccNo" type="text" size="20" value="" autocomplete="off" required />
</div>
<div>
<label>
<span>Expiration Date (MM/YYYY)</span>
</label>
<input type="text" size="2" id="expMonth" required />
<span> / </span>
<input type="text" size="2" id="expYear" required />
</div>
<div>
<label>
<span>CVC</span>
</label>
<input id="cvv" size="4" type="text" value="" autocomplete="off" required />
</div>
<input type="submit" value="Submit Payment">
</form>
</div>
<div class="large-12 columns">
<h4>Пополнить</h4>
</div>

View file

@ -1,21 +0,0 @@
{% extends "default/_layout.html" %}
{% block title %}Биллинг{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h1>Биллинг</h1>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %}
</div>
</div>
<div class="row">
<div class="large-12 columns">
{% if action == "edit" %}
{% include "_billing_information_form.twig" %}
{% else %}
{% include "_billing_information.twig" %}
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -1,27 +0,0 @@
{% extends "default/_layout.html" %}
{% block title %}Биллинг{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Учётная запись</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %}
</div>
</div>
<div class="row">
<div class="large-12 columns">
<h3>Учётная запись</h3>
</div>
<div class="large-12 columns">
{% if g.errors['total'] > 0 %}
<div class="alert-box alert">
<ul>
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
</ul>
</div>
{% endif %}
{% include "default/id/_account_information_edit.html" %}
</div>
</div>
{% endblock %}

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Учётная запись{% endblock %}
{% block title %}{{ _('Account') }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Учётная запись</h2>
<h2>{{ _('Account') }}</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %}

View file

@ -1,34 +1,28 @@
{% extends "default/_layout.html" %}
{% block title %}Вход{% endblock %}
{% block title %}{{ _("Login") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Вход</h3>
<h2>{{ _("Login") }}</h2>
</div>
</div>
<div class="row">
<div class="large-12 columns">
{% if g.errors['total'] > 0 %}
<div data-alert class="alert-box alert">
{% for error in g.errors['items'] %}
{{ error }}
{% endfor %}
{% for error in g.errors['items'] %}{{ error }}{% endfor %}
</div>
{% endif %}
<form action="{{ url_for('account.login') }}" method="post">
<input type="hidden" name="method" value="login" />
<label>
Адрес ел. почты
<input type="text" name="email" value="" placeholder="my@email.com" class="" />
</label>
<label>
Пароль
<input type="password" name="password" value="" placeholder="" class="" />
</label>
<input type="submit" value="Войти" class="button success" />
<a href="{{ url_for('account.password_reset') }}">Сбросить пароль</a>
<label for="email">{{ _("Email") }}</label>
<input type="text" name="email" value="" placeholder="my@email.com" class="" id="email" />
<label for="password">{{ _("Password") }}</label>
<input type="password" name="password" value="" placeholder="" class="" id="password" />
<input type="submit" value="{{ _('Login') }}" class="button success" />
<a href="{{ url_for('account.password_reset') }}">{{ _("Reset password") }}</a>
</form>
</div>
</div>

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Сброс пароля{% endblock %}
{% block title %}{{ _("Password reset") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Восстановление пароля</h2>
<h2>{{ _("Password reset") }}</h2>
{% if g.errors['total'] > 0 %}
<div data-alert class="alert-box alert">
{% for error in g.errors['items'] %}
@ -14,13 +14,11 @@
</div>
{% endif %}
<form action="{{ url_for('account.password_reset') }}" method="post">
<label for="email">
Адрес е.почты
<label for="email">{{ _("Email") }}</label>
<input type="text" name="email" value="" id='email' />
</label>
<input type="submit" value="Отправить проверочный код" class="button success" />
<input type="submit" value="{{ _('Send verify code') }}" class="button success" />
&nbsp;&nbsp;&nbsp;
<a href="{{ url_for('account.password_reset_step2') }}">Есть проверочный код</a>
<a href="{{ url_for('account.password_reset_step2') }}">{{ _("I have a verification code") }}</a>
</form>
</div>
</div>

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Сброс пароля{% endblock %}
{% block title %}{{ _("Password reset") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Сброс пароля. Шаг №2</h2>
<h2>{{ _("Password reset") }}</h2>
{% if g.errors['total'] > 0 %}
<div data-alert class="alert-box alert">
{% for error in g.errors['items'] %}
@ -15,16 +15,13 @@
{% endif %}
<form action="{{ url_for('account.password_reset_step2') }}" method="post">
<input type="hidden" name="recovery" value="1" />
<label for='email'>
Адрес е.почты
<label for='email'>{{ _("Email") }}</label>
<input type="text" name="email" value="" id='email' />
</label>
<label for='code'>
Введите проверочный код
<label for='code'>{{ _("Verification code") }}</label>
<input type="text" name="recovery_code" value="" id='code' />
</label>
<input type="submit" value="Сбросить пароль" class="button success" />
<a href="{{ url_for('account.password_reset') }}">Получить код</a>
<input type="submit" value="{{ _('Reset password') }}" class="button success" />
&nbsp;&nbsp;&nbsp;
<a href="{{ url_for('account.password_reset') }}">{{ _("I have no verification code") }}</a>
</form>
</div>
</div>

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Смена пароля{% endblock %}
{% block title %}{{ _("Update password") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Учётная запись</h2>
<h2>{{ _("Account") }}</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %}
@ -13,7 +13,7 @@
</div>
<div class="row">
<div class="large-12 columns">
<h3>Смена пароля</h3>
<h3>{{ _("Update password") }}</h3>
</div>
<div class="large-12 columns">
{% if g.errors['total'] > 0 %}
@ -24,20 +24,14 @@
</div>
{% endif %}
<form action="{{ url_for('account.password_update') }}" method="post">
<label>
Старый пароль
<input type="password" name="old_password" value="" />
</label>
<label>
Новый пароль
<input type="password" name="new_password" value="" />
</label>
<label>
Новый пароль (повторно)
<input type="password" name="new_password_confirm" value="" />
</label>
<input type="submit" value="Сменить пароль" class="button success" />
<a href="{{ url_for('account.index') }}" class="button secondary">Отмена</a>
<label for="old_password">{{ _("Old password") }}</label>
<input type="password" name="old_password" value="" id="old_password" />
<label for="new_password">{{ _("New password") }}</label>
<input type="password" name="new_password" value="" id="new_password" />
<label for="new_password2">{{ _("New password (again)") }}</label>
<input type="password" name="new_password_confirm" value="" id="new_password2" />
<input type="submit" value="{{ _('Update password') }}" class="button success" />
<a href="{{ url_for('account.index') }}" class="button secondary">{{ _("Cancel") }}</a>
</form>
</div>
</div>

View file

@ -0,0 +1,41 @@
{% extends "default/_layout.en.html" %}
{% block title %}Registration{% endblock %}
{% block content %}
<div class="row">
<div class="large-6 columns">
<h2>Registration</h2>
{% if g.errors['total'] > 0 %}
<div id='errors'>
<ul>
{% for error in g.errors['items'] %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form action="{{ url_for('account.registration') }}" method="post">
<input type="hidden" name="method" value="member_add" />
<label for="email">
E-mail address
<input type="text" name="email" value="" class="email" id="email" />
</label>
<label for="password">
Password
<input type="password" name="password" value="" id="password" />
</label>
<label for="password2">
Password (retry)
<input type="password" name="password2" value="" id="password2" />
</label>
{# <input type="checkbox" name="agree1" value="1" /> I agree <a href="">&Prime;Terms of Service&Prime;</a><br/>#}
{# <input type="checkbox" name="agree2" value="1" /> I agree <a href="">&Prime;Privacy Policy&Prime;</a><br/>#}
<input type="submit" value="Register" class="button success" />
</form>
</div>
<div class="large-6">
&nbsp;
</div>
</div>
{% endblock %}

View file

@ -1,37 +1,27 @@
{% extends "default/_layout.html" %}
{% extends "default/_layout.en.html" %}
{% block title %}Регистрация{% endblock %}
{% block title %}{{ _('Registration') }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-6 columns">
<h2>Регистрация</h2>
<h2>{{ _('Registration') }}</h2>
{% if g.errors['total'] > 0 %}
<div id='errors'>
<ul>
{% for error in g.errors['items'] %}
<li>{{ error }}</li>
{% endfor %}
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
</ul>
</div>
{% endif %}
<form action="{{ url_for('account.registration') }}" method="post">
<input type="hidden" name="method" value="member_add" />
<label for="email">
Адрес ел. почты
<label for="email">{{ _('Email') }}</label>
<input type="text" name="email" value="" class="email" id="email" />
</label>
<label for="password">
Пароль
<label for="password">{{ _('Password') }}</label>
<input type="password" name="password" value="" id="password" />
</label>
<label for="password2">
Пароль (повторно)
<label for="password2">{{ _('Password (again)') }}</label>
<input type="password" name="password2" value="" id="password2" />
</label>
{# <input type="checkbox" name="agree1" value="1" /> I agree <a href="">&Prime;Terms of Service&Prime;</a><br/>#}
{# <input type="checkbox" name="agree2" value="1" /> I agree <a href="">&Prime;Privacy Policy&Prime;</a><br/>#}
<input type="submit" value="Зарегистрироваться" class="button success" />
<input type="submit" value="{{ _('Sign up') }}" class="button success" />
</form>
</div>
<div class="large-6">

View file

@ -1,11 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}SSH-ключ{% endblock %}
{% block title %}{{ _("SSH-key") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Учётная запись</h2>
<h2>{{ _("Account") }}</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %}
@ -13,7 +13,7 @@
</div>
<div class="row">
<div class="large-12 columns">
<h3>SSH-ключ</h3>
<h3>{{ _("SSH-key") }}</h3>
</div>
</div>
<div class="row">
@ -21,13 +21,13 @@
{% if sshkey.exists %}
<form action="{{ url_for('account.sshkey_delete') }}" method="post">
<input type="text" value="{{ sshkey.sshkey }}" disabled />
<input type="submit" value="Удалить ключ" class="button alert" />
<input type="submit" value="Delete" class="button alert" />
</form>
{% else %}
<form action="{{ url_for('account.sshkey') }}" method="post">
<label for="sshkey">SSH-ключ</label>
<label for="sshkey">SSH-key</label>
<input type="text" name="sshkey" value="" id="sshkey" class="form" />
<input type="submit" value="Добавить ключ" class="button button-success" />
<input type="submit" value="Add" class="button button-success" />
</form>
{% endif %}
</div>

View file

@ -0,0 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}Knowledge base{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
{% filter markdown %}{{ kb_markdown }}{% endfilter %}
</div>
</div>
{% endblock %}

View file

@ -1,6 +1,6 @@
{% extends "default/_layout.html" %}
{% block title %}База знаний{% endblock %}
{% block title %}{{ _("Knowledge base") }}{% endblock %}
{% block content %}
<div class="row">

View file

@ -0,0 +1,11 @@
{% extends "default/_layout.html" %}
{% block title %}База знаний{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
{% filter markdown %}{{ kb_markdown }}{% endfilter %}
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,8 @@
<html>
<head></head>
<body>
<h1>Success</h1>
<p>Balance successfully refilled.</p>
<p><a href='{{ url_for("account.billing") }}'>Account</a></p>
</body>
</html>

View file

@ -3,6 +3,6 @@
<body>
<h1>Успешная оплата</h1>
<p>Баланс успешно пополнен.</p>
<p><a href="{{ url_for("account.billing") }}">В личный кабинет</a></p>
<p><a href='{{ url_for("account.billing") }}'>В личный кабинет</a></p>
</body>
</html>

View file

@ -0,0 +1,17 @@
<table class="table table-bordered" width="100%">
<tr>
<td><a href="{{ url_for('settings.billing') }}">Billing</a></td>
</tr>
<tr>
<td><a href="{{ url_for('settings.profile') }}">Profile</a></td>
</tr>
<tr>
<td><a href="{{ url_for('settings.team') }}">Team</a></td>
</tr>
<tr>
<td><a href="{{ url_for('settings.security') }}">Security</a></td>
</tr>
<tr>
<td><a href="{{ url_for('settings.notifications') }}">Notifications</a></td>
</tr>
</table>

View file

@ -0,0 +1,49 @@
<form id="myCCForm" action="/order" method="post">
<input id="token" name="token" type="hidden" value="">
<div class="row">
<div class="large-12 columns">
<label>
<span>Card Number</span>
</label>
<input id="ccNo" type="text" size="20" value="" autocomplete="off" required />
</div>
</div>
<div class="row">
<div class="large-4 columns">
<label>
<span>Expiration month</span>
</label>
<select id="expMonth" required>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
</div>
<div class="large-4 columns">
<label>Expiration year</label>
<select name="expYear" id="expYear" required >
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select>
</div>
<div class="large-4 columns">
<label>
<span>CVC</span>
</label>
<input id="cvv" size="4" type="text" value="" autocomplete="off" required />
</div>
</div>
<input type="submit" value="Submit Payment">
</form>

View file

@ -0,0 +1,17 @@
<form action="{{ url_for('payments.robokassa', action='process') }}" method="post">
<div class="large-6 columns">
<h4>PayPal Payment</h4>
<p>This is a one-time payment that will not recur. Payment may take up to 5 minutes to process.</p>
</div>
<div class="large-3 columns">
<select name="amount">
<option value="500">500 рублей</option>
<option value="1000">1000 рублей</option>
<option value="2000">2000 рублей</option>
<option value="5000">5000 рублей</option>
</select>
</div>
<div class="large-3 columns">
<input type="submit" value="Оплатить" class="button postfix" />
</div>
</form>

View file

@ -0,0 +1,17 @@
<form action="{{ url_for('payments.robokassa', action='process') }}" method="post">
<div class="large-6 columns">
<h4>Robokassa Payment</h4>
<p>This is a one-time payment that will not recur. Payment may take up to 5 minutes to process.</p>
</div>
<div class="large-3 columns">
<select name="amount">
<option value="500">500 рублей</option>
<option value="1000">1000 рублей</option>
<option value="2000">2000 рублей</option>
<option value="5000">5000 рублей</option>
</select>
</div>
<div class="large-3 columns">
<input type="submit" value="Оплатить" class="button postfix" />
</div>
</form>

View file

@ -0,0 +1,149 @@
{% extends "default/_layout.html" %}
{% block title %}{{ _("Settings") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>{{ _("Settings") }}</h2>
</div>
</div>
<div class="row">
<div class="large-3 columns">
{% include "default/settings/_menu.html" %}
</div>
<div class="large-9 columns">
<div class="row">
<div class="large-12 columns">
<h3>{{ _("Billing") }}</h3>
</div>
<div class="large-12 columns">
<p>Баланс: {{ user_balance }} рублей</p>
<hr/>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<h3>{{ _("Payment Methods") }}</h3>
<ul class="tabs" data-tab role="tablist">
<li class="tab-title active" role="presentation"><a href="#panel2-1" role="tab" tabindex="0" aria-selected="true" aria-controls="panel2-1">Credit card</a></li>
<!-- li class="tab-title" role="presentation"><a href="#panel2-2" role="tab" tabindex="0" aria-selected="false" aria-controls="panel2-2">Paypal</a></--li>
<li class="tab-title" role="presentation"><a href="#panel2-3" role="tab" tabindex="0" aria-selected="false" aria-controls="panel2-3">Robokassa</a></li -->
</ul>
<div class="tabs-content">
<section role="tabpanel" aria-hidden="false" class="content active" id="panel2-1">
{% include "default/settings/billing/_tab.creditcard.html" %}
</section>
<!-- section role="tabpanel" aria-hidden="true" class="content" id="panel2-2">
{% include "default/settings/billing/_tab.paypal.html" %}
</section>
<section role="tabpanel" aria-hidden="true" class="content" id="panel2-3">
{% if g.settings['PAY_ROBOKASSA_ENABLED'] == "1" %}
{% include "default/settings/billing/_tab.robokassa.html" %}
{% endif %}
</section -->
</div>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<h4>{{ _("Billing History") }}</h4>
<table width="100%">
<thead>
<tr>
<th>{{ _("ID") }}</th>
<th>{{ _("Amount") }}</th>
<th>{{ _("Date") }}</th>
<th>{{ _("Status") }}</th>
</tr>
</thead>
<tbody>
{% if history['total'] == 0 %}
<tr><td colspan="3">Нет записей.</td></tr>
{% else %}
{% for record in history['items'] %}
<tr>
<td>{{ record['id'] }}</td>
<td>{{ record['amount'] }}</td>
<td>{{ record['created'] }}</td>
<td>
{% if record['status'] == "process" %}
<span class="label attention">{{ record['status'] }}</span>
{% elif record['status'] == "fail" %}
<span class="label error">{{ record['status'] }}</span>
{% elif record['status'] == "success" %}
<span class="label success">{{ record['status'] }}</span>
{% else %}
{{ record['status'] }}
{% endif %}
</td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="https://www.2checkout.com/checkout/api/2co.min.js"></script>
<script>
$(document).foundation({
tab: {
callback : function (tab) {
console.log(tab);
}
}
});
</script>
<script>
// Called when token created successfully.
var successCallback = function(data) {
var myForm = document.getElementById('myCCForm');
// Set the token as the value for the token input
myForm.token.value = data.response.token.token;
// IMPORTANT: Here we call `submit()` on the form element directly instead of using jQuery to prevent and infinite token request loop.
myForm.submit();
};
// Called when token creation fails.
var errorCallback = function(data) {
if (data.errorCode === 200) {
tokenRequest();
} else {
alert(data.errorMsg);
}
};
var tokenRequest = function() {
// Setup token request arguments
var args = {
sellerId: "sandbox-seller-id",
publishableKey: "sandbox-publishable-key",
ccNo: $("#ccNo").val(),
cvv: $("#cvv").val(),
expMonth: $("#expMonth").val(),
expYear: $("#expYear").val()
};
// Make the token request
TCO.requestToken(successCallback, errorCallback, args);
};
$(function() {
// Pull in the public encryption key for our environment
TCO.loadPubKey('sandbox');
$("#myCCForm").submit(function(e) {
// Call our token request function
tokenRequest();
// Prevent form from submitting
return false;
});
});
</script>
{% endblock %}

View file

@ -0,0 +1,21 @@
<form action="{{ url_for('settings.profile_edit') }}" method="post">
<input type="hidden" name="update_information" value="1">
<!-- BILLING BLOCK -->
<label for="fname">{{ _("First name") }}</label>
<input name="fname" id="fname" type="text" class="long-field" value="{{ user_details['fname'] }}" />
<label for="lname">{{ _("Last name") }}</label>
<input name="lname" id="lname" type="text" class="long-field" value="{{ user_details['lname'] }}" />
<label for="address">{{ _("Address") }}</label>
<input name="address" id="address" type="text" class="long-field" value="{{ user_details['address'] }}" />
<label for="city">{{ _("City") }}</label>
<input name="city" id="city" type="text" class="long-field" value="{{ user_details['city'] }}" />
<label for="country">{{ _("Country") }}</label>
<input name="country" id="country" type="text" class="long-field" value="{{ user_details['country'] }}" />
<label for="state">{{ _("Region") }}</label>
<input name="state" id="state" type="text" class="long-field" value="{{ user_details['state'] }}" />
<label for="zipcode">{{ _("ZIP") }}</label>
<input name="zipcode" id="zipcode" type="text" class="small-field" value="{{ user_details['zipcode'] }}" />
<input type="submit" value="{{ _('Save changes') }}" class="button success" />
&nbsp;&nbsp;&nbsp;
<a href="{{ url_for('settings.profile') }}">{{ _("Cancel") }}</a>
</form>

View file

@ -1,22 +1,15 @@
<label>Имя</label>
<label>{{ _("First name") }}</label>
<input type="text" class="long-field" value="{{ user_details['fname'] }}" disabled />
<label>Фамилия</label>
<label>{{ _("Last name") }}</label>
<input type="text" class="long-field" value="{{ user_details['lname'] }}" disabled />
<label>Адрес</label>
<label>{{ _("Address") }}</label>
<input type="text" class="long-field" value="{{ user_details['address'] }}" disabled />
<label>Город</label>
<label>{{ _("City") }}</label>
<input type="text" class="long-field" value="{{ user_details['city'] }}" disabled />
<label>Страна</label>
<label>{{ _("Country") }}</label>
<input type="text" class="long-field" value="{{ user_details['country'] }}" disabled />
<label>Регион</label>
<label>{{ _("Region") }}</label>
<input type="text" class="long-field" value="{{ user_details['state'] }}" disabled />
<label>Индекс</label>
<label>{{ _("ZIP") }}</label>
<input type="text" class="long-field" value="{{ user_details['zipcode'] }}" disabled />
<a href="{{ url_for('account.edit') }}" class="button success">Изменить</a>
<a href="{{ url_for('settings.profile_edit') }}" class="button success">{{ _("Change") }}</a>

View file

@ -0,0 +1,33 @@
{% extends "default/_layout.html" %}
{% block title %}{{ _("Settings") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>{{ _("Settings") }}</h2>
</div>
</div>
<div class="row">
<div class="large-3 columns">
{% include "default/settings/_menu.html" %}
</div>
<div class="large-9 columns">
<div class="row">
{% if g.errors['total'] > 0 %}
<div class="alert-box alert">
<ul>
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
</ul>
</div>
{% endif %}
<div class="large-12 columns">
<h3>{{ _("Profile") }}</h3>
</div>
<div class="large-12 columns">
{% include "default/settings/profile/_account_information_edit.html" %}
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,26 @@
{% extends "default/_layout.html" %}
{% block title %}{{ _("Settings") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>{{ _("Settings") }}</h2>
</div>
</div>
<div class="row">
<div class="large-3 columns">
{% include "default/settings/_menu.html" %}
</div>
<div class="large-9 columns">
<div class="row">
<div class="large-12 columns">
<h3>{{ _("Profile") }}</h3>
</div>
<div class="large-12 columns">
{% include "default/settings/profile/_account_information_view.html" %}
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,26 +1,32 @@
{% extends "default/_layout.html" %}
{% block title %}Поддержка{% endblock %}
{% block title %}Support{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Поддержка</h2>
<h2>Support</h2>
</div>
<div class="large-12 columns">
<div class="large-6 columns">
<form action="{{ url_for('support.index') }}" method="post">
{% if not session['email'] %}
<label for="email">Адрес ел. почты</label>
<label for="email">Email</label>
<input type="text" name="email" id="email" value="" />
{% else %}
<input type="hidden" name="email" value="{{ session['email'] }}" />
{% endif %}
<label for="title">Заголовок</label>
<label for="title">Title</label>
<input type="text" name="title" id="title" value="">
<label for="message">Сообщение</label>
<label for="message">Message</label>
<textarea rows="14" name="message" id="message"></textarea>
<input type="submit" class="button success" value="Отправить" />
<input type="submit" class="button success" value="Send" />
</form>
</div>
<div class="large-6 columns">
<h3>{{ _("Contacts") }}</h3>
<p>Email: support@puluttar.com</p>
<h3>Address</h3>
<p>127322, Milashenkova st. 18, of. 256, Moscow</p>
</div>
</div>
{% endblock %}

View file

@ -1,14 +1,14 @@
{% extends "default/_layout.html" %}
{% block title %}Спасибо{% endblock %}
{% block title %}{{ _("Thank You!") }}{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h2>Спасибо!</h2>
<h2>{{ _("Thank you!") }}</h2>
</div>
<div class="large-12 columns">
<p>Спасибо за обращение в поддержку. Мы ответим вам в кротчайшее время.</p>
<p>{{ _("Thank you for contacting support. We will reply you as soon as possible.") }}</p>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,43 @@
{% extends "default/_layout.html" %}
{% block title %}Tasks{% endblock %}
{% block content %}
<div class="row">
<div class="large-12 columns">
<h3>Tasks</h3>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<table width='100%'>
<thead>
<tr>
<th>Id</th>
<th>Date</th>
<th>Task</th>
</tr>
</thead>
<tbody>
{% if tasks.total == 0 %}
<tr>
<td colspan="5">No any tasks.</td>
</tr>
{% else %}
{% for task in tasks['items'] %}
<tr>
<td>{{ task.id }}</td>
<td>{{ task.created }}</td>
<td>
{% if task.details.action == 'create' %}
{{ task.details.action }} container:{{ task.details.container_id }}
{% endif %}
</td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View file

@ -1,10 +0,0 @@
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>404</h1>
</body>
</html>

View file

@ -1,3 +1,13 @@
# База знаний
Скоро...
## Обзие вопросы
- Как создать контейнер
- Как оплатить
-
## API
- Описание
- Запросы
- Коды ошибок