Diff of /qiita_pet/webserver.py [000000] .. [879b32]

Switch to unified view

a b/qiita_pet/webserver.py
1
# -----------------------------------------------------------------------------
2
# Copyright (c) 2014--, The Qiita Development Team.
3
#
4
# Distributed under the terms of the BSD 3-clause License.
5
#
6
# The full license is in the file LICENSE, distributed with this software.
7
# -----------------------------------------------------------------------------
8
9
# login code modified from https://gist.github.com/guillaumevincent/4771570
10
import tornado.auth
11
import tornado.escape
12
import tornado.web
13
import tornado.websocket
14
from os.path import dirname, join
15
from base64 import b64encode
16
from uuid import uuid4
17
18
from qiita_core.qiita_settings import qiita_config
19
from qiita_core.util import is_test_environment
20
from qiita_pet.handlers.base_handlers import (
21
    MainHandler, NoPageHandler, IFrame)
22
from qiita_pet.handlers.auth_handlers import (
23
    AuthCreateHandler, AuthLoginHandler, AuthLogoutHandler, AuthVerifyHandler)
24
from qiita_pet.handlers.user_handlers import (
25
    ChangeForgotPasswordHandler, ForgotPasswordHandler, UserProfileHandler,
26
    UserMessagesHander, UserJobs, PurgeUsersAJAXHandler, PurgeUsersHandler)
27
from qiita_pet.handlers.admin_processing_job import (
28
    AdminProcessingJob, AJAXAdminProcessingJobListing, SampleValidation)
29
from qiita_pet.handlers.analysis_handlers import (
30
    ListAnalysesHandler, AnalysisSummaryAJAX, SelectedSamplesHandler,
31
    AnalysisHandler, AnalysisGraphHandler, CreateAnalysisHandler,
32
    AnalysisJobsHandler, ShareAnalysisAJAX)
33
from qiita_pet.handlers.study_handlers import (
34
    StudyIndexHandler, StudyBaseInfoAJAX, SampleTemplateHandler,
35
    SampleTemplateOverviewHandler, SampleTemplateColumnsHandler,
36
    StudyEditHandler, ListStudiesHandler, ListStudiesAJAX, EBISubmitHandler,
37
    CreateStudyAJAX, ShareStudyAJAX, StudyApprovalList, ArtifactGraphAJAX,
38
    VAMPSHandler, Study, StudyTags, StudyGetTags,
39
    ListCommandsHandler, ListOptionsHandler, PrepTemplateSummaryAJAX,
40
    PrepTemplateAJAX, NewArtifactHandler, SampleAJAX, StudyDeleteAjax,
41
    ArtifactAdminAJAX, NewPrepTemplateAjax, DataTypesMenuAJAX, StudyFilesAJAX,
42
    ArtifactGetSamples, ArtifactGetInfo, WorkflowHandler, AnalysesAjax,
43
    WorkflowRunHandler, AddDefaultWorkflowHandler, JobAJAX,
44
    AutocompleteHandler)
45
from qiita_pet.handlers.artifact_handlers import (
46
    ArtifactSummaryAJAX, ArtifactAJAX, ArtifactSummaryHandler)
47
from qiita_pet.handlers.websocket_handlers import (
48
    MessageHandler, SelectedSocketHandler, SelectSamplesHandler)
49
from qiita_pet.handlers.logger_handlers import LogEntryViewerHandler
50
from qiita_pet.handlers.upload import (
51
    UploadFileHandler, StudyUploadFileHandler, StudyUploadViaRemote)
52
from qiita_pet.handlers.stats import StatsHandler
53
from qiita_pet.handlers.resources import ResourcesHandler
54
from qiita_pet.handlers.download import (
55
    DownloadHandler, DownloadStudyBIOMSHandler, DownloadRelease,
56
    DownloadRawData, DownloadEBISampleAccessions, DownloadEBIPrepAccessions,
57
    DownloadUpload, DownloadPublicHandler, DownloadPublicArtifactHandler,
58
    DownloadSampleInfoPerPrep, DownloadPrivateArtifactHandler,
59
    DownloadDataReleaseFromPrep)
60
from qiita_pet.handlers.prep_template import (
61
    PrepTemplateHandler, PrepTemplateGraphHandler, PrepTemplateJobHandler)
