Refactor: Extract business logic in separete file

Extract mobile flow logic from the handler in separete file
We want it to be more easy to test and change
diff --git a/servers/rps/mobile_flow.py b/servers/rps/mobile_flow.py
new file mode 100644
index 0000000..638b115
--- /dev/null
+++ b/servers/rps/mobile_flow.py
@@ -0,0 +1,54 @@
+import uuid
+import datetime
+
+from tornado.log import app_log as log
+from tornado.options import options
+
+from mpin_utils import secrets
+from mpin_utils.common import (
+    Time,
+)
+
+
+class MobileFlow:
+    """  Holds Bussines logic for the Mobile flow """
+
+    def __init__(self, application, storage):
+        self.application = application
+        self.storage = storage
+
+    def generate_wid(self):
+        # Generate request for MPinWIDServer for WID
+        wId = uuid.uuid4().hex
+
+        while wId is None or (self.storage.find(stage="auth", wid=wId)):
+            if wId is None:
+                log.debug("WebId is None".format(wId))
+            else:
+                log.debug("WebId {0} already exists. Generating a new one".format(wId))
+
+            wId = uuid.uuid4().hex
+            log.debug("New webId generated: {0}." .format(wId))
+
+        return wId
+
+    def generate_qr(self, wId):
+        webOTT = secrets.generate_ott(options.OTTLength, self.application.server_secret.rng, "hex")
+
+        nowTime = Time.syncedNow()
+        expirePinPadTime = nowTime + datetime.timedelta(seconds=options.accessNumberExpireSeconds)
+        expireTime = expirePinPadTime + datetime.timedelta(seconds=options.accessNumberExtendValiditySeconds)
+
+        self.storage.add(stage="auth", expire_time=expireTime, webOTT=webOTT, wid=wId)
+
+        qrUrl = options.rpsBaseURL + "#" + wId
+
+        params = {
+            "ttlSeconds": options.accessNumberExpireSeconds,
+            "qrUrl": qrUrl,
+            "webOTT": webOTT,
+            "localTimeStart": Time.DateTimetoEpoch(nowTime),
+            "localTimeEnd": Time.DateTimetoEpoch(expirePinPadTime)
+        }
+
+        return params
diff --git a/servers/rps/rps.py b/servers/rps/rps.py
index ed6231b..12986dd 100755
--- a/servers/rps/rps.py
+++ b/servers/rps/rps.py
@@ -27,7 +27,6 @@
 import sys
 import time
 import urllib
-import uuid
 from urlparse import urlparse
 
 import tornado.autoreload
@@ -57,6 +56,8 @@
     process_dynamic_options,
 )
 
+from mobile_flow import MobileFlow
+
 if os.name == "posix":
     from mpDaemon import Daemon
 elif os.name == "nt":
@@ -714,35 +715,8 @@
     @tornado.web.asynchronous
     @tornado.gen.engine
     def post(self):
-        # Generate request for MPinWIDServer for WID
-        wId = uuid.uuid4().hex
-
-        while wId is None or (self.storage.find(stage="auth", wid=wId)):
-            if wId is None:
-                log.debug("WebId is None".format(wId))
-            else:
-                log.debug("WebId {0} already exists. Generating a new one".format(wId))
-
-            wId = uuid.uuid4().hex
-
-        log.debug("New webId generated: {0}." .format(wId))
-
-        webOTT = secrets.generate_ott(options.OTTLength, self.application.server_secret.rng, "hex")
-
-        nowTime = Time.syncedNow()
-        expirePinPadTime = nowTime + datetime.timedelta(seconds=options.accessNumberExpireSeconds)
-        expireTime = expirePinPadTime + datetime.timedelta(seconds=options.accessNumberExtendValiditySeconds)
-
-        self.storage.add(stage="auth", expire_time=expireTime, webOTT=webOTT, wid=wId)
-
-        qrUrl = options.rpsBaseURL + "#" + wId
-        params = {
-            "ttlSeconds": options.accessNumberExpireSeconds,
-            "qrUrl": qrUrl,
-            "webOTT": webOTT,
-            "localTimeStart": Time.DateTimetoEpoch(nowTime),
-            "localTimeEnd": Time.DateTimetoEpoch(expirePinPadTime)
-        }
+        mobileFlow = MobileFlow(self.application, self.storage)
+        params = mobileFlow.generate_qr(mobileFlow.generate_wid())
 
         self.write(params)
         self.finish()