ruote 0.9.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.txt +24 -0
- data/bin/validate-workflow.rb +89 -0
- data/examples/about_state.rb +81 -0
- data/examples/bigflow.rb +19 -0
- data/examples/csv_weather.rb +23 -0
- data/examples/engine_template.rb +247 -0
- data/examples/flowtracing.rb +24 -0
- data/examples/homeworkreview.rb +68 -0
- data/examples/kotoba.rb +22 -0
- data/examples/mano_tracker.rb +172 -0
- data/examples/openwferu.rb +58 -0
- data/examples/quotereporter.rb +157 -0
- data/examples/scheduler_cron_usage.rb +48 -0
- data/examples/scheduler_usage.rb +56 -0
- data/lib/openwfe.rb +41 -0
- data/lib/openwfe/contextual.rb +111 -0
- data/lib/openwfe/def.rb +46 -0
- data/lib/openwfe/engine.rb +37 -0
- data/lib/openwfe/engine/engine.rb +756 -0
- data/lib/openwfe/engine/expool_methods.rb +172 -0
- data/lib/openwfe/engine/file_persisted_engine.rb +105 -0
- data/lib/openwfe/engine/participant_methods.rb +133 -0
- data/lib/openwfe/engine/status_methods.rb +353 -0
- data/lib/openwfe/engine/update_exp_methods.rb +112 -0
- data/lib/openwfe/exceptions.rb +51 -0
- data/lib/openwfe/expool/errorjournal.rb +476 -0
- data/lib/openwfe/expool/expressionpool.rb +1144 -0
- data/lib/openwfe/expool/expstorage.rb +403 -0
- data/lib/openwfe/expool/history.rb +174 -0
- data/lib/openwfe/expool/journal.rb +224 -0
- data/lib/openwfe/expool/journal_replay.rb +321 -0
- data/lib/openwfe/expool/parser.rb +242 -0
- data/lib/openwfe/expool/representation.rb +121 -0
- data/lib/openwfe/expool/threadedexpstorage.rb +188 -0
- data/lib/openwfe/expool/wfidgen.rb +388 -0
- data/lib/openwfe/expool/yamlexpstorage.rb +224 -0
- data/lib/openwfe/expressions/condition.rb +244 -0
- data/lib/openwfe/expressions/environment.rb +246 -0
- data/lib/openwfe/expressions/expressionmap.rb +258 -0
- data/lib/openwfe/expressions/fe_cancel.rb +109 -0
- data/lib/openwfe/expressions/fe_command.rb +241 -0
- data/lib/openwfe/expressions/fe_concurrence.rb +662 -0
- data/lib/openwfe/expressions/fe_cron.rb +259 -0
- data/lib/openwfe/expressions/fe_cursor.rb +259 -0
- data/lib/openwfe/expressions/fe_define.rb +192 -0
- data/lib/openwfe/expressions/fe_do.rb +168 -0
- data/lib/openwfe/expressions/fe_equals.rb +291 -0
- data/lib/openwfe/expressions/fe_filter.rb +129 -0
- data/lib/openwfe/expressions/fe_filter_definition.rb +168 -0
- data/lib/openwfe/expressions/fe_fqv.rb +250 -0
- data/lib/openwfe/expressions/fe_if.rb +303 -0
- data/lib/openwfe/expressions/fe_iterator.rb +145 -0
- data/lib/openwfe/expressions/fe_listen.rb +371 -0
- data/lib/openwfe/expressions/fe_losfor.rb +111 -0
- data/lib/openwfe/expressions/fe_misc.rb +421 -0
- data/lib/openwfe/expressions/fe_participant.rb +269 -0
- data/lib/openwfe/expressions/fe_reserve.rb +212 -0
- data/lib/openwfe/expressions/fe_save.rb +274 -0
- data/lib/openwfe/expressions/fe_sequence.rb +117 -0
- data/lib/openwfe/expressions/fe_set.rb +139 -0
- data/lib/openwfe/expressions/fe_sleep.rb +166 -0
- data/lib/openwfe/expressions/fe_step.rb +159 -0
- data/lib/openwfe/expressions/fe_subprocess.rb +168 -0
- data/lib/openwfe/expressions/fe_timeout.rb +127 -0
- data/lib/openwfe/expressions/fe_wait.rb +78 -0
- data/lib/openwfe/expressions/fe_when.rb +142 -0
- data/lib/openwfe/expressions/filter.rb +104 -0
- data/lib/openwfe/expressions/flowexpression.rb +847 -0
- data/lib/openwfe/expressions/iterator.rb +221 -0
- data/lib/openwfe/expressions/merge.rb +84 -0
- data/lib/openwfe/expressions/raw.rb +547 -0
- data/lib/openwfe/expressions/rprocdef.rb +375 -0
- data/lib/openwfe/expressions/time.rb +333 -0
- data/lib/openwfe/expressions/timeout.rb +178 -0
- data/lib/openwfe/expressions/value.rb +126 -0
- data/lib/openwfe/filterdef.rb +259 -0
- data/lib/openwfe/flowexpressionid.rb +357 -0
- data/lib/openwfe/listeners/listener.rb +97 -0
- data/lib/openwfe/listeners/listeners.rb +139 -0
- data/lib/openwfe/listeners/socketlisteners.rb +272 -0
- data/lib/openwfe/logging.rb +122 -0
- data/lib/openwfe/omixins.rb +95 -0
- data/lib/openwfe/orest/controlclient.rb +119 -0
- data/lib/openwfe/orest/definitions.rb +113 -0
- data/lib/openwfe/orest/exception.rb +60 -0
- data/lib/openwfe/orest/oldrestservlet.rb +279 -0
- data/lib/openwfe/orest/osocket.rb +148 -0
- data/lib/openwfe/orest/restclient.rb +176 -0
- data/lib/openwfe/orest/workitem.rb +206 -0
- data/lib/openwfe/orest/worklistclient.rb +272 -0
- data/lib/openwfe/orest/xmlcodec.rb +670 -0
- data/lib/openwfe/participants.rb +38 -0
- data/lib/openwfe/participants/enoparticipants.rb +230 -0
- data/lib/openwfe/participants/participant.rb +141 -0
- data/lib/openwfe/participants/participantmap.rb +249 -0
- data/lib/openwfe/participants/participants.rb +407 -0
- data/lib/openwfe/participants/soapparticipants.rb +135 -0
- data/lib/openwfe/participants/socketparticipants.rb +202 -0
- data/lib/openwfe/participants/storeparticipants.rb +254 -0
- data/lib/openwfe/rudefinitions.rb +130 -0
- data/lib/openwfe/service.rb +103 -0
- data/lib/openwfe/storage/yamlcustom.rb +106 -0
- data/lib/openwfe/storage/yamlfilestorage.rb +245 -0
- data/lib/openwfe/tools/flowtracer.rb +81 -0
- data/lib/openwfe/util/dollar.rb +217 -0
- data/lib/openwfe/util/irb.rb +86 -0
- data/lib/openwfe/util/observable.rb +144 -0
- data/lib/openwfe/util/ometa.rb +62 -0
- data/lib/openwfe/util/workqueue.rb +124 -0
- data/lib/openwfe/util/xml.rb +418 -0
- data/lib/openwfe/utils.rb +554 -0
- data/lib/openwfe/version.rb +37 -0
- data/lib/openwfe/workitem.rb +499 -0
- data/lib/openwfe/worklist/oldrest.rb +244 -0
- data/lib/openwfe/worklist/storelocks.rb +293 -0
- data/lib/openwfe/worklist/storeparticipant.rb +44 -0
- data/lib/openwfe/worklist/worklist.rb +297 -0
- data/test/README.txt +27 -0
- data/test/back_0916_test.rb +111 -0
- data/test/bm/bm_1_xml_vs_prog.rb +56 -0
- data/test/bm/bm_2_step.rb +109 -0
- data/test/bm/ft_0f_5ms.rb +35 -0
- data/test/bm/ft_26_load.rb +210 -0
- data/test/bm/ft_26b_load.rb +86 -0
- data/test/bm/ft_26c_load.rb +97 -0
- data/test/bm/ft_26d_load.rb +97 -0
- data/test/bm/ft_recu.rb +71 -0
- data/test/clone_test.rb +122 -0
- data/test/concurrence_test.rb +77 -0
- data/test/condition_test.rb +155 -0
- data/test/console_test.rb +12 -0
- data/test/cron_ltest.rb +15 -0
- data/test/description_test.rb +87 -0
- data/test/eno_test.rb +76 -0
- data/test/expmap_test.rb +54 -0
- data/test/expool_20031219_0916.tgz +0 -0
- data/test/fe_lookup_att_test.rb +62 -0
- data/test/fei_test.rb +181 -0
- data/test/file_persisted_engine_test.rb +64 -0
- data/test/file_persistence_test.rb +134 -0
- data/test/filep_cancel_test.rb +123 -0
- data/test/filter_test.rb +109 -0
- data/test/flowtestbase.rb +351 -0
- data/test/ft_0.rb +68 -0
- data/test/ft_0b_sequence.rb +36 -0
- data/test/ft_0c_testname.rb +33 -0
- data/test/ft_0d_participant.rb +30 -0
- data/test/ft_0e_multibody.rb +34 -0
- data/test/ft_10_loop.rb +134 -0
- data/test/ft_11_ppd.rb +415 -0
- data/test/ft_11b_ppd.rb +54 -0
- data/test/ft_12_blockparticipant.rb +97 -0
- data/test/ft_13_eno.rb +52 -0
- data/test/ft_14_subprocess.rb +88 -0
- data/test/ft_14b_subprocess.rb +192 -0
- data/test/ft_14c_subprocess.rb +68 -0
- data/test/ft_15_iterator.rb +216 -0
- data/test/ft_15b_iterator.rb +74 -0
- data/test/ft_16_fqv.rb +73 -0
- data/test/ft_17_condition.rb +84 -0
- data/test/ft_18_pname.rb +56 -0
- data/test/ft_1_unset.rb +175 -0
- data/test/ft_1b_unset.rb +39 -0
- data/test/ft_20_cron.rb +53 -0
- data/test/ft_21_cron.rb +87 -0
- data/test/ft_21b_cron_pause.rb +82 -0
- data/test/ft_22_history.rb +74 -0
- data/test/ft_23_when.rb +77 -0
- data/test/ft_23b_when.rb +70 -0
- data/test/ft_23c_wait.rb +80 -0
- data/test/ft_23d_cww.rb +58 -0
- data/test/ft_24_def.rb +44 -0
- data/test/ft_25_cancel.rb +89 -0
- data/test/ft_27_getflowpos.rb +147 -0
- data/test/ft_28_fileparticipant.rb +63 -0
- data/test/ft_29_httprb.rb +106 -0
- data/test/ft_2_concurrence.rb +135 -0
- data/test/ft_2b_concurrence.rb +188 -0
- data/test/ft_2c_concurrence.rb +64 -0
- data/test/ft_30_socketlistener.rb +203 -0
- data/test/ft_31_flowname.rb +40 -0
- data/test/ft_32_journal.rb +91 -0
- data/test/ft_32c_journal.rb +102 -0
- data/test/ft_32d_journal.rb +84 -0
- data/test/ft_33_description.rb +107 -0
- data/test/ft_34_cancelwfid.rb +80 -0
- data/test/ft_35_localdefs.rb +75 -0
- data/test/ft_36_subprocids.rb +97 -0
- data/test/ft_37_pnames.rb +70 -0
- data/test/ft_38_tag.rb +127 -0
- data/test/ft_38b_tag.rb +161 -0
- data/test/ft_38c_tag.rb +100 -0
- data/test/ft_39_reserve.rb +63 -0
- data/test/ft_39b_reserve.rb +84 -0
- data/test/ft_3_equals.rb +170 -0
- data/test/ft_3b_lookup_vf.rb +83 -0
- data/test/ft_40_defined.rb +61 -0
- data/test/ft_41_case.rb +110 -0
- data/test/ft_42_environments.rb +75 -0
- data/test/ft_43_pat10.rb +85 -0
- data/test/ft_44_save.rb +70 -0
- data/test/ft_44b_restore.rb +212 -0
- data/test/ft_45_citerator.rb +214 -0
- data/test/ft_46_pparams.rb +62 -0
- data/test/ft_47_filter.rb +160 -0
- data/test/ft_48_fe_filter.rb +88 -0
- data/test/ft_49_condition.rb +126 -0
- data/test/ft_4_misc.rb +237 -0
- data/test/ft_50_xml_attribute.rb +155 -0
- data/test/ft_51_stack.rb +55 -0
- data/test/ft_52_obs_participant.rb +123 -0
- data/test/ft_53_null_noop_participant.rb +62 -0
- data/test/ft_54_listen.rb +288 -0
- data/test/ft_54b_listen.rb +66 -0
- data/test/ft_54c_listen.rb +99 -0
- data/test/ft_55_ptimeout.rb +59 -0
- data/test/ft_56_timeout.rb +59 -0
- data/test/ft_57_a.rb +145 -0
- data/test/ft_58_ejournal.rb +151 -0
- data/test/ft_59_ps.rb +150 -0
- data/test/ft_59b_ps_for_pat.rb +58 -0
- data/test/ft_5_time.rb +118 -0
- data/test/ft_60_ecancel.rb +161 -0
- data/test/ft_61_elsub.rb +51 -0
- data/test/ft_62_procparticipant.rb +71 -0
- data/test/ft_63_pause.rb +124 -0
- data/test/ft_64_alias.rb +102 -0
- data/test/ft_64_clone.rb +69 -0
- data/test/ft_65_stringlaunch.rb +59 -0
- data/test/ft_66_subforget.rb +70 -0
- data/test/ft_67_schedlaunch.rb +116 -0
- data/test/ft_68_ifparticipant.rb +70 -0
- data/test/ft_69_cancelmissing.rb +51 -0
- data/test/ft_6_lambda.rb +64 -0
- data/test/ft_70_lookupvar.rb +55 -0
- data/test/ft_71_log.rb +60 -0
- data/test/ft_72_lookup_processes.rb +76 -0
- data/test/ft_73_cancel_sub.rb +139 -0
- data/test/ft_74_block_and_workitem_dup.rb +63 -0
- data/test/ft_75_ruby_attributes.rb +87 -0
- data/test/ft_76_merge_isolate.rb +88 -0
- data/test/ft_77_segments.rb +35 -0
- data/test/ft_78_eval.rb +150 -0
- data/test/ft_79_tticket.rb +187 -0
- data/test/ft_79b_tticket.rb +172 -0
- data/test/ft_79c_outcome.rb +56 -0
- data/test/ft_7_lose.rb +104 -0
- data/test/ft_7b_lose.rb +78 -0
- data/test/ft_80_spname.rb +91 -0
- data/test/ft_81_exp.rb +60 -0
- data/test/ft_82_trecu.rb +46 -0
- data/test/ft_83_badpause.rb +58 -0
- data/test/ft_84_updateexp.rb +198 -0
- data/test/ft_85_dolhash.rb +43 -0
- data/test/ft_86_dollar_fv.rb +68 -0
- data/test/ft_87_define.rb +74 -0
- data/test/ft_8_forget.rb +44 -0
- data/test/ft_9_cursor.rb +145 -0
- data/test/ft_9b_cursor.rb +105 -0
- data/test/ft_tests.rb +124 -0
- data/test/hash_test.rb +75 -0
- data/test/hparticipant_test.rb +164 -0
- data/test/lookup_att_test.rb +90 -0
- data/test/lookup_vf_test.rb +94 -0
- data/test/misc_test.rb +90 -0
- data/test/nut_0_irb.rb +20 -0
- data/test/obs_test.rb +142 -0
- data/test/orest_test.rb +251 -0
- data/test/param_test.rb +290 -0
- data/test/participant_test.rb +101 -0
- data/test/pending.rb +23 -0
- data/test/ps_representation.rb +133 -0
- data/test/rake_ltest.rb +38 -0
- data/test/rake_qtest.rb +68 -0
- data/test/raw_prog_test.rb +412 -0
- data/test/restart_cron_test.rb +136 -0
- data/test/restart_paused_test.rb +98 -0
- data/test/restart_sleep_test.rb +140 -0
- data/test/restart_tests.rb +18 -0
- data/test/restart_when_test.rb +112 -0
- data/test/ruby_procdef_test.rb +132 -0
- data/test/rutest_utils.rb +63 -0
- data/test/sec_test.rb +205 -0
- data/test/slock_test.rb +80 -0
- data/test/storage_test.rb +44 -0
- data/test/test.rb +3 -0
- data/test/timeout_test.rb +105 -0
- data/test/util_xml_test.rb +112 -0
- data/test/wfid_test.rb +175 -0
- data/test/wi_test.rb +75 -0
- metadata +433 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2007-2008, John Mettraux, OpenWFE.org
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# . Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
# list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# . Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
# and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
|
17
|
+
# used to endorse or promote products derived from this software without
|
|
18
|
+
# specific prior written permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
#++
|
|
32
|
+
#
|
|
33
|
+
# $Id: utils.rb 3454 2006-10-08 16:51:00Z jmettraux $
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# "made in Japan"
|
|
38
|
+
#
|
|
39
|
+
# john.mettraux@openwfe.org
|
|
40
|
+
#
|
|
41
|
+
|
|
42
|
+
require 'openwfe/flowexpressionid'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
module OpenWFE
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# A few methods about FlowExpressionIds
|
|
49
|
+
#
|
|
50
|
+
module FeiMixin
|
|
51
|
+
|
|
52
|
+
protected
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# Makes sure to return a FlowExpressionId instance.
|
|
56
|
+
#
|
|
57
|
+
def extract_fei (object)
|
|
58
|
+
|
|
59
|
+
if object.is_a?(FlowExpressionId)
|
|
60
|
+
|
|
61
|
+
object
|
|
62
|
+
|
|
63
|
+
elsif object.is_a?(FlowExpression) or
|
|
64
|
+
object.is_a?(InFlowItem)
|
|
65
|
+
|
|
66
|
+
object.fei
|
|
67
|
+
|
|
68
|
+
elsif object.is_a?(String)
|
|
69
|
+
|
|
70
|
+
FlowExpressionId.to_fei object
|
|
71
|
+
|
|
72
|
+
else
|
|
73
|
+
|
|
74
|
+
raise \
|
|
75
|
+
"cannot extract FlowExpressionId "+
|
|
76
|
+
"out of #{object.inspect}"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# A small method for ensuring we have a workflow instance id.
|
|
82
|
+
#
|
|
83
|
+
def extract_wfid (o, parent=false)
|
|
84
|
+
|
|
85
|
+
case o
|
|
86
|
+
#when String then o
|
|
87
|
+
when FlowExpressionId then o.wfid(parent)
|
|
88
|
+
when FlowExpression then o.fei.wfid(parent)
|
|
89
|
+
else o.to_s
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2005-2007, John Mettraux, OpenWFE.org
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# . Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
# list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# . Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
# and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
|
17
|
+
# used to endorse or promote products derived from this software without
|
|
18
|
+
# specific prior written permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
#++
|
|
32
|
+
#
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# "hecho en Costa Rica"
|
|
36
|
+
#
|
|
37
|
+
|
|
38
|
+
require 'openwfe/orest/xmlcodec'
|
|
39
|
+
require 'openwfe/orest/restclient'
|
|
40
|
+
require 'openwfe/orest/definitions'
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
module OpenWFE
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# This client is used to connect to an OpenWFE engine to call
|
|
47
|
+
# 'control methods' for monitoring process instances, freezing or
|
|
48
|
+
# cancelling them
|
|
49
|
+
#
|
|
50
|
+
class ControlClient < RestClient
|
|
51
|
+
|
|
52
|
+
def initialize (url, username, password)
|
|
53
|
+
|
|
54
|
+
super(url, username, password)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
#
|
|
58
|
+
# Returns the list of controlable expressions
|
|
59
|
+
#
|
|
60
|
+
def list_expressions ()
|
|
61
|
+
|
|
62
|
+
r = self.get('listexpressions', nil, nil)
|
|
63
|
+
decode(r)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Returns the list of expressions currently applied for a given
|
|
68
|
+
# workflow instance
|
|
69
|
+
#
|
|
70
|
+
def get_flow_position (workflowInstanceId)
|
|
71
|
+
|
|
72
|
+
params = {}
|
|
73
|
+
params['id'] = workflowInstanceId
|
|
74
|
+
|
|
75
|
+
r = self.get('getflowposition', nil, params)
|
|
76
|
+
decode(r)
|
|
77
|
+
end
|
|
78
|
+
alias :get_flow_stack :get_flow_position
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# Cancels a given expression (and potentially its whole subtree)
|
|
82
|
+
#
|
|
83
|
+
def cancel_expression (flowExpressionId)
|
|
84
|
+
|
|
85
|
+
fei = OpenWFE.encode(flowExpressionId)
|
|
86
|
+
|
|
87
|
+
params = {}
|
|
88
|
+
|
|
89
|
+
decode(self.post('cancelexpression', nil, params, fei))
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Freezes an expression (and potentially its whole subtree)
|
|
94
|
+
#
|
|
95
|
+
def freeze_expression (flowExpressionId)
|
|
96
|
+
|
|
97
|
+
fei = OpenWFE.encode(flowExpressionId)
|
|
98
|
+
|
|
99
|
+
params = {}
|
|
100
|
+
|
|
101
|
+
decode(self.post('freezeexpression', nil, params, fei))
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
#
|
|
105
|
+
# Unfreezes an expression (and potentially its whole subtree)
|
|
106
|
+
#
|
|
107
|
+
def unfreeze_expression (flowExpressionId)
|
|
108
|
+
|
|
109
|
+
fei = OpenWFE.encode(flowExpressionId)
|
|
110
|
+
|
|
111
|
+
params = {}
|
|
112
|
+
|
|
113
|
+
decode(self.post('unfreezeexpression', nil, params, fei))
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2005-2007, John Mettraux, OpenWFE.org
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# . Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
# list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# . Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
# and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
|
17
|
+
# used to endorse or promote products derived from this software without
|
|
18
|
+
# specific prior written permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
#++
|
|
32
|
+
#
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# "hecho en Costa Rica"
|
|
36
|
+
#
|
|
37
|
+
|
|
38
|
+
module OpenWFE
|
|
39
|
+
|
|
40
|
+
NAME = 'name'
|
|
41
|
+
STORE = 'store'
|
|
42
|
+
STORES = 'stores'
|
|
43
|
+
WORKITEM_COUNT = 'workitem-count'
|
|
44
|
+
PERMISSIONS = 'permissions'
|
|
45
|
+
HEADER = 'header'
|
|
46
|
+
HEADERS = 'headers'
|
|
47
|
+
A_LAST_MODIFIED = 'last-modified'
|
|
48
|
+
A_LOCKED = 'locked'
|
|
49
|
+
FLOW_EXPRESSION_ID = 'flow-expression-id'
|
|
50
|
+
ATTRIBUTES = 'attributes'
|
|
51
|
+
|
|
52
|
+
OWFE_VERSION = 'owfe-version'
|
|
53
|
+
ENGINE_ID = 'engine-id'
|
|
54
|
+
INITIAL_ENGINE_ID = 'initial-engine-id'
|
|
55
|
+
WORKFLOW_DEFINITION_URL = 'workflow-definition-url'
|
|
56
|
+
WORKFLOW_DEFINITION_NAME = 'workflow-definition-name'
|
|
57
|
+
WORKFLOW_DEFINITION_REVISION = 'workflow-definition-revision'
|
|
58
|
+
WORKFLOW_INSTANCE_ID = 'workflow-instance-id'
|
|
59
|
+
EXPRESSION_NAME = 'expression-name'
|
|
60
|
+
EXPRESSION_ID = 'expression-id'
|
|
61
|
+
|
|
62
|
+
E_STRING = 'string'
|
|
63
|
+
E_INTEGER = 'integer'
|
|
64
|
+
E_BOOLEAN = 'boolean'
|
|
65
|
+
E_LONG = 'long'
|
|
66
|
+
E_DOUBLE = 'double'
|
|
67
|
+
|
|
68
|
+
E_RAW_XML = 'raw-xml'
|
|
69
|
+
E_XML_DOCUMENT = 'xml-document'
|
|
70
|
+
E_BASE64 = 'base64'
|
|
71
|
+
|
|
72
|
+
E_LIST = 'list'
|
|
73
|
+
E_MAP = 'map'
|
|
74
|
+
E_SMAP = 'smap'
|
|
75
|
+
|
|
76
|
+
M_ENTRY = 'entry'
|
|
77
|
+
M_KEY = 'key'
|
|
78
|
+
M_VALUE = 'value'
|
|
79
|
+
|
|
80
|
+
MAP_TYPE = '___map_type'
|
|
81
|
+
|
|
82
|
+
FLOW_EXPRESSION_IDS = 'flow-expression-ids'
|
|
83
|
+
|
|
84
|
+
LAUNCHITEM = 'launchitem'
|
|
85
|
+
ENGINEID = "engineid"
|
|
86
|
+
OK = "ok"
|
|
87
|
+
A_FLOW_ID = "flow-id"
|
|
88
|
+
|
|
89
|
+
IN_FLOW_WORKITEM = 'workitem'
|
|
90
|
+
A_DISPATCH_TIME = 'dispatch-time'
|
|
91
|
+
A_PARTICIPANT_NAME = 'participant-name'
|
|
92
|
+
E_LAST_EXPRESSION_ID = 'last-expression-id'
|
|
93
|
+
|
|
94
|
+
LAUNCHABLES = 'launchables'
|
|
95
|
+
LAUNCHABLE = 'launchable'
|
|
96
|
+
URL = 'url'
|
|
97
|
+
|
|
98
|
+
TARGETSTORE = 'targetstore'
|
|
99
|
+
|
|
100
|
+
EXPRESSIONS = 'expressions'
|
|
101
|
+
EXPRESSION = 'expression'
|
|
102
|
+
APPLY_TIME = 'apply-time'
|
|
103
|
+
STATE = 'state'
|
|
104
|
+
STATE_SINCE = 'state-since'
|
|
105
|
+
|
|
106
|
+
HISTORY = 'history'
|
|
107
|
+
HISTORY_ITEM = 'history-item'
|
|
108
|
+
A_AUTHOR = 'author'
|
|
109
|
+
A_DATE = 'date'
|
|
110
|
+
A_HOST = 'host'
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2005-2007, John Mettraux, OpenWFE.org
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# . Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
# list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# . Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
# and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
|
17
|
+
# used to endorse or promote products derived from this software without
|
|
18
|
+
# specific prior written permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
#++
|
|
32
|
+
#
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# "hecho en Costa Rica"
|
|
36
|
+
#
|
|
37
|
+
# john.mettraux@openwfe.org
|
|
38
|
+
#
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
module OpenWFE
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# EXCEPTION(S)
|
|
45
|
+
#
|
|
46
|
+
|
|
47
|
+
class OwfeException < RuntimeError
|
|
48
|
+
|
|
49
|
+
def initialize ()
|
|
50
|
+
super.initialize()
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def initialize (message)
|
|
54
|
+
super.initialize(message)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#
|
|
2
|
+
#--
|
|
3
|
+
# Copyright (c) 2007, John Mettraux, OpenWFE.org
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# . Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
# list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# . Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
# and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
|
|
17
|
+
# used to endorse or promote products derived from this software without
|
|
18
|
+
# specific prior written permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
#++
|
|
32
|
+
#
|
|
33
|
+
#
|
|
34
|
+
|
|
35
|
+
#
|
|
36
|
+
# "made in Japan"
|
|
37
|
+
#
|
|
38
|
+
# John Mettraux at openwfe.org
|
|
39
|
+
#
|
|
40
|
+
|
|
41
|
+
require 'thread'
|
|
42
|
+
require 'webrick'
|
|
43
|
+
require 'rexml/document'
|
|
44
|
+
require 'openwfe/orest/xmlcodec'
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
module OpenWFE
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# A common parent class for the worklist and the engine old-style (2002)
|
|
51
|
+
# REST interface.
|
|
52
|
+
#
|
|
53
|
+
class OldRestServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
54
|
+
|
|
55
|
+
MUTEX = Mutex.new
|
|
56
|
+
CT = "Content-Type"
|
|
57
|
+
|
|
58
|
+
def initialize (server, params)
|
|
59
|
+
|
|
60
|
+
super
|
|
61
|
+
|
|
62
|
+
@auth_system = params[:AuthSystem] || {}
|
|
63
|
+
|
|
64
|
+
@realm_name = get_realm_name
|
|
65
|
+
|
|
66
|
+
@last_given_session_id = -1
|
|
67
|
+
@sessions = {}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# this default implementation returns "no_realm".
|
|
72
|
+
#
|
|
73
|
+
def get_realm_name
|
|
74
|
+
"no_realm"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def service req, res
|
|
78
|
+
|
|
79
|
+
if req.request_method == 'POST'
|
|
80
|
+
class << req
|
|
81
|
+
def parse_query
|
|
82
|
+
@query = WEBrick::HTTPUtils::parse_query(@query_string)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
username = authenticate req, res
|
|
88
|
+
|
|
89
|
+
if req.query_string == nil
|
|
90
|
+
|
|
91
|
+
get_new_session username, req, res
|
|
92
|
+
return
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
req.attributes['username'] = username
|
|
96
|
+
|
|
97
|
+
action = req.query["action"]
|
|
98
|
+
action = action.downcase if action
|
|
99
|
+
|
|
100
|
+
if action == "endworksession"
|
|
101
|
+
end_work_session req, res
|
|
102
|
+
return
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
action_method = "do__#{action}".intern
|
|
106
|
+
|
|
107
|
+
unless self.respond_to?(action_method)
|
|
108
|
+
action_not_implemented action, res
|
|
109
|
+
return
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
begin
|
|
113
|
+
self.send action_method, req, res
|
|
114
|
+
rescue Exception => e
|
|
115
|
+
reply_with_exception res, e
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
#
|
|
120
|
+
# Returns always the same servlet instance.
|
|
121
|
+
#
|
|
122
|
+
def self.get_instance (server, *options)
|
|
123
|
+
MUTEX.synchronize do
|
|
124
|
+
return @__instance__ if @__instance__
|
|
125
|
+
@__instance__ = self.new(server, *options)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
protected
|
|
130
|
+
|
|
131
|
+
def reply_with_error (res, code, error_message)
|
|
132
|
+
|
|
133
|
+
res.status = code
|
|
134
|
+
res[CT] = "text/plain"
|
|
135
|
+
res.body = error_message
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def reply_with_exception (res, exception)
|
|
139
|
+
|
|
140
|
+
message = exception.message
|
|
141
|
+
|
|
142
|
+
ms = message.split
|
|
143
|
+
|
|
144
|
+
code = 500
|
|
145
|
+
body = message
|
|
146
|
+
|
|
147
|
+
if ms.length > 1 and ms[0].to_i != 0
|
|
148
|
+
code = Integer(ms[0])
|
|
149
|
+
body = message[4..-1]
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
message << "\n"
|
|
153
|
+
message << OpenWFE::exception_to_s(exception)
|
|
154
|
+
message << "\n"
|
|
155
|
+
|
|
156
|
+
reply_with_error(res, code, body)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def reply_with_xml (res, code, xml)
|
|
160
|
+
|
|
161
|
+
res.status = code
|
|
162
|
+
res[CT] = "application/xml"
|
|
163
|
+
|
|
164
|
+
if xml.kind_of?(REXML::Element)
|
|
165
|
+
doc = REXML::Document.new
|
|
166
|
+
doc << xml
|
|
167
|
+
xml = OpenWFE::xml_to_s(doc)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
res.body = xml
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def end_work_session (req, res)
|
|
174
|
+
|
|
175
|
+
sid = req.query['session']
|
|
176
|
+
@sessions.delete(Integer(sid)) if sid
|
|
177
|
+
|
|
178
|
+
@logger.debug "end_work_session() #{sid}"
|
|
179
|
+
#@logger.debug "end_work_session() sessions : #{@sessions.size}"
|
|
180
|
+
|
|
181
|
+
reply_with_xml(res, 200, REXML::Element.new('bye'))
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def authenticate req, res
|
|
185
|
+
|
|
186
|
+
user = nil
|
|
187
|
+
|
|
188
|
+
WEBrick::HTTPAuth::basic_auth(req, res, @realm_name) do |u, p|
|
|
189
|
+
|
|
190
|
+
user = get_session_user req
|
|
191
|
+
|
|
192
|
+
if user
|
|
193
|
+
true
|
|
194
|
+
else
|
|
195
|
+
user = u
|
|
196
|
+
_authenticate u, p
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
user
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def _authenticate user, pass
|
|
204
|
+
|
|
205
|
+
if @auth_system.kind_of?(Hash)
|
|
206
|
+
@auth_system[user] == pass
|
|
207
|
+
elsif @auth_system.kind_of?(Proc)
|
|
208
|
+
@auth_system.call user, pass
|
|
209
|
+
elsif @auth_system.respond_to?(:authenticate)
|
|
210
|
+
@auth_system.authenticate user, pass
|
|
211
|
+
else
|
|
212
|
+
false
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def determine_agent (req)
|
|
217
|
+
|
|
218
|
+
req.addr.join "|"
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def get_new_session username, req, res
|
|
222
|
+
|
|
223
|
+
sid = new_session_id
|
|
224
|
+
|
|
225
|
+
@sessions[sid] = [
|
|
226
|
+
username,
|
|
227
|
+
determine_agent(req),
|
|
228
|
+
Time.now.to_i
|
|
229
|
+
]
|
|
230
|
+
|
|
231
|
+
@logger.debug "get_new_session() #{sid}"
|
|
232
|
+
#@logger.debug "get_new_session() sessions : #{@sessions.size}"
|
|
233
|
+
|
|
234
|
+
esess = REXML::Element.new 'session'
|
|
235
|
+
esess.add_attribute 'id', sid
|
|
236
|
+
|
|
237
|
+
reply_with_xml res, 200, esess
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def action_not_implemented action, res
|
|
241
|
+
|
|
242
|
+
reply_with_error(
|
|
243
|
+
res, 404, "action '#{action}' is not implemented.")
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def new_session_id
|
|
247
|
+
MUTEX.synchronize do
|
|
248
|
+
|
|
249
|
+
id = Integer(Time.new.to_f * 100000)
|
|
250
|
+
|
|
251
|
+
id = @last_given_session_id + 1 \
|
|
252
|
+
if id <= @last_given_session_id
|
|
253
|
+
|
|
254
|
+
@last_given_session_id = id
|
|
255
|
+
id
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def get_session_user (req)
|
|
260
|
+
|
|
261
|
+
sid = req.query['session']
|
|
262
|
+
|
|
263
|
+
@logger.debug "get_session_user() sid : #{sid}"
|
|
264
|
+
|
|
265
|
+
return nil unless sid
|
|
266
|
+
|
|
267
|
+
s = @sessions[Integer(sid)]
|
|
268
|
+
|
|
269
|
+
return nil unless s
|
|
270
|
+
|
|
271
|
+
username, agent, last_seen = s
|
|
272
|
+
|
|
273
|
+
return username if agent == determine_agent(req)
|
|
274
|
+
|
|
275
|
+
nil
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|