62
from qiita_pet.handlers.ontology import OntologyHandler
63
from qiita_pet.handlers.software import SoftwareHandler, WorkflowsHandler
64
from qiita_db.handlers.processing_job import (
65
    JobHandler, HeartbeatHandler, ActiveStepHandler, CompleteHandler,
66
    ProcessingJobAPItestHandler)
67
from qiita_db.handlers.artifact import (
68
    ArtifactHandler, ArtifactAPItestHandler, ArtifactTypeHandler,
69
    APIArtifactHandler)
70
from qiita_db.handlers.sample_information import SampleInfoDBHandler
71
from qiita_db.handlers.user import UserInfoDBHandler, UsersListDBHandler
72
from qiita_db.handlers.prep_template import (
73
    PrepTemplateDataHandler, PrepTemplateAPItestHandler,
74
    PrepTemplateAPIHandler, PrepTemplateDBHandler)
75
from qiita_db.handlers.oauth2 import TokenAuthHandler
76
from qiita_db.handlers.reference import ReferenceHandler
77
from qiita_db.handlers.core import ResetAPItestHandler
78
from qiita_db.handlers.plugin import (
79
    PluginHandler, CommandHandler, CommandListHandler, CommandActivateHandler,
80
    ReloadPluginAPItestHandler)
81
from qiita_db.handlers.analysis import APIAnalysisMetadataHandler
82
from qiita_db.handlers.archive import APIArchiveObservations
83
from qiita_db.handlers.studies import APIStudiesListing
84
from qiita_db.util import get_mountpoint
85
from qiita_pet.handlers.rest import ENDPOINTS as REST_ENDPOINTS
86
from qiita_pet.handlers.qiita_redbiom import RedbiomPublicSearch
87
from qiita_pet.handlers.public import PublicHandler
88
89
if qiita_config.portal == "QIITA":
90
    from qiita_pet.handlers.portal import (
91
        StudyPortalHandler, StudyPortalAJAXHandler)
92
93
94
DIRNAME = dirname(__file__)
95
STATIC_PATH = join(DIRNAME, "static")
96
TEMPLATE_PATH = join(DIRNAME, "templates")  # base folder for webpages
97
_, RES_PATH = get_mountpoint('job')[0]
98
COOKIE_SECRET = b64encode(uuid4().bytes + uuid4().bytes)
99
DEBUG = qiita_config.test_environment
100
101
102
_vendor_js = join(STATIC_PATH, 'vendor', 'js')
103
104
105
class Application(tornado.web.Application):
106
    def __init__(self):
