DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_HTTP_TICKET

Source


1 package body FND_HTTP_TICKET as
2 /* $Header: AFSTCKTB.pls 120.1 2005/07/02 04:18:30 appldev noship $ */
3 --
4   C_SECS_PER_DAY constant number       := 24*60*60;
5 --
6   function CREATE_TICKET(P_OPERATION in varchar2 default null,
7                          P_ARGUMENT  in varchar2 default null,
8                          P_LIFESPAN  in number   default 60)
9     return raw
10   is
11   pragma AUTONOMOUS_TRANSACTION;
12     X_TICKET     raw(16);
13     X_START_DATE date;
14     X_END_DATE   date := null;
15     X_END_DAY    number;
16     X_END_SEC    number;
17     X_END_STR    varchar2(30);
18     X_LIFE_DAYS  number;
19   begin
20     for I in 1..3 loop
21       X_TICKET := FND_CRYPTO.RANDOMBYTES(16);
22       begin
23         X_START_DATE := SYSDATE;
24         if (P_LIFESPAN is not null) then
25           X_END_DAY := to_number(to_char(X_START_DATE,'J'));
26           X_END_SEC := to_number(to_char(X_START_DATE,'SSSSS')) + P_LIFESPAN;
27           if (X_END_SEC >= C_SECS_PER_DAY) then
28             X_LIFE_DAYS := floor(X_END_SEC/C_SECS_PER_DAY);
29             X_END_SEC := X_END_SEC - (X_LIFE_DAYS * C_SECS_PER_DAY);
30             X_END_DAY := X_END_DAY + X_LIFE_DAYS;
31           end if;
32           X_END_STR := to_char(to_date(to_char(X_END_DAY),'J'),'YYYY/MM/DD')||
33                        ' '||to_char(to_date(to_char(X_END_SEC), 'SSSSS'),
34                                     'HH24:MI:SS');
35           X_END_DATE := to_date(X_END_STR,'YYYY/MM/DD HH24:MI:SS');
36         end if;
37         insert into FND_HTTP_TICKETS (TICKET, OPERATION, ARGUMENT,
38                                       START_DATE, END_DATE)
39              values (X_TICKET, P_OPERATION, P_ARGUMENT,
40                      X_START_DATE, X_END_DATE);
41         commit;
42         return(X_TICKET);
43       exception
44       when DUP_VAL_ON_INDEX then
45         null; -- retry up to three times before failing
46       when OTHERS then
47         exit; -- some other failure, exit the loop now
48       end;
49     end loop;
50     rollback;
51     return(null);
52   end CREATE_TICKET;
53 --
54   function CREATE_TICKET_STRING(P_OPERATION in varchar2 default null,
55                                 P_ARGUMENT  in varchar2 default null,
56                                 P_LIFESPAN  in number   default 60)
57     return varchar2
58   is
59   begin
60     return(FND_CRYPTO.ENCODE(CREATE_TICKET(P_OPERATION,
61                                            P_ARGUMENT,
62                                            P_LIFESPAN),
63                              FND_CRYPTO.ENCODE_URL));
64   end CREATE_TICKET_STRING;
65 --
66   function SET_SERVICE_TICKET(P_SERVICE in varchar2) return raw
67   is
68   pragma AUTONOMOUS_TRANSACTION;
69     X_TICKET     raw(16);
70     X_OLD_TICKET raw(16);
71     X_END_DATE   date;
72   begin
73     select TICKET, OLD_TICKET, END_DATE
74       into X_TICKET, X_OLD_TICKET, X_END_DATE
75       from FND_HTTP_SERVICE_TICKETS
76      where SERVICE = P_SERVICE
77        for update;
78     if (X_END_DATE <= SYSDATE) then
79       X_OLD_TICKET := X_TICKET;
80       X_TICKET := FND_CRYPTO.RANDOMBYTES(16);
81       update FND_HTTP_SERVICE_TICKETS
82          set TICKET = X_TICKET,
83              OLD_TICKET = X_OLD_TICKET,
84              END_DATE = SYSDATE + 1
85        where SERVICE = P_SERVICE;
86       commit;
87     else
88       rollback;
89     end if;
90     return(UTL_RAW.CONCAT(X_TICKET, X_OLD_TICKET));
91   exception when OTHERS then
92     rollback;
93     return(null);
94   end SET_SERVICE_TICKET;
95 --
96   function GET_SERVICE_TICKET(P_SERVICE in varchar2)
97     return raw
98   is
99     X_TICKET     raw(16);
100     X_OLD_TICKET raw(16);
101     X_END_DATE   date;
102   begin
103     select TICKET, OLD_TICKET, END_DATE
104       into X_TICKET, X_OLD_TICKET, X_END_DATE
105       from FND_HTTP_SERVICE_TICKETS where SERVICE = P_SERVICE;
106     if (X_END_DATE <= SYSDATE) then
107       return(SET_SERVICE_TICKET(P_SERVICE));
108     end if;
109     return(UTL_RAW.CONCAT(X_TICKET, X_OLD_TICKET));
110   exception when OTHERS then
111     return(null);
112   end GET_SERVICE_TICKET;
113 --
114   function GET_SERVICE_TICKET_STRING(P_SERVICE in varchar2)
115     return varchar2
116   is
117     X_TICKETS raw(32);
118   begin
119     X_TICKETS := GET_SERVICE_TICKET(P_SERVICE);
120     return(FND_CRYPTO.ENCODE(UTL_RAW.SUBSTR(X_TICKETS,1,16),
121                              FND_CRYPTO.ENCODE_URL)||
122            FND_CRYPTO.ENCODE(UTL_RAW.SUBSTR(X_TICKETS,17,16),
123                              FND_CRYPTO.ENCODE_URL));
124   end GET_SERVICE_TICKET_STRING;
125 --
126   function COMPARE_SERVICE_TICKETS(P_TICKET1 in raw, P_TICKET2 in raw)
127     return boolean
128   is
129     X_TICKET11   raw(16);
130     X_TICKET12   raw(16);
131     X_TICKET21   raw(16);
132     X_TICKET22   raw(16);
133   begin
134     if ((P_TICKET1 is null) or (P_TICKET2 is null)) then
135       return(false);
136     end if;
137     X_TICKET11 := UTL_RAW.SUBSTR(P_TICKET1,1,16);
138     X_TICKET12 := UTL_RAW.SUBSTR(P_TICKET1,17,16);
139     X_TICKET21 := UTL_RAW.SUBSTR(P_TICKET2,1,16);
140     X_TICKET22 := UTL_RAW.SUBSTR(P_TICKET2,17,16);
141     return((X_TICKET11 = X_TICKET21) or (X_TICKET12 = X_TICKET21) or
142            (X_TICKET11 = X_TICKET22) or (X_TICKET12 = X_TICKET22));
143   end COMPARE_SERVICE_TICKETS;
144 --
145   function COMPARE_SERVICE_TICKET_STRINGS(P_TICKET1 in varchar2,
146                                           P_TICKET2 in varchar2)
147     return boolean
148   is
149     N1           number;
150     N2           number;
151     X_TICKET11   varchar2(256);
152     X_TICKET12   varchar2(256);
153     X_TICKET21   varchar2(256);
154     X_TICKET22   varchar2(256);
155   begin
156     if ((P_TICKET1 is null) or (P_TICKET2 is null)) then
157       return(false);
158     end if;
159     N1 := length(P_TICKET1)/2;
160     N2 := length(P_TICKET2)/2;
161     if (N1 <> N2) then
162       return(false);
163     end if;
164     X_TICKET11 := substr(P_TICKET1,1,N1);
165     X_TICKET12 := substr(P_TICKET1,1+N1,N1);
166     X_TICKET21 := substr(P_TICKET2,1,N2);
167     X_TICKET22 := substr(P_TICKET2,1+N2,N2);
168     return((X_TICKET11 = X_TICKET21) or (X_TICKET12 = X_TICKET21) or
169            (X_TICKET11 = X_TICKET22) or (X_TICKET12 = X_TICKET22));
170   end COMPARE_SERVICE_TICKET_STRINGS;
171 --
172   function CHECK_TICKET(P_TICKET    in  raw,
173                         P_OPERATION out nocopy varchar2,
174                         P_ARGUMENT  out nocopy varchar2)
175     return boolean
176   is
177     X_END_DATE date;
178   begin
179     select OPERATION, ARGUMENT, END_DATE
180       into P_OPERATION, P_ARGUMENT, X_END_DATE
181       from FND_HTTP_TICKETS
182      where TICKET = P_TICKET;
183     if (X_END_DATE is not null) then
184       if (X_END_DATE < SYSDATE) then
185         return(false);
186       end if;
187     end if;
188     return(true);
189   exception when OTHERS then
190     return(null);
191   end CHECK_TICKET;
192 --
193   function CHECK_TICKET(P_TICKET in raw) return boolean
194   is
195     X_OPERATION varchar2(255);
196     X_ARGUMENT  varchar2(4000);
197   begin
198     return(CHECK_TICKET(P_TICKET, X_OPERATION, X_ARGUMENT));
199   end CHECK_TICKET;
200 --
201   function CHECK_TICKET_STRING(P_TICKET    in  varchar2,
202                                P_OPERATION out nocopy varchar2,
203                                P_ARGUMENT  out nocopy varchar2)
204     return boolean
205   is
206   begin
207     return(CHECK_TICKET(FND_CRYPTO.DECODE(P_TICKET, FND_CRYPTO.ENCODE_URL),
208                         P_OPERATION, P_ARGUMENT));
209   end CHECK_TICKET_STRING;
210 --
211   function CHECK_TICKET_STRING(P_TICKET in varchar2) return boolean
212   is
213   begin
214     return(CHECK_TICKET(FND_CRYPTO.DECODE(P_TICKET, FND_CRYPTO.ENCODE_URL)));
215   end CHECK_TICKET_STRING;
216 --
217   function UPDATE_TICKET(P_TICKET    in raw,
218                          P_OPERATION in varchar2,
219                          P_ARGUMENT  in varchar2)
220     return boolean
221   is
222   pragma AUTONOMOUS_TRANSACTION;
223     X_END_DATE date;
224   begin
225     update FND_HTTP_TICKETS
226        set OPERATION = P_OPERATION,
227            ARGUMENT = P_ARGUMENT
228      where TICKET = P_TICKET
229     returning END_DATE into X_END_DATE;
230     if (X_END_DATE is not null) then
231       if (X_END_DATE < SYSDATE) then
232         rollback;
233         return(false);
234       end if;
235     end if;
236     commit;
237     return(true);
238   exception when OTHERS then
239     rollback;
240     return(null);
241   end UPDATE_TICKET;
242 --
243   function UPDATE_TICKET_STRING(P_TICKET    in varchar2,
244                                 P_OPERATION in varchar2,
245                                 P_ARGUMENT  in varchar2)
246     return boolean
247   is
248   begin
249     return(UPDATE_TICKET(FND_CRYPTO.DECODE(P_TICKET, FND_CRYPTO.ENCODE_URL),
250                          P_OPERATION, P_ARGUMENT));
251   end UPDATE_TICKET_STRING;
252 --
253   function CHECK_ONETIME_TICKET(P_TICKET    in  raw,
254                                 P_OPERATION out nocopy varchar2,
255                                 P_ARGUMENT  out nocopy varchar2)
256     return boolean
257   is
258   pragma AUTONOMOUS_TRANSACTION;
259     X_END_DATE date;
260     X_TICKET   raw(16);
261   begin
262     delete from FND_HTTP_TICKETS
263           where TICKET = P_TICKET
264       returning TICKET, OPERATION, ARGUMENT, END_DATE
265            into X_TICKET, P_OPERATION, P_ARGUMENT, X_END_DATE;
266     commit;
267     if (X_TICKET is null) then
268       return(null);  -- matching ticket was not found
269     end if;
270     if (X_END_DATE is not null) then
271       if (X_END_DATE < SYSDATE) then
272         return(false);
273       end if;
274     end if;
275     return(true);
276   exception when OTHERS then
277     rollback;
278     return(null);
279   end CHECK_ONETIME_TICKET;
280 --
281   function CHECK_ONETIME_TICKET_STRING(P_TICKET    in  varchar2,
282                                        P_OPERATION out nocopy varchar2,
283                                        P_ARGUMENT  out nocopy varchar2)
284     return boolean
285   is
286   begin
287     return(CHECK_ONETIME_TICKET(FND_CRYPTO.DECODE(P_TICKET,
288                                                   FND_CRYPTO.ENCODE_URL),
289                                 P_OPERATION, P_ARGUMENT));
290   end CHECK_ONETIME_TICKET_STRING;
291 --
292   procedure DESTROY_TICKET(P_TICKET in raw)
293   is
294   pragma AUTONOMOUS_TRANSACTION;
295   begin
296     delete from FND_HTTP_TICKETS where TICKET = P_TICKET;
297     commit;
298   exception when OTHERS then
299     rollback; -- ignore failures
300   end DESTROY_TICKET;
301 --
302   procedure DESTROY_TICKET_STRING(P_TICKET in varchar2)
303   is
304   begin
305     DESTROY_TICKET(FND_CRYPTO.DECODE(P_TICKET, FND_CRYPTO.ENCODE_URL));
306   end DESTROY_TICKET_STRING;
307 --
308   procedure PURGE_TICKETS(P_MAX_LIFESPAN in number default null)
309   is
310   pragma AUTONOMOUS_TRANSACTION;
311   begin
312     if (P_MAX_LIFESPAN is not null) then
313       delete from FND_HTTP_TICKETS
314        where SYSDATE > END_DATE
315           or (SYSDATE - START_DATE) > (P_MAX_LIFESPAN/C_SECS_PER_DAY);
316     else
317       delete from FND_HTTP_TICKETS where SYSDATE > END_DATE;
318     end if;
319     commit;
320   exception when OTHERS then
321     rollback; -- ignore failures
322   end PURGE_TICKETS;
323 --
324 end FND_HTTP_TICKET;