          wrap-params)})
 
   (routes [this]
-    ["/" {"authorize" {:get ::authorize-form
-                       :post ::authorize}
-          "second-authenticator" {:get ::second-authenticator-form
-                                  :post ::process-authenticator-code}
+    ["/" {"authorize" {:get ::get-authenticate-form
+                       :post ::post-authenticate-form}
+          "totp" {:get ::get-totp-code
+                  :post ::post-totp-code}
           "access_token" {:post ::exchange-code-for-access-token}}])
 
   (uri-context [this] "/login/oauth"))

           )
         wrap-params wrap-cookies)

     ::second-authenticator-form
     (fn [req]
       {:status 200
        :body (html

                  [:p [:a {:href (path-for (:modular.bidi/routes req) :cylon.impl.signup/signup-form)} "Signup"]]]])})
      wrap-params)

     ::post-authenticate-form
     (-> (fn [req]
           (let [params (-> req :form-params)
                 identity (get params "user")