107
        handlers = [
108
            (r"/", MainHandler),
109
            (r"/auth/login/", AuthLoginHandler),
110
            (r"/auth/logout/", AuthLogoutHandler),
111
            (r"/auth/create/", AuthCreateHandler),
112
            (r"/auth/verify/(.*)", AuthVerifyHandler),
113
            (r"/auth/forgot/", ForgotPasswordHandler),
114
            (r"/auth/reset/(.*)", ChangeForgotPasswordHandler),
115
            (r"/profile/", UserProfileHandler),
116
            (r"/user/messages/", UserMessagesHander),
117
            (r"/user/jobs/", UserJobs),
118
            (r"/static/(.*)", tornado.web.StaticFileHandler,
119
             {"path": STATIC_PATH}),
120
            # Analysis handlers
121
            (r"/analysis/list/", ListAnalysesHandler),
122
            (r"/analysis/dflt/sumary/", AnalysisSummaryAJAX),
123
            (r"/analysis/create/", CreateAnalysisHandler),
124
            (r"/analysis/selected/", SelectedSamplesHandler),
125
            (r"/analysis/selected/socket/", SelectedSocketHandler),
126
            (r"/analysis/description/(.*)/graph/", AnalysisGraphHandler),
127
            (r"/analysis/description/(.*)/jobs/", AnalysisJobsHandler),
128
            (r"/analysis/description/(.*)/", AnalysisHandler),
129
            (r"/analysis/sharing/", ShareAnalysisAJAX),
130
            (r"/artifact/samples/", ArtifactGetSamples),
131
            (r"/artifact/info/", ArtifactGetInfo),
132
            (r"/consumer/", MessageHandler),
133
            (r"/admin/error/", LogEntryViewerHandler),
134
            (r"/admin/approval/", StudyApprovalList),
135
            (r"/admin/artifact/", ArtifactAdminAJAX),
136
            (r"/admin/processing_jobs/", AdminProcessingJob),
137
            (r"/admin/processing_jobs/list", AJAXAdminProcessingJobListing),
138
            (r"/admin/sample_validation/", SampleValidation),
139
            (r"/admin/purge_users/", PurgeUsersHandler),
140
            (r"/admin/purge_usersAjax/", PurgeUsersAJAXHandler),
141
            (r"/admin/resources/", ResourcesHandler),
142
            (r"/ebi_submission/(.*)", EBISubmitHandler),
143
            # Study handlers
144
            (r"/study/create/", StudyEditHandler),
145
            (r"/study/edit/(.*)", StudyEditHandler),
146
            (r"/study/list/", ListStudiesHandler),
147
            (r"/study/process/commands/options/", ListOptionsHandler),
148
            (r"/study/process/commands/", ListCommandsHandler),
149
            (r"/study/process/workflow/default/", AddDefaultWorkflowHandler),
150
            (r"/study/process/workflow/run/", WorkflowRunHandler),
151
            (r"/study/process/workflow/", WorkflowHandler),
152
            (r"/study/process/job/", JobAJAX),
153
            (r"/study/list/socket/", SelectSamplesHandler),
154
            (r"/study/list_studies/(.*)", ListStudiesAJAX),
155
            (r"/study/new_artifact/", NewArtifactHandler),
156
            (r"/study/files/", StudyFilesAJAX),
157
            (r"/study/sharing/", ShareStudyAJAX),
158
            (r"/study/sharing/autocomplete/", AutocompleteHandler),
159
            (r"/study/new_prep_template/", NewPrepTemplateAjax),
160
            (r"/study/analyses/", AnalysesAjax),
161
            (r"/study/tags/(.*)", StudyTags),
162
            (r"/study/get_tags/", StudyGetTags),
163
            (r"/study/([0-9]+)$", Study),
164
            # Artifact handlers
165
            (r"/artifact/graph/", ArtifactGraphAJAX),
166
            (r"/artifact/(.*)/summary/", ArtifactSummaryAJAX),
167
            (r"/artifact/html_summary/(.*)", ArtifactSummaryHandler,
168
             {"path": qiita_config.base_data_dir}),
169
            (r"/artifact/(.*)/", ArtifactAJAX),
170
            # Prep template handlers
171
            (r"/prep_template/", PrepTemplateHandler),
172
            (r"/prep_template/(.*)/graph/", PrepTemplateGraphHandler),
173
            (r"/prep_template/(.*)/jobs/", PrepTemplateJobHandler),
174
            (r"/ontology/", OntologyHandler),
175
176
            # ORDER FOR /study/description/ SUBPAGES HERE MATTERS.
177
            # Same reasoning as below. /study/description/(.*) should be last.
178
            (r"/study/description/sample_template/overview/",
179
             SampleTemplateOverviewHandler),
180
            (r"/study/description/sample_template/columns/",
181
             SampleTemplateColumnsHandler),
182
            (r"/study/description/sample_template/", SampleTemplateHandler),
183
            (r"/study/description/sample_summary/", SampleAJAX),
184
            (r"/study/description/prep_summary/", PrepTemplateSummaryAJAX),
185
            (r"/study/description/prep_template/", PrepTemplateAJAX),
186
            (r"/study/description/baseinfo/", StudyBaseInfoAJAX),
187
            (r"/study/description/data_type_menu/", DataTypesMenuAJAX),
188
            (r"/study/description/(.*)", StudyIndexHandler),
189
            (r"/study/delete/", StudyDeleteAjax),
190
            (r"/study/upload/remote/(.*)", StudyUploadViaRemote),
191
            (r"/study/upload/(.*)", StudyUploadFileHandler),
192
            (r"/upload/", UploadFileHandler),
193
            (r"/check_study/", CreateStudyAJAX),
194
            (r"/stats/", StatsHandler),
195
            (r"/software/", SoftwareHandler),
196
            (r"/workflows/", WorkflowsHandler),
197
            (r"/download/(.*)", DownloadHandler),
198
            (r"/download_data_release_from_prep/(.*)",
199
                DownloadDataReleaseFromPrep),
200
            (r"/download_study_bioms/(.*)", DownloadStudyBIOMSHandler),
201
            (r"/download_raw_data/(.*)", DownloadRawData),
202
            (r"/download_ebi_accessions/samples/(.*)",
203
                DownloadEBISampleAccessions),
204
            (r"/download_sample_info_per_prep/(.*)",
205
                DownloadSampleInfoPerPrep),
206
            (r"/download_ebi_accessions/experiments/(.*)",
207
                DownloadEBIPrepAccessions),
208
            (r"/download_upload/(.*)", DownloadUpload),
209
            (r"/release/download/(.*)", DownloadRelease),
210
            (r"/public_download/", DownloadPublicHandler),
211
            (r"/public_artifact_download/", DownloadPublicArtifactHandler),
212
            (r"/private_download/(.*)", DownloadPrivateArtifactHandler),
213
            (r"/public/", PublicHandler),
214
            (r"/vamps/(.*)", VAMPSHandler),
215
            (r"/redbiom/(.*)", RedbiomPublicSearch),
216
            (r"/iframe/", IFrame),
217
            # Plugin handlers - the order matters here so do not change
218
            # qiita_db/jobs/(.*) should go after any of the
219
            # qiita_db/jobs/(.*)/XXXX because otherwise it will match the
220
            # regular expression and the qiita_db/jobs/(.*)/XXXX will never
221
            # be hit.
222
            (r"/qiita_db/authenticate/", TokenAuthHandler),
223
            (r"/qiita_db/jobs/(.*)/heartbeat/", HeartbeatHandler),
224
            (r"/qiita_db/jobs/(.*)/step/", ActiveStepHandler),
225
            (r"/qiita_db/jobs/(.*)/complete/", CompleteHandler),
226
            (r"/qiita_db/jobs/(.*)", JobHandler),
227
            (r"/qiita_db/artifacts/types/", ArtifactTypeHandler),
228
            (r"/qiita_db/artifacts/(.*)/", ArtifactHandler),
229
            (r"/qiita_db/artifact/", APIArtifactHandler),
230
            (r"/qiita_db/users/", UsersListDBHandler),
231
            (r"/qiita_db/user/(.*)/data/", UserInfoDBHandler),
232
            (r"/qiita_db/sample_information/(.*)/data/", SampleInfoDBHandler),
233
            (r"/qiita_db/prep_template/(.*)/data/", PrepTemplateDataHandler),
234
            (r"/qiita_db/prep_template/(.*)/", PrepTemplateDBHandler),
235
            (r"/qiita_db/prep_template/", PrepTemplateAPIHandler),
236
            (r"/qiita_db/references/(.*)/", ReferenceHandler),
237
            (r"/qiita_db/plugins/(.*)/(.*)/commands/(.*)/activate/",
238
             CommandActivateHandler),
239
            (r"/qiita_db/plugins/(.*)/(.*)/commands/(.*)/", CommandHandler),
240
            (r"/qiita_db/plugins/(.*)/(.*)/commands/", CommandListHandler),
241
            (r"/qiita_db/plugins/(.*)/(.*)/", PluginHandler),
242
            (r"/qiita_db/analysis/(.*)/metadata/", APIAnalysisMetadataHandler),
243
            (r"/qiita_db/archive/observations/", APIArchiveObservations),
244
            (r"/qiita_db/studies/(.*)", APIStudiesListing)
245
        ]
