> Note that base64 encoded stuff is not url/html safe and has to be encoded also
> before sending it over the http-wire.
Hmm, interesting. This is going as the headers in a POST. It did seem
to work the last time I ran it, just now, a few minutes ago.
I am using the clj-http library and my actual POST function is:
(defn omniture-call-api [url-with-queue-method api-payload headers]
(timbre/spy :debug " return value of omniture-call-api "
(try+
(http-client/post url-with-queue-method
{:body api-payload
:debug true
:debug-body true
:insecure true
:headers {"X-Api-Version" "2"
"X-WSSE" headers}
:content-type :json
:socket-timeout 4000
:conn-timeout 4000
:accept :json
:client-params
{"http.protocol.allow-circular-redirects" true
"http.useragent"
"clj-http"}})
(catch Object o (println (pp/pprint o))))))
The 3rd argument, headers, is what you helped me figure out earlier.
On Mar 4, 4:17 pm, Frank Siebenlist <[email protected]>
wrote:
> .digest returns a byte array - so your PasswordDigest value is unprintable
> and is not fit for any header/URL.
>
> Not sure what this base64-encode function does exactly, but normally base64
> encoding takes a bunch of bytes already, so the (commented-out)
> "digest-base64 (base64-encode (.getBytes digest))" does not need the
> (.getBytes …) transformation as your digest consists already of bytes.
>
> Note that base64 encoded stuff is not url/html safe and has to be encoded
> also before sending it over the http-wire.
>
> -FS.
>
> On Mar 4, 2013, at 1:00 PM, larry google groups <[email protected]>
> wrote:
>
>
>
>
>
>
>
> > Thank you for the suggestions. If I do this:
>
> > (let [username (get-in @um/interactions [:omniture-api-
> > credentials :username])
> > secret (get-in @um/interactions [:omniture-api-
> > credentials :shared-secret])
> > random-number (math/round (* (rand 1 ) 1000000))
> > nonce (DigestUtils/md5Hex (str random-number))
> > nonce-encoded-base64 (base64-encode (.getBytes
> > nonce))
> > date-formatter (new SimpleDateFormat "yyyy-MM-
> > dd'T'HH:mm:ss")
> > created (.format date-formatter (new Date))
> > nonce-as-bytes (.getBytes nonce)
> > created-as-bytes (.getBytes created)
> > secret-as-bytes (.getBytes secret)
> > digest (.digest
> > (doto (java.security.MessageDigest/
> > getInstance "sha1")
> > .reset
> > (.update nonce-as-bytes)
> > (.update created-as-bytes)
> > (.update secret-as-
> > bytes)))
> > ;; ;;digest-base64 (base64-encode (.getBytes
> > digest))
> > header (apply str " UsernameToken Username=\""
> > username "\" PasswordDigest=\"" digest "\" Nonce=\"" nonce-encoded-
> > base64 "\" Created=\"" created "\"")]
> > header)
>
> > I end up with, in part:
>
> > PasswordDigest="[B@26f7b2f4"
> > Nonce="Y2MwN2JiYzA5MDlmZjE2ZjExMGYzMjRhODA2Yjc5ODc="
> > Created="2013-03-04T15:57:52"
>
> > Which I think is still incorrect.
>
> > I also tried this with the PasswordDigest base64 encoded, and that did
> > not work either.
>
> > On Mar 4, 2:43 pm, Frank Siebenlist <[email protected]>
> > wrote:
> >> That should work.
>
> >> No need for .reset though as the initially constructed MessageDigest is
> >> already in its initial state.
>
> >> Be careful with .digest as it implicitly resets the MessageDigest, and
> >> calling it a second time gives you the digest of the initial state which
> >> is not what you want.
>
> >> (all that "incidental complexity" is why I started to write that
> >> functional interface ;-) )
>
> >> -FS.
>
> >> On Mar 4, 2013, at 11:32 AM, Aaron Cohen <[email protected]> wrote:
>
> >>> Ah darn, thanks for the catch. The following is uglier but should work I
> >>> guess. :\
>
> >>> digest (.digest
> >>> (doto (java.security.MessageDigest/getInstance "sha1")
> >>> .reset
> >>> (.update nonce-bytes)
> >>> (.update created-bytes)
> >>> (.update secret-bytes)))
>
> >>> On Mon, Mar 4, 2013 at 2:25 PM, Frank Siebenlist
> >>> <[email protected]> wrote:
> >>>> digest (-> (java.security.MessageDigest/getInstance "sha1")
> >>>> .reset
> >>>> (.update nonce-bytes)
> >>>> (.update create-bytes)
> >>>> (.update secret-bytes)
> >>>> .digest)
>
> >>> There may be an issue with this snippet of code as ".update" does not
> >>> return anything… i.e. nil.
>
> >>> -FS.
>
> >>> On Mar 4, 2013, at 11:06 AM, larry google groups
> >>> <[email protected]> wrote:
>
> >>>>> ;; Should "UsernameToken Username" really be unquoted in the following
> >>>>> line?
> >>>>> ;; All the other variable names are quoted
>
> >>>> Apparently, yes. The developer at Omniture reviewed it and said my
> >>>> only problem was the way the passwordDigest was created.
>
> >>>> On Mar 4, 2:02 pm, Aaron Cohen <[email protected]> wrote:
> >>>>> I think you should try to avoid the string concatenation games. I'm not
> >>>>> sure what your current code is, but I suspect you're still ending up
> >>>>> with
> >>>>> array toString's slipping in.
>
> >>>>> How about the following?
>
> >>>>> On Mon, Mar 4, 2013 at 1:31 PM, larry google groups <
>
> >>>>> [email protected]> wrote:
> >>>>>> So, right now I am using this code:
>
> >>>>>> (let [username (get-in @um/interactions [:omniture-api-
> >>>>>> credentials :username])
> >>>>>> secret (get-in @um/interactions [:omniture-api-credentials :shared-
> >>>>>> secret])
> >>>>>> nonce (DigestUtils/md5Hex (str (math/round (* (rand 1 ) 1000000))))
> >>>>>> nonce-encoded-base64 (Base64/encodeBase64 (.getBytes nonce))
> >>>>>> date-formatter (new SimpleDateFormat "yyyy-MM-dd'T'HH:mm:ss")
> >>>>>> formatter gmt-timezone)
> >>>>>> created (.format date-formatter (new Date))
>
> >>>>> nonce-bytes (.getBytes nonce)
> >>>>> created-bytes (.getBytes created)
> >>>>> secret-bytes (.getBytes secret)
> >>>>> digest (-> (java.security.MessageDigest/getInstance "sha1")
> >>>>> .reset
> >>>>> (.update nonce-bytes)
> >>>>> (.update create-bytes)
> >>>>> (.update secret-bytes)
> >>>>> .digest)
> >>>>> digest-base64 (Base64/encodeBase64 digest)
>
> >>>>> ;; Should "UsernameToken Username" really be unquoted in the following
> >>>>> line?
> >>>>> ;; All the other variable names are quoted
> >>>>> header (apply str " UsernameToken Username=\"" username
>
> >>>>> ;; You may want digest-base64 here?
> >>>>> "\"PasswordDigest=\"" digest
>
> >>>>> "\" Nonce=\"" nonce-encoded-base64
> >>>>> "\"Created=\"" created "\"")]
> >>>>> header)
>
> >>>> --
> >>>> --
> >>>> You received this message because you are subscribed to the Google
> >>>> Groups "Clojure" group.
> >>>> To post to this group, send email to [email protected]
> >>>> Note that posts from new members are moderated - please be patient with
> >>>> your first post.
> >>>> To unsubscribe from this group, send email to
> >>>> [email protected]
> >>>> For more options, visit this group at
> >>>>http://groups.google.com/group/clojure?hl=en
> >>>> ---
> >>>> You received this message because you are subscribed to the Google
> >>>> Groups "Clojure" group.
> >>>> To unsubscribe from this group and stop receiving emails from it, send
> >>>> an email to [email protected].
> >>>> For more options, visithttps://groups.google.com/groups/opt_out.
>
> >>> --
> >>> --
> >>> You received this message because you are subscribed to the Google
> >>> Groups "Clojure" group.
> >>> To post to this group, send email to [email protected]
> >>> Note that posts from new members are moderated - please be patient with
> >>> your first post.
> >>> To unsubscribe from this group, send email to
> >>> [email protected]
> >>> For more options, visit this group at
> >>>http://groups.google.com/group/clojure?hl=en
> >>> ---
> >>> You received this message because you are subscribed to the Google Groups
> >>> "Clojure" group.
> >>> To unsubscribe from this group and stop receiving emails from it, send an
> >>> email to [email protected].
> >>> For more options, visithttps://groups.google.com/groups/opt_out.
>
> > --
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to [email protected]
> > Note that posts from new members are moderated - please be patient with
> > your first post.
> > To unsubscribe from this group, send email to
> > [email protected]
> > For more options, visit this group at
> >http://groups.google.com/group/clojure?hl=en
> > ---
> > You received this message because you are subscribed to the Google Groups
> > "Clojure" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to [email protected].
> > For more options, visithttps://groups.google.com/groups/opt_out.
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.