commit
3eccbae47c
11 changed files with 1734 additions and 71 deletions
@ -1,71 +0,0 @@ |
||||
.PHONY: requirements requirements-upgrade freeze syncdb run run-public makemessages compilemessages collectstatic cloc clean user south |
||||
|
||||
project_name=proj
|
||||
|
||||
requirements: |
||||
-@echo "### Installing requirements"
|
||||
-@pip install -r requirements.txt
|
||||
|
||||
requirements-upgrade: |
||||
-@echo "### Upgrading requirements"
|
||||
-@pip freeze | cut -d = -f 1 | xargs pip install -U
|
||||
|
||||
freeze: |
||||
-@echo "### Freezing python packages to requirements.txt"
|
||||
-@pip freeze > requirements.txt
|
||||
|
||||
syncdb: |
||||
-@echo "### Creating database tables and loading fixtures"
|
||||
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py syncdb --noinput
|
||||
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py migrate
|
||||
|
||||
run: |
||||
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py runserver
|
||||
|
||||
run-public: |
||||
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings ipython manage.py runserver 0.0.0.0:8000
|
||||
|
||||
shell: |
||||
@PYTHONPATH=$(PYTHONPATH):. DJANGO_SETTINGS_MODULE=$(project_name).settings python manage.py shell
|
||||
|
||||
solrrun: |
||||
/opt/solr/bin/solr start -p 8983
|
||||
|
||||
solrstop: |
||||
/opt/solr/bin/solr stop -all
|
||||
|
||||
makemessages: |
||||
-@ipython manage.py makemessages --all
|
||||
|
||||
compilemessages: |
||||
-@ipython manage.py compilemessages
|
||||
|
||||
collectstatic: |
||||
@ipython manage.py collectstatic
|
||||
|
||||
user: |
||||
-@ipython manage.py createsuperuser
|
||||
|
||||
# If the first argument is "south"...
|
||||
ifeq (south,$(firstword $(MAKECMDGOALS))) |
||||
# use the rest as arguments for "south"
|
||||
RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||
# ...and turn them into do-nothing targets
|
||||
$(eval $(RUN_ARGS):;@:)
|
||||
endif |
||||
south: |
||||
-@python manage.py schemamigration $(RUN_ARGS) --auto
|
||||
-@python manage.py migrate $(RUN_ARGS)
|
||||
|
||||
cloc: |
||||
-@echo "### Counting lines of code within the project"
|
||||
-@echo "# Total:" ; find . -iregex '.*\.py\|.*\.js\|.*\.html\|.*\.css' -type f -exec cat {} + | wc -l
|
||||
-@echo "# Python:" ; find . -name '*.py' -type f -exec cat {} + | wc -l
|
||||
-@echo "# JavaScript:" ; find . -name '*.js' -type f -exec cat {} + | wc -l
|
||||
-@echo "# HTML:" ; find . -name '*.html' -type f -exec cat {} + | wc -l
|
||||
-@echo "# CSS:" ; find . -name '*.css' -type f -exec cat {} + | wc -l
|
||||
|
||||
clean: |
||||
-@echo "### Cleaning *.pyc and .DS_Store files "
|
||||
-@find . -name '*.pyc' -exec rm -f {} \;
|
||||
-@find . -name '.DS_Store' -exec rm -f {} \;
|
||||
@ -0,0 +1 @@ |
||||
ostoffice-4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a |
||||
@ -0,0 +1 @@ |
||||
dev:$apr1$51bqElVf$/.SfDBWGSjAauaw82Drbo1 |
||||
@ -0,0 +1,74 @@ |
||||
server { |
||||
# server_name 176.121.11.165 expomap.ru www.expomap.ru dev.expomap.ru; |
||||
listen 80; |
||||
return 301 https://$host$request_uri; |
||||
} |
||||
|
||||
server { |
||||
listen 443; |
||||
server_name 176.121.11.165 www.expomap.ru expomap.ru dev.expomap.ru; |
||||
#ssl_stapling on; |
||||
ssl on; |
||||
ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
||||
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
||||
ssl_dhparam /etc/nginx/ssl/dhparam.pem; |
||||
ssl_session_timeout 24h; |
||||
ssl_session_cache shared:SSL:25m; |
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
||||
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; |
||||
ssl_prefer_server_ciphers on; |
||||
add_header Strict-Transport-Security "max-age=31536000;"; |
||||
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:"; |
||||
|
||||
|
||||
|
||||
|
||||
client_header_timeout 360s; |
||||
location / { |
||||
auth_basic "Unauthorized"; |
||||
auth_basic_user_file /home/www/proj/.htpasswd; |
||||
proxy_pass http://127.0.0.1:8080/; |
||||
proxy_redirect off; |
||||
proxy_set_header Host $host; |
||||
proxy_set_header X-Real-IP $remote_addr; |
||||
proxy_set_header X-Forwarded-For $remote_addr; |
||||
include /etc/nginx/geoip_proxy.conf; |
||||
client_max_body_size 100m; |
||||
client_body_buffer_size 128k; |
||||
|
||||
proxy_connect_timeout 90; |
||||
proxy_send_timeout 90; |
||||
proxy_read_timeout 90; |
||||
proxy_buffer_size 16k; |
||||
proxy_buffers 256 8k; |
||||
proxy_busy_buffers_size 2000k; |
||||
proxy_temp_file_write_size 2048k; |
||||
} |
||||
|
||||
|
||||
location /965E1EE7949FD639CA0124C8D8C57774.txt { |
||||
root /home/www/proj/; |
||||
} |
||||
|
||||
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html { |
||||
root /home/www/proj/support; |
||||
} |
||||
|
||||
|
||||
location /static { |
||||
root /home/www/proj; |
||||
} |
||||
location /media { |
||||
root /home/www/proj; |
||||
} |
||||
|
||||
location /templates { |
||||
root /home/www/proj/static; |
||||
} |
||||
location /subdmn { |
||||
root /home/old_files; |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
@ -0,0 +1,32 @@ |
||||
<VirtualHost 127.0.0.1:8080> |
||||
WSGIDaemonProcess www-data display-name=%{GROUP} processes=2 threads=2 |
||||
WSGIProcessGroup www-data |
||||
WSGIScriptAlias / "/home/www/proj/project.wsgi" |
||||
ServerName 176.121.11.165 |
||||
<Directory "/home/www/proj/"> |
||||
Order allow,deny |
||||
Options Indexes FollowSymLinks |
||||
Allow from all |
||||
IndexOptions FancyIndexing |
||||
</Directory> |
||||
|
||||
Alias /media "/home/www/proj/media/" |
||||
Alias /static "/home/www/proj/static/" |
||||
|
||||
|
||||
<Directory "/home/www/proj/media"> |
||||
Order allow,deny |
||||
Options Indexes FollowSymLinks |
||||
Allow from all |
||||
IndexOptions FancyIndexing |
||||
</Directory> |
||||
<Directory "/home/www/proj/static"> |
||||
Order allow,deny |
||||
Options Indexes FollowSymLinks |
||||
Allow from all |
||||
IndexOptions FancyIndexing |
||||
</Directory> |
||||
|
||||
ErrorLog /var/log/apache2/expo.error.log |
||||
CustomLog /var/log/apache2/expo.access.log combined |
||||
</VirtualHost> |
||||
@ -0,0 +1,201 @@ |
||||
<?xml version="1.0" ?> |
||||
<!-- |
||||
Licensed to the Apache Software Foundation (ASF) under one or more |
||||
contributor license agreements. See the NOTICE file distributed with |
||||
this work for additional information regarding copyright ownership. |
||||
The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
(the "License"); you may not use this file except in compliance with |
||||
the License. You may obtain a copy of the License at |
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
||||
Unless required by applicable law or agreed to in writing, software |
||||
distributed under the License is distributed on an "AS IS" BASIS, |
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
See the License for the specific language governing permissions and |
||||
limitations under the License. |
||||
--> |
||||
|
||||
<schema name="default" version="1.4"> |
||||
<types> |
||||
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> |
||||
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/> |
||||
<fieldtype name="binary" class="solr.BinaryField"/> |
||||
|
||||
<!-- Numeric field types that manipulate the value into |
||||
a string value that isn't human-readable in its internal form, |
||||
but with a lexicographic ordering the same as the numeric ordering, |
||||
so that range queries work correctly. --> |
||||
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
|
||||
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
|
||||
<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> |
||||
<!-- A Trie based date field for faster date range queries and date faceting. --> |
||||
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> |
||||
|
||||
<fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/> |
||||
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> |
||||
<fieldtype name="geohash" class="solr.GeoHashField"/> |
||||
|
||||
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
||||
<!-- in this example, we will only use synonyms at query time |
||||
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> |
||||
--> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.StopFilterFactory" |
||||
ignoreCase="true" |
||||
words="stopwords_en.txt" |
||||
enablePositionIncrements="true" |
||||
/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
||||
--> |
||||
<filter class="solr.PorterStemFilterFactory"/> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
||||
<filter class="solr.StopFilterFactory" |
||||
ignoreCase="true" |
||||
words="stopwords_en.txt" |
||||
enablePositionIncrements="true" |
||||
/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
||||
--> |
||||
<filter class="solr.PorterStemFilterFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> |
||||
<analyzer> |
||||
<tokenizer class="solr.WhitespaceTokenizerFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="ngram" class="solr.TextField" > |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" /> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1"> |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
||||
<filter class="solr.LowerCaseFilterFactory" /> |
||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
||||
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" /> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
||||
<filter class="solr.LowerCaseFilterFactory" /> |
||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
</types> |
||||
|
||||
<fields> |
||||
<!-- general --> |
||||
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> |
||||
<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> |
||||
<field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/> |
||||
<field name="_version_" type="long" indexed="true" stored="true"/> |
||||
|
||||
<dynamicField name="*_i" type="int" indexed="true" stored="true"/> |
||||
<dynamicField name="*_s" type="string" indexed="true" stored="true"/> |
||||
<dynamicField name="*_l" type="long" indexed="true" stored="true"/> |
||||
<dynamicField name="*_t" type="text_en" indexed="true" stored="true"/> |
||||
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> |
||||
<dynamicField name="*_f" type="float" indexed="true" stored="true"/> |
||||
<dynamicField name="*_d" type="double" indexed="true" stored="true"/> |
||||
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/> |
||||
<dynamicField name="*_p" type="location" indexed="true" stored="true"/> |
||||
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/> |
||||
|
||||
|
||||
<field name="name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="url" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="catalog_name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="catalog_name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="content_auto" type="edge_ngram" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="form_name" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="area_id" type="long" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="city_id" type="long" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="country_id" type="long" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="theme" type="text_en" indexed="true" stored="true" multiValued="true" /> |
||||
|
||||
<field name="tag" type="text_en" indexed="true" stored="true" multiValued="true" /> |
||||
|
||||
<field name="where" type="text_en" indexed="true" stored="true" multiValued="true" /> |
||||
|
||||
<field name="data_end" type="date" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="data_begin" type="date" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="city" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="country" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="parent_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="parent_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
</fields> |
||||
|
||||
<!-- field to use to determine and enforce document uniqueness. --> |
||||
<uniqueKey>id</uniqueKey> |
||||
|
||||
<!-- field for the QueryParser to use when an explicit fieldname is absent --> |
||||
<defaultSearchField>text</defaultSearchField> |
||||
|
||||
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> |
||||
<solrQueryParser defaultOperator="AND"/> |
||||
</schema> |
||||
|
||||
@ -0,0 +1,557 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Django settings for proj project. |
||||
import os |
||||
import django |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
|
||||
|
||||
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__)) |
||||
SITE_ROOT = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0] |
||||
|
||||
DEBUG = True |
||||
|
||||
|
||||
ADMINS = ( |
||||
# ('Your Name', 'your_email@example.com'), |
||||
) |
||||
|
||||
MANAGERS = ADMINS |
||||
|
||||
DATABASES = { |
||||
'default': { |
||||
'ENGINE': 'django.db.backends.mysql', |
||||
'NAME': 'expomap', |
||||
'USER': 'kotzilla', |
||||
'PASSWORD': 'qazedc', |
||||
'HOST': '', |
||||
'PORT': '', |
||||
} |
||||
} |
||||
|
||||
|
||||
CACHES = { |
||||
"default": { |
||||
"BACKEND": "redis_cache.cache.RedisCache", |
||||
"LOCATION": "/tmp/redis.sock", |
||||
"OPTIONS": { |
||||
"CLIENT_CLASS": "redis_cache.client.DefaultClient", |
||||
}, |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
# Hosts/domain names that are valid for this site; required if DEBUG is False |
||||
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts |
||||
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148'] |
||||
|
||||
# Local time zone for this installation. Choices can be found here: |
||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name |
||||
# although not all choices may be available on all operating systems. |
||||
# In a Windows environment this must be set to your system time zone. |
||||
TIME_ZONE = 'UTC' |
||||
|
||||
# Language code for this installation. All choices can be found here: |
||||
# http://www.i18nguy.com/unicode/language-identifiers.html |
||||
LANGUAGE_CODE = 'ru' |
||||
|
||||
DEFAULT_LANGUAGE = 'ru' |
||||
|
||||
LANGUAGES = ( |
||||
('ru', _('Russian')), |
||||
('en', _('English')), |
||||
) |
||||
|
||||
LOCALE_PATHS = ( |
||||
os.path.join(SITE_ROOT, 'locale'), |
||||
) |
||||
|
||||
DEFAULT_CHARSET = 'utf-8' |
||||
|
||||
SITE_ID = 1 |
||||
|
||||
# If you set this to False, Django will make some optimizations so as not |
||||
# to load the internationalization machinery. |
||||
USE_I18N = True |
||||
|
||||
# If you set this to False, Django will not format dates, numbers and |
||||
# calendars according to the current locale. |
||||
USE_L10N = False |
||||
|
||||
# If you set this to False, Django will not use timezone-aware datetimes. |
||||
USE_TZ = False |
||||
|
||||
|
||||
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media/') |
||||
CKEDITOR_UPLOAD_PATH = os.path.join(SITE_ROOT, 'media/upload') |
||||
|
||||
|
||||
CKEDITOR_CONFIGS = { |
||||
'default': { |
||||
'toolbar': 'standart', |
||||
'height': 200, |
||||
'width': 565, |
||||
'resize_enabled' : True, |
||||
'autoGrow_onStartup' : False, |
||||
'autoGrow_bottomSpace' : 300, |
||||
'fillEmptyBlocks' : False, |
||||
'autoParagraph' : False, |
||||
}, |
||||
'newsletters': { |
||||
'toolbar': 'standart', |
||||
'height': 600, |
||||
'width': 750, |
||||
'resize_enabled' : True, |
||||
'autoGrow_onStartup' : False, |
||||
'autoGrow_bottomSpace' : 300, |
||||
'fillEmptyBlocks' : False, |
||||
'autoParagraph' : False, |
||||
}, |
||||
|
||||
} |
||||
|
||||
MEDIA_URL = '/media/' |
||||
|
||||
STATIC_ROOT = os.path.join(SITE_ROOT, 'collected_static') |
||||
|
||||
STATICFILES_DIRS = ( |
||||
(os.path.join(SITE_ROOT, 'static')), |
||||
) |
||||
|
||||
STATIC_URL = '/static/' |
||||
|
||||
STATICFILES_FINDERS = ( |
||||
'django.contrib.staticfiles.finders.FileSystemFinder', |
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
||||
#'django.contrib.staticfiles.finders.DefaultStorageFinder', |
||||
) |
||||
|
||||
# Make this unique, and don't share it with anybody. |
||||
SECRET_KEY = '=yz1@ko%1s8bmel)c84#s*xpxn%4(1e+smdnh*@rdm*5%v!mln' |
||||
|
||||
|
||||
TEMPLATE_CONTEXT_PROCESSORS = ( |
||||
"django.contrib.auth.context_processors.auth", |
||||
"django.core.context_processors.debug", |
||||
"django.core.context_processors.i18n", |
||||
"django.core.context_processors.media", |
||||
"django.core.context_processors.static", |
||||
"django.core.context_processors.tz", |
||||
"django.contrib.messages.context_processors.messages", |
||||
"django.core.context_processors.request", |
||||
'social.apps.django_app.context_processors.backends', |
||||
'social.apps.django_app.context_processors.login_redirect', |
||||
'django_messages.context_processors.inbox', |
||||
"proj.views.expo_context" |
||||
) |
||||
#LOGIN_REDIRECT_URL = '/' |
||||
|
||||
MIDDLEWARE_CLASSES = ( |
||||
# 'django.middleware.cache.UpdateCacheMiddleware', |
||||
'django.contrib.sessions.middleware.SessionMiddleware', |
||||
'solid_i18n.middleware.SolidLocaleMiddleware', |
||||
'django.middleware.common.CommonMiddleware', |
||||
'django.middleware.csrf.CsrfViewMiddleware', |
||||
'django.contrib.auth.middleware.AuthenticationMiddleware', |
||||
'django.contrib.messages.middleware.MessageMiddleware', |
||||
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware', |
||||
# 'django.middleware.cache.FetchFromCacheMiddleware', |
||||
# Uncomment the next line for simple clickjacking protection: |
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
||||
|
||||
|
||||
) |
||||
|
||||
|
||||
ROOT_URLCONF = 'proj.urls' |
||||
|
||||
# Python dotted path to the WSGI application used by Django's runserver. |
||||
WSGI_APPLICATION = 'proj.wsgi.application' |
||||
|
||||
TEMPLATE_DIRS = ( |
||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". |
||||
# Always use forward slashes, even on Windows. |
||||
# Don't forget to use absolute paths, not relative paths. |
||||
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'), |
||||
os.path.join(SITE_ROOT, 'templates/admin'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/accounts'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/article'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/country'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/city'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/company'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/conference'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/directories'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/exposition'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/forms'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/import templates'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/news'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/organiser'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/place_conference'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/place_exposition'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/page'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/photoreport'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/settings'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/seminar'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/service'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/theme'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/translator'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/webinar'), |
||||
|
||||
os.path.join(SITE_ROOT, 'templates/client'), |
||||
os.path.join(SITE_ROOT, 'templates/client/exposition'), |
||||
os.path.join(SITE_ROOT, 'templates/client/photoreport'), |
||||
os.path.join(SITE_ROOT, 'templates/client/includes'), |
||||
os.path.join(SITE_ROOT, 'templates'), |
||||
#os.path.join(SITE_ROOT, 'templates/client/popups'), |
||||
) |
||||
|
||||
AUTH_USER_MODEL = 'accounts.User' |
||||
LOGIN_URL='/' |
||||
#registration info |
||||
ACCOUNT_ACTIVATION_DAYS=2 |
||||
# mail settings |
||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' |
||||
EMAIL_HOST = 'localhost' |
||||
EMAIL_HOST_USER = '' |
||||
EMAIL_HOST_PASSWORD = '' |
||||
EMAIL_USE_TLS = True |
||||
EMAIL_PORT = 25 |
||||
DEFAULT_FROM_EMAIL = "expomap.ru" |
||||
|
||||
|
||||
AUTHENTICATION_BACKENDS = ( |
||||
'social.backends.open_id.OpenIdAuth', |
||||
'social.backends.vk.VKOAuth2', |
||||
'social.backends.facebook.FacebookOAuth2', |
||||
'social.backends.twitter.TwitterOAuth', |
||||
'social.backends.google.GoogleOAuth', |
||||
'social.backends.linkedin.LinkedinOAuth', |
||||
'social.backends.odnoklassniki.OdnoklassnikiOAuth2', |
||||
'social.backends.mailru.MailruOAuth2', |
||||
'django.contrib.auth.backends.ModelBackend', |
||||
) |
||||
|
||||
SOCIAL_AUTH_LOGIN_URL = '/' |
||||
SOCIAL_AUTH_USER_MODEL = 'accounts.User' |
||||
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/logged-in/' |
||||
# The user will be redirected to this URL when a social account is disconnected |
||||
SOCIAL_AUTH_INACTIVE_USER_URL = '/inactive-user/' |
||||
# #Used to redirect the user once the auth process ended successfully. The value of ?next=/foo is used if it was present |
||||
# SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/' |
||||
# #URL where the user will be redirected in case of an error |
||||
# SOCIAL_AUTH_LOGIN_URL = '/login-url/' |
||||
# #Is used as a fallback for LOGIN_ERROR_URL |
||||
# SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/new-users-redirect-url/' |
||||
# # Used to redirect new registered users, will be used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL if defined. |
||||
# Note that ?next=/foo is appended if present, if you want new users to go to next, you’ll need to do it yourself. |
||||
# SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/new-association-redirect-url/' |
||||
# # Like SOCIAL_AUTH_NEW_USER_REDIRECT_URL but for new associated accounts (user is already logged in). |
||||
# Used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL |
||||
# SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/account-disconnected-redirect-url/' |
||||
|
||||
# Inactive users can be redirected to this URL when trying to authenticate. |
||||
# SOCIAL_AUTH_UID_LENGTH = <int> |
||||
# SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = <int> |
||||
# SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = <int> |
||||
# SOCIAL_AUTH_FORCE_EMAIL_VALIDATION = True |
||||
|
||||
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True |
||||
|
||||
SOCIAL_AUTH_PIPELINE = ( |
||||
'social.pipeline.social_auth.social_details', |
||||
'social.pipeline.social_auth.social_uid', |
||||
'functions.pipeline.load_user', |
||||
'social.pipeline.social_auth.auth_allowed', |
||||
'social.pipeline.social_auth.social_user', |
||||
'social.pipeline.user.get_username', |
||||
'functions.pipeline.require_email', |
||||
#'social.pipeline.mail.mail_validation', |
||||
'functions.pipeline.create_user', |
||||
#'social.pipeline.user.create_user', |
||||
'social.pipeline.social_auth.associate_by_email', |
||||
'social.pipeline.social_auth.associate_user', |
||||
'social.pipeline.social_auth.load_extra_data', |
||||
'social.pipeline.user.user_details' |
||||
|
||||
) |
||||
|
||||
REQUIRES_EMAIL_VALIDATION = True |
||||
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'functions.pipeline.SendVerificationEmail' |
||||
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/email_verify_sent/' |
||||
|
||||
|
||||
SOCIAL_AUTH_VK_OAUTH2_KEY = '3393841' |
||||
SOCIAL_AUTH_VK_OAUTH2_SECRET = '2P19EBUEpLZifaabbREv' |
||||
SOCIAL_AUTH_VK_OAUTH2_SCOPE =['email'] |
||||
SOCIAL_AUTH_VK_OAUTH2_PROFILE_EXTRA_PARAMS = { |
||||
'fields': 'email' |
||||
} |
||||
|
||||
SOCIAL_AUTH_FACEBOOK_KEY = '133775720059470' |
||||
SOCIAL_AUTH_FACEBOOK_SECRET = '434edf89c24a290497646a739df656c6' |
||||
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'publish_actions'] |
||||
|
||||
SOCIAL_AUTH_TWITTER_KEY = 'S6NX33FazTcWuqnXQhlOdg' |
||||
SOCIAL_AUTH_TWITTER_SECRET = 'MxUGfySQmLI5kvqSoAtWsGje2eAHQL7Jo8mXuIZ4D0' |
||||
SOCIAL_AUTH_TWITTER_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '1044044901114.apps.googleusercontent.com' |
||||
SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = 'j_McErlPPof88eNrmOXI-ZXI' |
||||
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_MAILRU_OAUTH2_KEY = '697945' |
||||
SOCIAL_AUTH_MAILRU_OAUTH2_SECRET = '343581b9e31961b334532cc1880066e8' |
||||
SOCIAL_AUTH_MAILRU_OAUTH2_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_KEY = 'CBAQDCKIABABABABA' |
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '814CDDCD3E2D2F278EF1591B' |
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = '128007936' |
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd' |
||||
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy' |
||||
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email'] |
||||
|
||||
|
||||
|
||||
INSTALLED_APPS = ( |
||||
'django.contrib.auth', |
||||
'django.contrib.contenttypes', |
||||
'django.contrib.sessions', |
||||
'django.contrib.sites', |
||||
'django.contrib.messages', |
||||
'django.contrib.staticfiles', |
||||
'django.contrib.humanize', |
||||
'django.contrib.sitemaps', |
||||
'haystack', |
||||
#custom modules |
||||
'emencia.django.newsletter', |
||||
'accounts', |
||||
'article', |
||||
'city', |
||||
'company', |
||||
'conference', |
||||
'core', |
||||
'country', |
||||
'directories', |
||||
'expobanner', |
||||
'exposition', |
||||
'file', |
||||
'import_xls', |
||||
'news', |
||||
'note', |
||||
'organiser', |
||||
'place_conference', |
||||
'place_exposition', |
||||
'photoreport', |
||||
'registration', |
||||
'review', |
||||
'seminar', |
||||
'service', |
||||
'settings', |
||||
'theme', |
||||
'translator', |
||||
'webinar', |
||||
'meta', |
||||
#django modules |
||||
'django_crontab', |
||||
'sorl.thumbnail', # for logos |
||||
'photologue', # photogallery |
||||
'sortedm2m', # photologue dependence |
||||
'hvad', # |
||||
'tinymce', # ??? |
||||
'ckeditor', # wysiwig editor in admin |
||||
'django_messages', # messages |
||||
'bitfield', |
||||
'djutils', # ?? |
||||
'pytils', # ?? |
||||
'pymorphy', # ?? |
||||
'password_reset', # reset password |
||||
'social.apps.django_app.default', # social auth |
||||
'core', |
||||
'specialist_catalog', |
||||
'south', |
||||
) |
||||
|
||||
CRONJOBS = [ |
||||
('8 * * * *', 'django.core.management.call_command', ['send_newsletter']), |
||||
|
||||
('0 * * * *', 'django.core.management.call_command', ['update_index', 'conference', '--remove', '--age=6']), |
||||
('5 * * * *', 'django.core.management.call_command', ['update_index', 'exposition', '--remove', '--age=6']), |
||||
('0 1,13 * * *', 'django.core.management.call_command', ['update_index', 'place_exposition', '--remove', '--age=24']), |
||||
('0 3 * * *', 'django.core.management.call_command', ['update_index', 'company', '--remove', '--age=48']), |
||||
('0 4 * * *', 'django.core.management.call_command', ['update_index', 'theme', '--remove', '--age=48']), |
||||
('0 5 * * * ', 'django.core.management.call_command', ['update_index', 'tag', '--remove', '--age=48']), |
||||
('0 6 * * *', 'django.core.management.call_command', ['update_index', 'country', '--remove', '--age=48']), |
||||
('0 7 * * *', 'django.core.management.call_command', ['update_index', 'city', '--remove', '--age=48']), |
||||
|
||||
('10 * * * *', 'django.core.management.call_command', ['banner_log_update']), |
||||
('20 2,14 * * *', 'django.core.management.call_command', ['banner_log_check_previous_day']), |
||||
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']), |
||||
|
||||
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']), |
||||
('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']), |
||||
|
||||
] |
||||
|
||||
PYMORPHY_DICTS = { |
||||
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' }, |
||||
} |
||||
|
||||
# search backend |
||||
HAYSTACK_CONNECTIONS = { |
||||
'default': { |
||||
'ENGINE': 'haystack.backends.solr_backend.SolrEngine', |
||||
'URL': 'http://localhost:8983/solr' |
||||
# ...or for multicore... |
||||
# 'URL': 'http://127.0.0.1:8983/solr/mysite', |
||||
}, |
||||
} |
||||
|
||||
|
||||
# A sample logging configuration. The only tangible logging |
||||
# performed by this configuration is to send an email to |
||||
# the site admins on every HTTP 500 error when DEBUG=False. |
||||
# See http://docs.djangoproject.com/en/dev/topics/logging for |
||||
# more details on how to customize your logging configuration. |
||||
LOGGING = { |
||||
'version': 1, |
||||
'disable_existing_loggers': False, |
||||
'filters': { |
||||
'require_debug_false': { |
||||
'()': 'django.utils.log.RequireDebugFalse' |
||||
} |
||||
}, |
||||
'handlers': { |
||||
'mail_admins': { |
||||
'level': 'ERROR', |
||||
'filters': ['require_debug_false'], |
||||
'class': 'django.utils.log.AdminEmailHandler' |
||||
} |
||||
}, |
||||
'loggers': { |
||||
'django.request': { |
||||
'handlers': ['mail_admins'], |
||||
'level': 'ERROR', |
||||
'propagate': True, |
||||
}, |
||||
} |
||||
} |
||||
|
||||
# TODO automate crons |
||||
""" |
||||
# update search indexes |
||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index conference --remove --age=6 |
||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index exposition --remove --age=6 |
||||
0 1,13 * * * /usr/bin/python /var/www/proj/manage.py update_index place_exposition --remove --age=24 |
||||
0 3 * * * /usr/bin/python /var/www/proj/manage.py update_index company --remove --age=48 |
||||
0 4 * * * /usr/bin/python /var/www/proj/manage.py update_index theme --remove --age=48 |
||||
0 5 * * * /usr/bin/python /var/www/proj/manage.py update_index tag --remove --age=48 |
||||
0 6 * * * /usr/bin/python /var/www/proj/manage.py update_index country --remove --age=48 |
||||
0 7 * * * /usr/bin/python /var/www/proj/manage.py update_index city --remove --age=48 |
||||
# update banner logs |
||||
10 * * * * /usr/bin/python /var/www/proj/manage.py banner_log_update |
||||
20 2,14 * * * /usr/bin/python /var/www/proj/manage.py banner_log_check_previous_day |
||||
# update hotels prices |
||||
20 1 * * 6 /usr/bin/python /var/www/proj/manage.py update_hotels_price |
||||
# newsletter |
||||
20 * * * * /usr/bin/python /var/www/proj/manage.py send_newsletter |
||||
40 6 * * * /usr/bin/python /var/www/proj/manage.py newsletter_contacts_remove_notactivated |
||||
|
||||
""" |
||||
|
||||
THUMBNAIL_DEBUG = DEBUG |
||||
|
||||
CALLBACK_EMAIL = 'kotzilla@ukr.net' |
||||
|
||||
BOOKING_AID = '333667' |
||||
try: |
||||
from functions.overrides import SeoPaginator as Paginator |
||||
except ImportError: |
||||
from django.core.paginator import Paginator |
||||
DEFAULT_PAGINATOR = Paginator |
||||
ADMIN_PAGINATION = 20 |
||||
CLIENT_PAGINATION = 15 |
||||
|
||||
TEMPLATE_DEBUG = DEBUG |
||||
NO_LOGO = '/static/client/img/no-logo.png' |
||||
|
||||
# events settings |
||||
CURRENCY = ('RUB', 'USD', 'EUR', 'RMB', 'GBP', 'AED', 'SGD', 'TRY', 'CZK', 'CHF', 'SEK', 'LKR', 'UAH', 'IDR', 'PLN','JPY') |
||||
BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consumers', _(u'Специалисты и потребители')), |
||||
('general public', _(u'Широкая публика'))) |
||||
|
||||
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')}, |
||||
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, |
||||
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, |
||||
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, |
||||
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, |
||||
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} |
||||
|
||||
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64] |
||||
|
||||
|
||||
CLIENT_DATE_FORMAT = ["%d.%m.%Y"] |
||||
|
||||
# cache pages in random seconds. random in this range |
||||
CACHE_RANGE = [60, 120] |
||||
|
||||
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup' |
||||
|
||||
try: |
||||
from local import * |
||||
except ImportError, e: |
||||
pass |
||||
try: |
||||
from dev_settings import * |
||||
except ImportError, e: |
||||
pass |
||||
|
||||
# save sessions in redis |
||||
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' |
||||
if not DEBUG: |
||||
# cache template loading |
||||
TEMPLATE_LOADERS = ( |
||||
('django.template.loaders.cached.Loader', ( |
||||
'django.template.loaders.filesystem.Loader', |
||||
'django.template.loaders.app_directories.Loader', |
||||
)), |
||||
) |
||||
else: |
||||
TEMPLATE_LOADERS = ( |
||||
'django.template.loaders.filesystem.Loader', |
||||
'django.template.loaders.app_directories.Loader', |
||||
) |
||||
|
||||
# debug_toolbar settings |
||||
|
||||
if DEBUG: |
||||
DEBUG_TOOLBAR_PATCH_SETTINGS = False |
||||
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46') |
||||
|
||||
MIDDLEWARE_CLASSES += ( |
||||
'debug_toolbar.middleware.DebugToolbarMiddleware', |
||||
) |
||||
|
||||
INSTALLED_APPS += ( |
||||
'debug_toolbar', |
||||
) |
||||
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'), |
||||
DEBUG_TOOLBAR_PANELS = [ |
||||
#'debug_toolbar.panels.versions.VersionsPanel', |
||||
'debug_toolbar.panels.timer.TimerPanel', |
||||
'debug_toolbar.panels.settings.SettingsPanel', |
||||
'debug_toolbar.panels.headers.HeadersPanel', |
||||
'debug_toolbar.panels.request.RequestPanel', |
||||
'debug_toolbar.panels.sql.SQLPanel', |
||||
'debug_toolbar.panels.staticfiles.StaticFilesPanel', |
||||
'debug_toolbar.panels.templates.TemplatesPanel', |
||||
'debug_toolbar.panels.cache.CachePanel', |
||||
'debug_toolbar.panels.signals.SignalsPanel', |
||||
'debug_toolbar.panels.logging.LoggingPanel', |
||||
'debug_toolbar.panels.redirects.RedirectsPanel', |
||||
] |
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,84 @@ |
||||
server { |
||||
server_name expomap.ru www.expomap.ru; |
||||
# listen 80; |
||||
|
||||
return 301 https://expomap.ru$request_uri; |
||||
} |
||||
|
||||
server { |
||||
listen 176.121.11.162:443 ssl; |
||||
server_name www.expomap.ru; |
||||
|
||||
# ssl on; |
||||
# ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
||||
# ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
||||
|
||||
return 301 https://expomap.ru$request_uri; |
||||
} |
||||
|
||||
server { |
||||
listen 176.121.11.162:443 ssl default_server ; |
||||
server_name expomap.ru ; |
||||
# ssl_stapling on; |
||||
ssl on; |
||||
ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
||||
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
||||
ssl_dhparam /etc/nginx/ssl/dhparam.pem; |
||||
ssl_session_timeout 24h; |
||||
ssl_session_cache shared:SSL:25m; |
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
||||
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; |
||||
ssl_prefer_server_ciphers on; |
||||
add_header Strict-Transport-Security "max-age=31536000;"; |
||||
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:"; |
||||
|
||||
|
||||
client_header_timeout 360s; |
||||
location / { |
||||
# auth_basic "Unauthorized"; |
||||
# auth_basic_user_file /home/www/proj/.htpasswd; |
||||
proxy_pass http://127.0.0.1:8080; |
||||
proxy_redirect off; |
||||
proxy_set_header Host $host; |
||||
proxy_set_header X-Real-IP $remote_addr; |
||||
proxy_set_header X-Forwarded-For $remote_addr; |
||||
include /etc/nginx/geoip_proxy.conf; |
||||
|
||||
client_max_body_size 100m; |
||||
client_body_buffer_size 128k; |
||||
|
||||
proxy_connect_timeout 90; |
||||
proxy_send_timeout 90; |
||||
proxy_read_timeout 90; |
||||
proxy_buffer_size 16k; |
||||
proxy_buffers 256 8k; |
||||
proxy_busy_buffers_size 2000k; |
||||
proxy_temp_file_write_size 2048k; |
||||
} |
||||
|
||||
|
||||
location /965E1EE7949FD639CA0124C8D8C57774.txt { |
||||
root /home/www/proj/; |
||||
} |
||||
|
||||
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html { |
||||
root /home/www/proj/support; |
||||
} |
||||
|
||||
location /static { |
||||
root /home/www/proj; |
||||
} |
||||
location /media { |
||||
root /home/www/proj; |
||||
} |
||||
|
||||
location /templates { |
||||
root /home/www/proj/static; |
||||
} |
||||
location /subdmn { |
||||
root /home/old_files; |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
@ -0,0 +1,31 @@ |
||||
<VirtualHost 127.0.0.1:8080> |
||||
WSGIDaemonProcess www-data display-name=%{GROUP} processes=8 threads=1 |
||||
WSGIProcessGroup www-data |
||||
WSGIScriptAlias / "/home/www/proj/project.wsgi" |
||||
ServerName hit.expomap.ru |
||||
<Directory "/home/www/proj/"> |
||||
Order allow,deny |
||||
Options Indexes FollowSymLinks |
||||
Allow from all |
||||
IndexOptions FancyIndexing |
||||
</Directory> |
||||
|
||||
Alias /media "/home/www/proj/media/" |
||||
Alias /static "/home/www/proj/static/" |
||||
|
||||
|
||||
<Directory "/home/www/proj/media"> |
||||
Order allow,deny |
||||
Options Indexes FollowSymLinks |
||||
Allow from all |
||||
IndexOptions FancyIndexing |
||||
</Directory> |
||||
<Directory "/home/www/proj/static"> |
||||
Order allow,deny |
||||
Options Indexes FollowSymLinks |
||||
Allow from all |
||||
IndexOptions FancyIndexing |
||||
</Directory> |
||||
|
||||
ErrorLog /var/log/apache2/expo.error.log |
||||
</VirtualHost> |
||||
@ -0,0 +1,201 @@ |
||||
<?xml version="1.0" ?> |
||||
<!-- |
||||
Licensed to the Apache Software Foundation (ASF) under one or more |
||||
contributor license agreements. See the NOTICE file distributed with |
||||
this work for additional information regarding copyright ownership. |
||||
The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
(the "License"); you may not use this file except in compliance with |
||||
the License. You may obtain a copy of the License at |
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
||||
Unless required by applicable law or agreed to in writing, software |
||||
distributed under the License is distributed on an "AS IS" BASIS, |
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
See the License for the specific language governing permissions and |
||||
limitations under the License. |
||||
--> |
||||
|
||||
<schema name="default" version="1.4"> |
||||
<types> |
||||
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> |
||||
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/> |
||||
<fieldtype name="binary" class="solr.BinaryField"/> |
||||
|
||||
<!-- Numeric field types that manipulate the value into |
||||
a string value that isn't human-readable in its internal form, |
||||
but with a lexicographic ordering the same as the numeric ordering, |
||||
so that range queries work correctly. --> |
||||
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
||||
|
||||
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
||||
|
||||
<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> |
||||
<!-- A Trie based date field for faster date range queries and date faceting. --> |
||||
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> |
||||
|
||||
<fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/> |
||||
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> |
||||
<fieldtype name="geohash" class="solr.GeoHashField"/> |
||||
|
||||
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
||||
<!-- in this example, we will only use synonyms at query time |
||||
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> |
||||
--> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.StopFilterFactory" |
||||
ignoreCase="true" |
||||
words="stopwords_en.txt" |
||||
enablePositionIncrements="true" |
||||
/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
||||
--> |
||||
<filter class="solr.PorterStemFilterFactory"/> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
||||
<filter class="solr.StopFilterFactory" |
||||
ignoreCase="true" |
||||
words="stopwords_en.txt" |
||||
enablePositionIncrements="true" |
||||
/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
||||
--> |
||||
<filter class="solr.PorterStemFilterFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> |
||||
<analyzer> |
||||
<tokenizer class="solr.WhitespaceTokenizerFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="ngram" class="solr.TextField" > |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" /> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
||||
<filter class="solr.LowerCaseFilterFactory"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
|
||||
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1"> |
||||
<analyzer type="index"> |
||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
||||
<filter class="solr.LowerCaseFilterFactory" /> |
||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
||||
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" /> |
||||
</analyzer> |
||||
<analyzer type="query"> |
||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
||||
<filter class="solr.LowerCaseFilterFactory" /> |
||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
||||
</analyzer> |
||||
</fieldType> |
||||
</types> |
||||
|
||||
<fields> |
||||
<!-- general --> |
||||
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> |
||||
<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> |
||||
<field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/> |
||||
<field name="_version_" type="long" indexed="true" stored="true"/> |
||||
|
||||
<dynamicField name="*_i" type="int" indexed="true" stored="true"/> |
||||
<dynamicField name="*_s" type="string" indexed="true" stored="true"/> |
||||
<dynamicField name="*_l" type="long" indexed="true" stored="true"/> |
||||
<dynamicField name="*_t" type="text_en" indexed="true" stored="true"/> |
||||
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> |
||||
<dynamicField name="*_f" type="float" indexed="true" stored="true"/> |
||||
<dynamicField name="*_d" type="double" indexed="true" stored="true"/> |
||||
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/> |
||||
<dynamicField name="*_p" type="location" indexed="true" stored="true"/> |
||||
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/> |
||||
|
||||
|
||||
<field name="name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="url" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="catalog_name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="catalog_name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="content_auto" type="edge_ngram" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="form_name" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="area_id" type="long" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="city_id" type="long" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="country_id" type="long" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="theme" type="text_en" indexed="true" stored="true" multiValued="true" /> |
||||
|
||||
<field name="tag" type="text_en" indexed="true" stored="true" multiValued="true" /> |
||||
|
||||
<field name="where" type="text_en" indexed="true" stored="true" multiValued="true" /> |
||||
|
||||
<field name="data_end" type="date" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="data_begin" type="date" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="city" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="country" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="parent_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
<field name="parent_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
||||
|
||||
</fields> |
||||
|
||||
<!-- field to use to determine and enforce document uniqueness. --> |
||||
<uniqueKey>id</uniqueKey> |
||||
|
||||
<!-- field for the QueryParser to use when an explicit fieldname is absent --> |
||||
<defaultSearchField>text</defaultSearchField> |
||||
|
||||
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> |
||||
<solrQueryParser defaultOperator="AND"/> |
||||
</schema> |
||||
|
||||
@ -0,0 +1,552 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Django settings for proj project. |
||||
import os |
||||
import django |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
|
||||
|
||||
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__)) |
||||
SITE_ROOT = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0] |
||||
|
||||
DEBUG = False |
||||
|
||||
|
||||
ADMINS = ( |
||||
# ('Your Name', 'your_email@example.com'), |
||||
) |
||||
|
||||
MANAGERS = ADMINS |
||||
|
||||
DATABASES = { |
||||
'default': { |
||||
'ENGINE': 'django.db.backends.mysql', |
||||
'NAME': 'expomap', |
||||
'USER': 'kotzilla', |
||||
'PASSWORD': 'qazedc', |
||||
'HOST': '', |
||||
'PORT': '', |
||||
} |
||||
} |
||||
|
||||
|
||||
CACHES = { |
||||
"default": { |
||||
"BACKEND": "redis_cache.cache.RedisCache", |
||||
"LOCATION": "/tmp/redis.sock", |
||||
"OPTIONS": { |
||||
"CLIENT_CLASS": "redis_cache.client.DefaultClient", |
||||
}, |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
# Hosts/domain names that are valid for this site; required if DEBUG is False |
||||
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts |
||||
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148'] |
||||
|
||||
# Local time zone for this installation. Choices can be found here: |
||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name |
||||
# although not all choices may be available on all operating systems. |
||||
# In a Windows environment this must be set to your system time zone. |
||||
TIME_ZONE = 'UTC' |
||||
|
||||
# Language code for this installation. All choices can be found here: |
||||
# http://www.i18nguy.com/unicode/language-identifiers.html |
||||
LANGUAGE_CODE = 'ru' |
||||
|
||||
DEFAULT_LANGUAGE = 'ru' |
||||
|
||||
LANGUAGES = ( |
||||
('ru', _('Russian')), |
||||
('en', _('English')), |
||||
) |
||||
|
||||
LOCALE_PATHS = ( |
||||
os.path.join(SITE_ROOT, 'locale'), |
||||
) |
||||
|
||||
DEFAULT_CHARSET = 'utf-8' |
||||
|
||||
SITE_ID = 1 |
||||
|
||||
# If you set this to False, Django will make some optimizations so as not |
||||
# to load the internationalization machinery. |
||||
USE_I18N = True |
||||
|
||||
# If you set this to False, Django will not format dates, numbers and |
||||
# calendars according to the current locale. |
||||
USE_L10N = False |
||||
|
||||
# If you set this to False, Django will not use timezone-aware datetimes. |
||||
USE_TZ = False |
||||
|
||||
|
||||
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media/') |
||||
CKEDITOR_UPLOAD_PATH = os.path.join(SITE_ROOT, 'media/upload') |
||||
|
||||
|
||||
CKEDITOR_CONFIGS = { |
||||
'default': { |
||||
'toolbar': 'standart', |
||||
'height': 200, |
||||
'width': 565, |
||||
'resize_enabled' : True, |
||||
'autoGrow_onStartup' : False, |
||||
'autoGrow_bottomSpace' : 300, |
||||
'fillEmptyBlocks' : False, |
||||
'autoParagraph' : False, |
||||
}, |
||||
'newsletters': { |
||||
'toolbar': 'standart', |
||||
'height': 600, |
||||
'width': 750, |
||||
'resize_enabled' : True, |
||||
'autoGrow_onStartup' : False, |
||||
'autoGrow_bottomSpace' : 300, |
||||
'fillEmptyBlocks' : False, |
||||
'autoParagraph' : False, |
||||
}, |
||||
|
||||
} |
||||
|
||||
MEDIA_URL = '/media/' |
||||
|
||||
STATIC_ROOT = os.path.join(SITE_ROOT, 'static') |
||||
|
||||
#STATICFILES_DIRS = ( |
||||
# (os.path.join(SITE_ROOT, 'static')), |
||||
#) |
||||
|
||||
STATIC_URL = '/static/' |
||||
|
||||
STATICFILES_FINDERS = ( |
||||
'django.contrib.staticfiles.finders.FileSystemFinder', |
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
||||
#'django.contrib.staticfiles.finders.DefaultStorageFinder', |
||||
) |
||||
|
||||
# Make this unique, and don't share it with anybody. |
||||
SECRET_KEY = '=yz1@ko%1s8bmel)c84#s*xpxn%4(1e+smdnh*@rdm*5%v!mln' |
||||
|
||||
|
||||
TEMPLATE_CONTEXT_PROCESSORS = ( |
||||
"django.contrib.auth.context_processors.auth", |
||||
"django.core.context_processors.debug", |
||||
"django.core.context_processors.i18n", |
||||
"django.core.context_processors.media", |
||||
"django.core.context_processors.static", |
||||
"django.core.context_processors.tz", |
||||
"django.contrib.messages.context_processors.messages", |
||||
"django.core.context_processors.request", |
||||
'social.apps.django_app.context_processors.backends', |
||||
'social.apps.django_app.context_processors.login_redirect', |
||||
'django_messages.context_processors.inbox', |
||||
"proj.views.expo_context" |
||||
) |
||||
#LOGIN_REDIRECT_URL = '/' |
||||
|
||||
MIDDLEWARE_CLASSES = ( |
||||
# 'django.middleware.cache.UpdateCacheMiddleware', |
||||
'django.contrib.sessions.middleware.SessionMiddleware', |
||||
'solid_i18n.middleware.SolidLocaleMiddleware', |
||||
'django.middleware.common.CommonMiddleware', |
||||
'django.middleware.csrf.CsrfViewMiddleware', |
||||
'django.contrib.auth.middleware.AuthenticationMiddleware', |
||||
'django.contrib.messages.middleware.MessageMiddleware', |
||||
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware', |
||||
# 'django.middleware.cache.FetchFromCacheMiddleware', |
||||
# Uncomment the next line for simple clickjacking protection: |
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
||||
|
||||
|
||||
) |
||||
|
||||
|
||||
ROOT_URLCONF = 'proj.urls' |
||||
|
||||
# Python dotted path to the WSGI application used by Django's runserver. |
||||
WSGI_APPLICATION = 'proj.wsgi.application' |
||||
|
||||
TEMPLATE_DIRS = ( |
||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". |
||||
# Always use forward slashes, even on Windows. |
||||
# Don't forget to use absolute paths, not relative paths. |
||||
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'), |
||||
os.path.join(SITE_ROOT, 'templates/admin'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/accounts'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/article'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/country'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/city'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/company'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/conference'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/directories'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/exposition'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/forms'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/import templates'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/news'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/organiser'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/place_conference'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/place_exposition'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/page'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/photoreport'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/settings'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/seminar'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/service'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/theme'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/translator'), |
||||
os.path.join(SITE_ROOT, 'templates/admin/webinar'), |
||||
|
||||
os.path.join(SITE_ROOT, 'templates/client'), |
||||
os.path.join(SITE_ROOT, 'templates/client/exposition'), |
||||
os.path.join(SITE_ROOT, 'templates/client/photoreport'), |
||||
os.path.join(SITE_ROOT, 'templates/client/includes'), |
||||
os.path.join(SITE_ROOT, 'templates'), |
||||
#os.path.join(SITE_ROOT, 'templates/client/popups'), |
||||
) |
||||
|
||||
AUTH_USER_MODEL = 'accounts.User' |
||||
LOGIN_URL='/' |
||||
#registration info |
||||
ACCOUNT_ACTIVATION_DAYS=2 |
||||
# mail settings |
||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' |
||||
EMAIL_HOST = 'localhost' |
||||
EMAIL_HOST_USER = '' |
||||
EMAIL_HOST_PASSWORD = '' |
||||
EMAIL_USE_TLS = True |
||||
EMAIL_PORT = 25 |
||||
DEFAULT_FROM_EMAIL = "expomap.ru" |
||||
|
||||
|
||||
AUTHENTICATION_BACKENDS = ( |
||||
'social.backends.open_id.OpenIdAuth', |
||||
'social.backends.vk.VKOAuth2', |
||||
'social.backends.facebook.FacebookOAuth2', |
||||
'social.backends.twitter.TwitterOAuth', |
||||
'social.backends.google.GoogleOAuth', |
||||
'social.backends.linkedin.LinkedinOAuth', |
||||
'social.backends.odnoklassniki.OdnoklassnikiOAuth2', |
||||
'social.backends.mailru.MailruOAuth2', |
||||
'django.contrib.auth.backends.ModelBackend', |
||||
) |
||||
|
||||
SOCIAL_AUTH_LOGIN_URL = '/' |
||||
SOCIAL_AUTH_USER_MODEL = 'accounts.User' |
||||
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/logged-in/' |
||||
# The user will be redirected to this URL when a social account is disconnected |
||||
SOCIAL_AUTH_INACTIVE_USER_URL = '/inactive-user/' |
||||
# #Used to redirect the user once the auth process ended successfully. The value of ?next=/foo is used if it was present |
||||
# SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/' |
||||
# #URL where the user will be redirected in case of an error |
||||
# SOCIAL_AUTH_LOGIN_URL = '/login-url/' |
||||
# #Is used as a fallback for LOGIN_ERROR_URL |
||||
# SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/new-users-redirect-url/' |
||||
# # Used to redirect new registered users, will be used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL if defined. |
||||
# Note that ?next=/foo is appended if present, if you want new users to go to next, you’ll need to do it yourself. |
||||
# SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/new-association-redirect-url/' |
||||
# # Like SOCIAL_AUTH_NEW_USER_REDIRECT_URL but for new associated accounts (user is already logged in). |
||||
# Used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL |
||||
# SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/account-disconnected-redirect-url/' |
||||
|
||||
# Inactive users can be redirected to this URL when trying to authenticate. |
||||
# SOCIAL_AUTH_UID_LENGTH = <int> |
||||
# SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = <int> |
||||
# SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = <int> |
||||
# SOCIAL_AUTH_FORCE_EMAIL_VALIDATION = True |
||||
|
||||
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True |
||||
|
||||
SOCIAL_AUTH_PIPELINE = ( |
||||
'social.pipeline.social_auth.social_details', |
||||
'social.pipeline.social_auth.social_uid', |
||||
'functions.pipeline.load_user', |
||||
'social.pipeline.social_auth.auth_allowed', |
||||
'social.pipeline.social_auth.social_user', |
||||
'social.pipeline.user.get_username', |
||||
'functions.pipeline.require_email', |
||||
#'social.pipeline.mail.mail_validation', |
||||
'functions.pipeline.create_user', |
||||
#'social.pipeline.user.create_user', |
||||
'social.pipeline.social_auth.associate_by_email', |
||||
'social.pipeline.social_auth.associate_user', |
||||
'social.pipeline.social_auth.load_extra_data', |
||||
'social.pipeline.user.user_details' |
||||
|
||||
) |
||||
|
||||
REQUIRES_EMAIL_VALIDATION = True |
||||
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'functions.pipeline.SendVerificationEmail' |
||||
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/email_verify_sent/' |
||||
|
||||
|
||||
SOCIAL_AUTH_VK_OAUTH2_KEY = '3393841' |
||||
SOCIAL_AUTH_VK_OAUTH2_SECRET = '2P19EBUEpLZifaabbREv' |
||||
SOCIAL_AUTH_VK_OAUTH2_SCOPE =['email'] |
||||
SOCIAL_AUTH_VK_OAUTH2_PROFILE_EXTRA_PARAMS = { |
||||
'fields': 'email' |
||||
} |
||||
|
||||
SOCIAL_AUTH_FACEBOOK_KEY = '133775720059470' |
||||
SOCIAL_AUTH_FACEBOOK_SECRET = '434edf89c24a290497646a739df656c6' |
||||
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'publish_actions'] |
||||
|
||||
SOCIAL_AUTH_TWITTER_KEY = 'S6NX33FazTcWuqnXQhlOdg' |
||||
SOCIAL_AUTH_TWITTER_SECRET = 'MxUGfySQmLI5kvqSoAtWsGje2eAHQL7Jo8mXuIZ4D0' |
||||
SOCIAL_AUTH_TWITTER_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '1044044901114.apps.googleusercontent.com' |
||||
SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = 'j_McErlPPof88eNrmOXI-ZXI' |
||||
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_MAILRU_OAUTH2_KEY = '697945' |
||||
SOCIAL_AUTH_MAILRU_OAUTH2_SECRET = '343581b9e31961b334532cc1880066e8' |
||||
SOCIAL_AUTH_MAILRU_OAUTH2_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_KEY = 'CBAQDCKIABABABABA' |
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '814CDDCD3E2D2F278EF1591B' |
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = '128007936' |
||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_SCOPE = ['email'] |
||||
|
||||
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd' |
||||
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy' |
||||
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email'] |
||||
|
||||
|
||||
|
||||
INSTALLED_APPS = ( |
||||
'django.contrib.auth', |
||||
'django.contrib.contenttypes', |
||||
'django.contrib.sessions', |
||||
'django.contrib.sites', |
||||
'django.contrib.messages', |
||||
'django.contrib.staticfiles', |
||||
'django.contrib.humanize', |
||||
'django.contrib.sitemaps', |
||||
'haystack', |
||||
#custom modules |
||||
'emencia.django.newsletter', |
||||
'accounts', |
||||
'article', |
||||
'city', |
||||
'company', |
||||
'conference', |
||||
'core', |
||||
'country', |
||||
'directories', |
||||
'expobanner', |
||||
'exposition', |
||||
'file', |
||||
'import_xls', |
||||
'news', |
||||
'note', |
||||
'organiser', |
||||
'place_conference', |
||||
'place_exposition', |
||||
'photoreport', |
||||
'registration', |
||||
'review', |
||||
'seminar', |
||||
'service', |
||||
'settings', |
||||
'theme', |
||||
'translator', |
||||
'webinar', |
||||
'meta', |
||||
#django modules |
||||
'django_crontab', |
||||
'sorl.thumbnail', # for logos |
||||
'photologue', # photogallery |
||||
'sortedm2m', # photologue dependence |
||||
'hvad', # |
||||
'tinymce', # ??? |
||||
'ckeditor', # wysiwig editor in admin |
||||
'django_messages', # messages |
||||
'bitfield', |
||||
'djutils', # ?? |
||||
'pytils', # ?? |
||||
'pymorphy', # ?? |
||||
'password_reset', # reset password |
||||
'social.apps.django_app.default', # social auth |
||||
'core', |
||||
'specialist_catalog', |
||||
'south', |
||||
) |
||||
|
||||
CRONJOBS = [ |
||||
('8 * * * *', 'django.core.management.call_command', ['send_newsletter']), |
||||
|
||||
('0 * * * *', 'django.core.management.call_command', ['update_index', 'conference', '--remove', '--age=6']), |
||||
('5 * * * *', 'django.core.management.call_command', ['update_index', 'exposition', '--remove', '--age=6']), |
||||
('0 1,13 * * *', 'django.core.management.call_command', ['update_index', 'place_exposition', '--remove', '--age=24']), |
||||
('0 3 * * *', 'django.core.management.call_command', ['update_index', 'company', '--remove', '--age=48']), |
||||
('0 4 * * *', 'django.core.management.call_command', ['update_index', 'theme', '--remove', '--age=48']), |
||||
('0 5 * * * ', 'django.core.management.call_command', ['update_index', 'tag', '--remove', '--age=48']), |
||||
('0 6 * * *', 'django.core.management.call_command', ['update_index', 'country', '--remove', '--age=48']), |
||||
('0 7 * * *', 'django.core.management.call_command', ['update_index', 'city', '--remove', '--age=48']), |
||||
|
||||
('10 * * * *', 'django.core.management.call_command', ['banner_log_update']), |
||||
('20 2,14 * * *', 'django.core.management.call_command', ['banner_log_check_previous_day']), |
||||
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']), |
||||
|
||||
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']), |
||||
('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']), |
||||
|
||||
] |
||||
|
||||
PYMORPHY_DICTS = { |
||||
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' }, |
||||
} |
||||
|
||||
# search backend |
||||
HAYSTACK_CONNECTIONS = { |
||||
'default': { |
||||
'ENGINE': 'haystack.backends.solr_backend.SolrEngine', |
||||
'URL': 'http://localhost:8983/solr' |
||||
# ...or for multicore... |
||||
# 'URL': 'http://127.0.0.1:8983/solr/mysite', |
||||
}, |
||||
} |
||||
|
||||
|
||||
# A sample logging configuration. The only tangible logging |
||||
# performed by this configuration is to send an email to |
||||
# the site admins on every HTTP 500 error when DEBUG=False. |
||||
# See http://docs.djangoproject.com/en/dev/topics/logging for |
||||
# more details on how to customize your logging configuration. |
||||
LOGGING = { |
||||
'version': 1, |
||||
'disable_existing_loggers': False, |
||||
'filters': { |
||||
'require_debug_false': { |
||||
'()': 'django.utils.log.RequireDebugFalse' |
||||
} |
||||
}, |
||||
'handlers': { |
||||
'mail_admins': { |
||||
'level': 'ERROR', |
||||
'filters': ['require_debug_false'], |
||||
'class': 'django.utils.log.AdminEmailHandler' |
||||
} |
||||
}, |
||||
'loggers': { |
||||
'django.request': { |
||||
'handlers': ['mail_admins'], |
||||
'level': 'ERROR', |
||||
'propagate': True, |
||||
}, |
||||
} |
||||
} |
||||
|
||||
# TODO automate crons |
||||
""" |
||||
# update search indexes |
||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index conference --remove --age=6 |
||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index exposition --remove --age=6 |
||||
0 1,13 * * * /usr/bin/python /var/www/proj/manage.py update_index place_exposition --remove --age=24 |
||||
0 3 * * * /usr/bin/python /var/www/proj/manage.py update_index company --remove --age=48 |
||||
0 4 * * * /usr/bin/python /var/www/proj/manage.py update_index theme --remove --age=48 |
||||
0 5 * * * /usr/bin/python /var/www/proj/manage.py update_index tag --remove --age=48 |
||||
0 6 * * * /usr/bin/python /var/www/proj/manage.py update_index country --remove --age=48 |
||||
0 7 * * * /usr/bin/python /var/www/proj/manage.py update_index city --remove --age=48 |
||||
# update banner logs |
||||
10 * * * * /usr/bin/python /var/www/proj/manage.py banner_log_update |
||||
20 2,14 * * * /usr/bin/python /var/www/proj/manage.py banner_log_check_previous_day |
||||
# update hotels prices |
||||
20 1 * * 6 /usr/bin/python /var/www/proj/manage.py update_hotels_price |
||||
# newsletter |
||||
20 * * * * /usr/bin/python /var/www/proj/manage.py send_newsletter |
||||
40 6 * * * /usr/bin/python /var/www/proj/manage.py newsletter_contacts_remove_notactivated |
||||
|
||||
""" |
||||
|
||||
THUMBNAIL_DEBUG = DEBUG |
||||
|
||||
CALLBACK_EMAIL = 'kotzilla@ukr.net' |
||||
|
||||
BOOKING_AID = '333667' |
||||
try: |
||||
from functions.overrides import SeoPaginator as Paginator |
||||
except ImportError: |
||||
from django.core.paginator import Paginator |
||||
DEFAULT_PAGINATOR = Paginator |
||||
ADMIN_PAGINATION = 20 |
||||
CLIENT_PAGINATION = 15 |
||||
|
||||
TEMPLATE_DEBUG = DEBUG |
||||
NO_LOGO = '/static/client/img/no-logo.png' |
||||
|
||||
# events settings |
||||
CURRENCY = ('RUB', 'USD', 'EUR', 'RMB', 'GBP', 'AED', 'SGD', 'TRY', 'CZK', 'CHF', 'SEK', 'LKR', 'UAH', 'IDR', 'PLN','JPY') |
||||
BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consumers', _(u'Специалисты и потребители')), |
||||
('general public', _(u'Широкая публика'))) |
||||
|
||||
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')}, |
||||
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, |
||||
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, |
||||
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, |
||||
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, |
||||
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} |
||||
|
||||
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64] |
||||
|
||||
|
||||
CLIENT_DATE_FORMAT = ["%d.%m.%Y"] |
||||
|
||||
# cache pages in random seconds. random in this range |
||||
CACHE_RANGE = [60, 120] |
||||
|
||||
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup' |
||||
|
||||
try: |
||||
from local import * |
||||
except ImportError, e: |
||||
pass |
||||
# save sessions in redis |
||||
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' |
||||
if not DEBUG: |
||||
# cache template loading |
||||
TEMPLATE_LOADERS = ( |
||||
('django.template.loaders.cached.Loader', ( |
||||
'django.template.loaders.filesystem.Loader', |
||||
'django.template.loaders.app_directories.Loader', |
||||
)), |
||||
) |
||||
else: |
||||
TEMPLATE_LOADERS = ( |
||||
'django.template.loaders.filesystem.Loader', |
||||
'django.template.loaders.app_directories.Loader', |
||||
) |
||||
|
||||
# debug_toolbar settings |
||||
|
||||
if DEBUG: |
||||
DEBUG_TOOLBAR_PATCH_SETTINGS = False |
||||
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46') |
||||
|
||||
MIDDLEWARE_CLASSES += ( |
||||
'debug_toolbar.middleware.DebugToolbarMiddleware', |
||||
) |
||||
|
||||
INSTALLED_APPS += ( |
||||
'debug_toolbar', |
||||
) |
||||
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'), |
||||
DEBUG_TOOLBAR_PANELS = [ |
||||
#'debug_toolbar.panels.versions.VersionsPanel', |
||||
'debug_toolbar.panels.timer.TimerPanel', |
||||
'debug_toolbar.panels.settings.SettingsPanel', |
||||
'debug_toolbar.panels.headers.HeadersPanel', |
||||
'debug_toolbar.panels.request.RequestPanel', |
||||
'debug_toolbar.panels.sql.SQLPanel', |
||||
'debug_toolbar.panels.staticfiles.StaticFilesPanel', |
||||
'debug_toolbar.panels.templates.TemplatesPanel', |
||||
'debug_toolbar.panels.cache.CachePanel', |
||||
'debug_toolbar.panels.signals.SignalsPanel', |
||||
'debug_toolbar.panels.logging.LoggingPanel', |
||||
'debug_toolbar.panels.redirects.RedirectsPanel', |
||||
] |
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in new issue