246
247
        # rest endpoints
248
        handlers.extend(REST_ENDPOINTS)
249
250
        if qiita_config.portal == "QIITA":
251
            # Add portals editing pages only on main portal
252
            portals = [
253
                (r"/admin/portals/studies/", StudyPortalHandler),
254
                (r"/admin/portals/studiesAJAX/", StudyPortalAJAXHandler)
255
            ]
256
            handlers.extend(portals)
257
258
        if is_test_environment():
259
            # We add the endpoints for testing plugins
260
            test_handlers = [
261
                (r"/apitest/processing_job/", ProcessingJobAPItestHandler),
262
                (r"/apitest/reset/", ResetAPItestHandler),
263
                (r"/apitest/prep_template/", PrepTemplateAPItestHandler),
264
                (r"/apitest/artifact/", ArtifactAPItestHandler),
265
                (r"/apitest/reload_plugins/", ReloadPluginAPItestHandler)
266
            ]
267
            handlers.extend(test_handlers)
268
269
        # 404 PAGE MUST BE LAST IN THIS LIST!
270
        handlers.append((r".*", NoPageHandler))
271
272
        settings = {
273
            "template_path": TEMPLATE_PATH,
274
            "debug": DEBUG,
275
            "cookie_secret": qiita_config.cookie_secret,
276
            "login_url": "%s/auth/login/" % qiita_config.portal_dir,
277
        }
278
        tornado.web.Application.__init__(self, handlers, **settings)