Inge,

I did it successfully for a similar purpose:

   @SuppressWarnings("unchecked")
   public static void contributeAlias(
       @InjectService( "SiteBaseURLSource" )
       BaseURLSource baseUrlSource,
       Configuration<AliasContribution> configuration ) {

       configuration.add( AliasContribution.create(
           BaseURLSource.class,
           baseUrlSource ) );

   }

Don't use the binder but create your own build method:

   @Marker( SiteServices.class )
   public static BaseURLSource buildSiteBaseURLSource(
       @SiteServices
       SiteService site ) {

       return new SiteBaseURLSource( site );
   }

You can ommit the Marker annotation.

/Michael

Solvoll schrieb:
Hi!

I'm really struggling here as I think I'm approaching a solution. What I'm
trying to do is to override/decorate/alias/replace the BaseURLSource with my
own implementation, like this:

public class MyBaseURLSource implements BaseURLSource {

  private final Request request;

  public MyBaseURLSource(Request request) {
    this.request = request;
  }

  public String getBaseURL(boolean secure) {
    boolean secureRequest = request.isSecure();
    String baseURL = String.format("%s://%s", secureRequest ? "https" :
"http", request.getServerName());
    return baseURL;
  }

}


Essentially, I've copied the default implementation and replaced the usage
of the secure parameter with the secure value of the request. My problem is
that I'm not capable of putting this code to actual work in the framework.

I've tried:
- aliasing, but that didn't work because of circular dependency (I have to
inject the Request)
- binder.bind(BaseURLSource.class, MyBaseURLSource.class), combinded with a
builder for MyBaseURLSource. Causes redirect loop.
- Decorating. Not managed to find out how I do this yet, have tried a few
things.

I'm guessing this is rather simple, it's just a bit complicated when you're
not experienced in IoC... Anyone who wants to point me in the right
direction?

Regards
Inge



On Wed, Nov 19, 2008 at 10:22 AM, Inge Solvoll <[EMAIL PROTECTED]>wrote:

I voted for this issue now.

https://issues.apache.org/jira/browse/TAP5-167

This is really a big issue for our usage of T5, T5 is now forcing us to
redirect users away from http access, because we no longer can support both
modes as long as T5 is fixed on either http or https.

Anyone who's got a working version of a BaseURLSource contribution, that
actually can output a URL using the protocol from the initial request?

Regards
Inge


On Mon, Nov 17, 2008 at 8:57 AM, Inge Solvoll <[EMAIL PROTECTED]>wrote:

I know, this isn't really a problem for regular pages, they load using the
requested protocol, when not marked as secure. But when I create eventlinks
that updates zones, these don't work when they are generated with http and
the rest of the page is generated in https...

What I would like to do is to try some more on the BaseURLSource approach.
Anyone who's got any idea why this has no effect here? I copied and pasted
the code from the T5 docs and put in my Appmodule, and the contribute method
is called on server startup. I replaced the "localhost" url with an
obviously bad url, for testing, but nothing happens, all pages just load as
always, including eventlinks and actionlinks.

Inge


On Sun, Nov 16, 2008 at 9:44 PM, Carl Crowder <[EMAIL PROTECTED]>wrote:

I don't know if you're aware, but if you create a href something like

href="//something.com/page"

then the current protocol is maintained. So if you were viewing the page
at https://something.com the HREF would resolve to
https://something.com/page and similarly with http. Unfortunately it
requires using absolute URLs all the time.

I'm not sure if that helps, but perhaps it could be used in fixing that
issue.

Carl

Inge Solvoll wrote:
Yes, I might. This is a major blow for us, our customers choose freely
whether they want to use http or https, so the T5 way of doing things
just
doesn't work for us...

On Fri, Nov 14, 2008 at 9:28 PM, Jonathan Barker <
[EMAIL PROTECTED]> wrote:

You might want to vote for this:

https://issues.apache.org/jira/browse/TAP5-167


-----Original Message-----
From: Inge Solvoll [mailto:[EMAIL PROTECTED]
Sent: Friday, November 14, 2008 15:10
To: Tapestry users
Subject: Re: [T5] Pick up https/http from request

Thanks!

I tried copying your code into my AppModule with some small
modifications.
But the code only runs on server startup, not when I access a
tapestry 5
page. I tried to add deliberate errors in the code, like naming the
server
loooocalhost, but I never saw the results when accessing pages.

Also, when I try to add "final HttpServletRequest request" as a
parameter
to
the contributeAlias method, my T5.0.13 crashes complaining about
service
recursion.

What I need is for T5 to figure out that a user accesses a page with
either
http or https, and respond on the same protocol...


Regards
Inge

On Fri, Nov 14, 2008 at 4:43 PM, Keith Bottner <[EMAIL PROTECTED]>
wrote:
I believe you might be able to use an alternation of a solution I
used
for
getting https to work properly between my development and production
servers.

public static void contributeAlias(Configuration<AliasContribution>
configuration,
 @Inject @Value("${"+SymbolConstants.PRODUCTION_MODE+"}" ) final
String
production
 {
               if (0 != production.compareToIgnoreCase("true"))
               {
             BaseURLSource source = new BaseURLSource()
             {
                 public String getBaseURL(boolean secure)
                 {
                     String protocol = secure ? "https" : "http";

                     int port = secure ? 8443 : 8080;

                     return String.format("%s://localhost:%d",
protocol,
port);
                 }
             };


 configuration.add(AliasContribution.create(BaseURLSource.class,
source));
               }
 }

Somehow make this dependent on the user selection and return it
accordingly.

Not a quick solution but possible a direction to try!

Keith


On Nov 14, 2008, at 7:18 AM, Inge Solvoll wrote:

 Hi!
My web application is large and consists of Struts, T4 and T5
pages.
In
Struts and T4, I use the current http request to figure out whether
to
use
https or not. Users can choose if they want to log in using https
or
not.
The chosen protocol is used on all pages after login.

In T5, this is either a global static setting, or a static setting
per
page.
Is there a service or something I can override to implement my own
"protocol
builder"? Something like this:

public class HttpProtocolBuilder {
 public HttpProtocolBuilder (final HttpServletRequest request) {
  this.request = request
 }

 public String getProtocol() {
  if (request.isSecure()) {
    return "https";
  }
  else {
   return "http";
   }
}

Regards

Inge

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to