Domen Dolar - 2018-05-28

To add captcha in RASD program you have to add 3 fields on block.

Sample in block B10:
CAPTCHAVALUE -> type Hidden
CAPTCHAIMAGE ->type Text
CAPTCHATEXT -> type Input text

In trigger add Captcha code with :


Public code:

procedure ShowImage (
  name_array  in owa.vc_arr,
  value_array in owa.vc_arr
);

Private code:

procedure ShowImage (
  name_array  in owa.vc_arr,
  value_array in owa.vc_arr
) is
 pt raw(100);
 l_lob blob;
 vt varchar2(100);
 FUNCTION namedParam(
  p_searchVal   in varchar2,
  p_name_array  in owa.vc_arr,
  p_value_array in owa.vc_arr
  ) RETURN varchar2 IS
  i integer;
 BEGIN
  FOR i IN 1..nvl(p_name_array.count,0) LOOP
    if p_name_array(i)=p_searchVal then
      return p_value_array(i);
    end if;
  END LOOP;
  return null;
 END;
begin
pt := namedParam(
  'pt',
  name_array ,
  value_array
  );
pt := utl_encode.base64_decode(pt);
vt := utl_raw.cast_to_varchar2(pt);
l_lob := dd_bmp.captcha(vt);
owa_util.mime_header( 'image/bmp', FALSE );
htp.p('Content-length: '  || dbms_lob.getlength( l_lob ));
owa_util.http_header_close;
wpg_docload.download_file( l_lob );

end;

In trigger POST_SUBMIT add:


declare
 x raw(100);
 vct_raw raw(100);
 vcv_raw raw(100);
 v varchar2(100);
begin
   vct_raw :=  utl_raw.cast_to_raw(B10CAPTCHATEXT);
   vcv_raw :=  B10CAPTCHAVALUE;

--htp.p(utl_encode.base64_encode(vct_raw));
--htp.p(vcv_raw );
begin

if utl_encode.base64_encode(vct_raw) = vcv_raw then
  message := 'Written text is OK.';
else
  message := 'Written text is NOT ok!';
end if;

exception when others then null;
  message := 'Written text is NOT ok!';
end;
 B10CAPTCHATEXT := '';

 v := dd_random.rndchar||dd_random.rndchar||dd_random.rndchar||dd_random.rndchar;

 x := utl_raw.cast_to_raw(v);

 B10CAPTCHAVALUE := utl_encode.base64_encode(x);
 B10CAPTCHAIMAGE := '<img src="!DEMO_CAPTCHA.ShowImage?pt='||B10CAPTCHAVALUE||'">';
end;

 

Last edit: Domen Dolar 2018-05-30