コード例 #1
0
        private RESTRequestStatus ChangePassword(string accountname, string password, string newpassword, string sessionid)
        {
            RESTRequestStatus result = new RESTRequestStatus(RESTRequestStatusCode.failed);

            Hashtable infoDic = new Hashtable(2);

            if (DataLayer.IsValidSession(sessionid, Request.Host.Host))
            {
                if (DataLayer.ChangeAccountPassword(accountname, password, newpassword))
                {
                    //Task email =
                    SendEmail(accountname,
                              Constants.passwordChangedTitleMessage,
                              Constants.passwordChangedMessage);

                    infoDic.Add(Constants.keyAccountName, accountname);
                    infoDic.Add(Constants.keyPassword, newpassword);

                    result.info       = infoDic;
                    result.statuscode = RESTRequestStatusCode.success;
                    result.status     = RESTRequestStatusCode.success.ToString( );
                }
                else
                {
                    result.statuscode = RESTRequestStatusCode.failed;
                    result.status     = RESTRequestStatusCode.failed.ToString( );
                }
            }

            return(result);
        }
コード例 #2
0
        private void DeleteBaseStationFromAccount(RESTRequestStatus response, String sessionid, BaseStation baseStation, string devicetoken)
        {
            SilentNotification notification = null;

            List <string> devicesTokens;

            if (DataLayer.DeleteBaseStation(response, baseStation))
            {
                if (DataLayer.GetBaseStationsWithSessionId(response, sessionid))
                {
                    response.statuscode = RESTRequestStatusCode.success;
                    response.status     = RESTRequestStatusCode.success.ToString( );

                    notification = new SilentNotification(baseStation);

                    notification.NotificationType = Constants.delete;

                    DataLayer.GetDeviceTokensForAccount(baseStation.AccountNo, out devicesTokens);

                    devicesTokens.Remove(devicetoken);

                    if (devicesTokens.Count > 0)
                    {
                        Task.Factory.StartNew(() => { NotificationController.PushNotification(notification, devicesTokens); });
                    }
                }
            }
        }
コード例 #3
0
        private RESTRequestStatus ForgotPassword(string accountname)
        {
            RESTRequestStatus result = new RESTRequestStatus(RESTRequestStatusCode.failed);

            string newpassword = "";

            if (DataLayer.ResetAccountPassword(accountname, out newpassword))
            {
                //Task email =
                SendEmail(accountname,
                          Constants.resetPasswordMessage,
                          $"Please login to Fluid Automation (Click on Link) and change the provided temporary password: {newpassword}");

                //email.Wait();

                result.statuscode = RESTRequestStatusCode.success;
                result.status     = RESTRequestStatusCode.success.ToString( );
                result.response   = accountname;
            }
            else
            {
                result.statuscode = RESTRequestStatusCode.failed;
                result.status     = RESTRequestStatusCode.failed.ToString( );
            }

            return(result);
        }
コード例 #4
0
ファイル: AppController.cs プロジェクト: mtynas/FluidApi
        static public bool ProceedWithRequest(RESTRequestStatus response, string appkey, string sessionId, HttpRequest request)
        {
            bool ret = false;

            if (Security.Security.ValidRequest(appkey))
            {
                if (DataLayer.Connect( ) == true)
                {
                    if (DataLayer.IsValidSession(sessionId, request.HttpContext.Connection.RemoteIpAddress.ToString( )) == true)
                    {
                        ret = true;
                    }
                    else
                    {
                        response.statuscode = RESTRequestStatusCode.invalidsessionid;
                        response.status     = RESTRequestStatusCode.invalidsessionid.ToString( );
                    }
                }
                else
                {
                    response.statuscode = RESTRequestStatusCode.databaseerror;
                    response.status     = RESTRequestStatusCode.databaseerror.ToString( );
                }
            }
            else
            {
                response.statuscode = RESTRequestStatusCode.invalidappKey;
                response.status     = RESTRequestStatusCode.invalidappKey.ToString( );
            }

            return(ret);
        }
コード例 #5
0
ファイル: AccountController.cs プロジェクト: mtynas/FluidApi
        public RESTRequestStatus Post(string appkey,
                                      string sessionid,
                                      string deviceToken,
                                      string platform,
                                      Int64 accountno
                                      )
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);

            if (AppController.ProceedWithRequest(response, appkey, sessionid, Request) == false)
            {
                return(response);
            }

            string fullpath = Request.Path;
            string op       = fullpath.Substring("/fluid/account/".Length, fullpath.Length - "/fluid/account/".Length);

            switch (op)
            {
            case Constants.device:
                if (DataLayer.AddDeviceToAccount(response, accountno, deviceToken, platform))
                {
                    response.statuscode = RESTRequestStatusCode.success;
                    response.status     = RESTRequestStatusCode.success.ToString( );
                }
                break;
            }

            return(response);
        }
コード例 #6
0
 private void GetBaseStationsForAccount(RESTRequestStatus response, String sessionid)
 {
     if (DataLayer.GetBaseStationsWithSessionId(response, sessionid))
     {
         response.statuscode = RESTRequestStatusCode.success;
         response.status     = RESTRequestStatusCode.success.ToString( );
     }
 }
コード例 #7
0
ファイル: AppController.cs プロジェクト: mtynas/FluidApi
        public string Post(string sessionid,
                           string macaddress,
                           string sensor_macaddress,
                           string hwtype,
                           string hwversion,
                           string fwversion,
                           string name,
                           Int64 timestamp,
                           string description)
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);

            if (!string.IsNullOrEmpty(sessionid))
            {
                if (DataLayer.Connect( ))
                {
                    if (DataLayer.IsValidSession(sessionid, Request.HttpContext.Connection.RemoteIpAddress.ToString( )))
                    {
                        string fullpath = Request.Path;
                        string op       = fullpath.Substring("/fluid/app/".Length, fullpath.Length - "/fluid/app/".Length);

                        switch (op)
                        {
                        case Constants.associateSensor:
                            if (DataLayer.AssociateSensorWithAccount(response, sessionid, macaddress, sensor_macaddress, hwtype, hwversion, fwversion))
                            {
                                response.statuscode = RESTRequestStatusCode.ok;
                                response.status     = RESTRequestStatusCode.ok.ToString( );
                            }
                            else
                            {
                                response.statuscode = RESTRequestStatusCode.failed;
                                response.status     = RESTRequestStatusCode.failed.ToString( );
                            }
                            break;
                        }
                    }
                    else
                    {
                        response.statuscode = RESTRequestStatusCode.invalidsessionid;
                        response.status     = RESTRequestStatusCode.invalidsessionid.ToString( );
                    }

                    DataLayer.CloseConnection( );
                } //  Connect
                else
                {
                    response.statuscode = RESTRequestStatusCode.databaseerror;
                }
            }
            else
            {
                response.statuscode = RESTRequestStatusCode.missingsessionid;
                response.status     = RESTRequestStatusCode.missingsessionid.ToString( );
            }

            return(response.ToJson( ));
        }
コード例 #8
0
ファイル: SyncController.cs プロジェクト: mtynas/FluidApi
        public RESTRequestStatus Put(string appkey,
                                     string sessionid,
                                     Int64 cloudid,
                                     string syncitems,
                                     string devicetoken

                                     )
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);

            Account account   = null;
            Int64   accountNo = 0;

            if (AppController.ProceedWithRequest(response, appkey, sessionid, Request) == false)
            {
                return(response);
            }

            string fullpath = Request.Path;
            string op       = fullpath.Substring("/fluid/sync/".Length, fullpath.Length - "/fluid/sync/".Length);

            switch (op)
            {
            case Constants.basestation:


                //IDictionary<string , string> baseStationSyncItemsDic = JsonConvert.DeserializeObject<Dictionary<string , string>>( syncitems );


                accountNo = DataLayer.GetAccountNoUsingSessionId(sessionid);

                account = DataLayer.GetAccount(accountNo);

                BaseStation baseStation = DataLayer.GetBaseStation(response, cloudid, account);

                if (baseStation.CloudId == cloudid)
                {
                    SyncBaseStation(response, baseStation, syncitems, devicetoken);
                }

                break;

            case Constants.sensor:

                Sensor sensor = DataLayer.GetSensor(response, cloudid);


                if (sensor.CloudId.Equals(cloudid))
                {
                    SyncSensor(response, sensor, syncitems, devicetoken);
                }

                break;
            }

            return(response);
        }
コード例 #9
0
ファイル: SyncController.cs プロジェクト: mtynas/FluidApi
        public RESTRequestStatus Post(string appkey,
                                      string sessionid,
                                      Int64 cloudId,
                                      Int64 totalTimeStampSync
                                      )
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);

            Account account   = null;
            Int64   accountNo = 0;


            if (AppController.ProceedWithRequest(response, appkey, sessionid, Request) == false)
            {
                return(response);
            }

            string fullpath = Request.Path;
            string op       = fullpath.Substring("/fluid/sync/".Length, fullpath.Length - "/fluid/sync/".Length);

            switch (op)
            {
            case Constants.basestation:

                accountNo = DataLayer.GetAccountNoUsingSessionId(sessionid);

                account = DataLayer.GetAccount(accountNo);

                BaseStation baseStation = DataLayer.GetBaseStation(response, cloudId, account);

                if (baseStation.CloudId == cloudId)
                {
                    Int64 totalTimeStamps;

                    response.statuscode = RESTRequestStatusCode.success;
                    response.status     = RESTRequestStatusCode.success.ToString( );

                    totalTimeStamps = baseStation.NameTimeStamp +
                                      baseStation.TempUnitTimeStamp +
                                      baseStation.UserDescriptionTimeStamp;

                    if (totalTimeStampSync != totalTimeStamps)
                    {
                        response.response = Constants.needsSyncing;
                    }
                    else
                    {
                        response.response = Constants.synced;
                    }
                }

                break;
            }

            return(response);
        }
コード例 #10
0
ファイル: AppController.cs プロジェクト: mtynas/FluidApi
        public RESTRequestStatus  Get(string op)
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);


            if (Security.Security.ValidRequest(op) == true)
            {
                response.statuscode = RESTRequestStatusCode.success;
                response.status     = RESTRequestStatusCode.success.ToString( );

                return(response);
            }

            return(response);
        }
コード例 #11
0
ファイル: AccountController.cs プロジェクト: mtynas/FluidApi
        public RESTRequestStatus Put(string appkey,
                                     string sessionid,
                                     Int64 cloudId,
                                     Int64 totalTimeStampSync,
                                     string baseStationSyncItems

                                     )
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);

            if (AppController.ProceedWithRequest(response, appkey, sessionid, Request) == false)
            {
                return(response);
            }

            return(response);
        }
コード例 #12
0
        private void AssociateBaseStationWithAccount(RESTRequestStatus response, String sessionid, BaseStation baseStation, String devicetoken)
        {
            SilentNotification notification = null;
            Int64         accountNo         = 0;
            List <string> devicesTokens;


            if (DataLayer.AssociateBaseStationWithAccount(response, sessionid, baseStation))
            {
                if (DataLayer.GetBaseStationsWithSessionId(response, sessionid))
                {
                    accountNo = DataLayer.GetAccountNoUsingSessionId(sessionid);

                    response.statuscode = RESTRequestStatusCode.success;
                    response.status     = RESTRequestStatusCode.success.ToString( );

                    notification = new SilentNotification(baseStation);

                    notification.NotificationType = Constants.add;

                    DataLayer.GetDeviceTokensForAccount(accountNo, out devicesTokens);

                    if (devicesTokens == null)
                    {
                        return;
                    }

                    devicesTokens.Remove(devicetoken);

                    if (devicesTokens.Count > 0)
                    {
                        Task.Factory.StartNew(() => { NotificationController.PushNotification(notification, devicesTokens); });
                    }
                }
            }
        }
コード例 #13
0
        public RESTRequestStatus Put(string op,
                                     string appkey,
                                     string sessionid,
                                     string macaddress,
                                     string hwtype,
                                     string hwversion,
                                     string fwversion)
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);

            if (AppController.ProceedWithRequest(response, appkey, sessionid, Request) == false)
            {
                return(response);
            }
            switch (op)
            {
            case Constants.notify:

                Int64 cloudId = DataLayer.GetBaseStationId(response, sessionid, macaddress);

                if (cloudId != 0)
                {
                    response.info.Add(Constants.keyCloudId, cloudId);
                    response.statuscode = RESTRequestStatusCode.ok;
                    response.status     = RESTRequestStatusCode.ok.ToString( );
                }
                else
                {
                    response.statuscode = RESTRequestStatusCode.notfound;
                    response.status     = RESTRequestStatusCode.notfound.ToString( );
                }
                break;
            }

            return(response);
        }
コード例 #14
0
        public RESTRequestStatus Post(
            string sessionid,
            string appkey,
            string macaddress,
            string status,
            string hwversion,
            string fwversion,
            string name,
            string description,
            string tempunit,
            string devicetoken,

            Int64 cloudId,
            Int64 descriptiontimestamp,
            Int64 nametimestamp,
            Int64 tempunittimestamp

            )

        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.unknown);

            BaseStation baseStation = null;
            Account     account     = null;
            Int64       accountNo;

            if (AppController.ProceedWithRequest(response, appkey, sessionid, Request) == false)
            {
                return(response);
            }

            string fullpath = Request.Path;

            string op = fullpath.Substring("/fluid/basestation/".Length, fullpath.Length - "/fluid/basestation/".Length);

            switch (op)
            {
            case Constants.basestations:

                GetBaseStationsForAccount(response, sessionid);

                break;


            case Constants.associateBasestation:


                baseStation = new BaseStation(macaddress,
                                              hwversion,
                                              fwversion,
                                              name,
                                              status,
                                              nametimestamp,
                                              description,
                                              descriptiontimestamp,
                                              tempunit,
                                              tempunittimestamp);

                AssociateBaseStationWithAccount(response, sessionid, baseStation, devicetoken);

                break;

            case Constants.delete:

                accountNo = DataLayer.GetAccountNoUsingSessionId(sessionid);

                account = DataLayer.GetAccount(accountNo);

                baseStation = DataLayer.GetBaseStation(response, cloudId, account);

                baseStation.Status = status;

                DeleteBaseStationFromAccount(response, sessionid, baseStation, devicetoken);

                break;
            }

            DataLayer.CloseConnection( );

            return(response);
        }
コード例 #15
0
        public RESTRequestStatus Put(string appkey,
                                     string accounttype,
                                     string accountname,
                                     string password,
                                     string newpassword,
                                     string sessionid)
        {
            RESTRequestStatus response = new RESTRequestStatus(RESTRequestStatusCode.failed);

            if (Security.Security.ValidRequest(appkey) == false)
            {
                response.statuscode = RESTRequestStatusCode.invalidappKey;
                response.status     = RESTRequestStatusCode.invalidappKey.ToString( );

                return(response);
            }

            if (DataLayer.Connect( ) == false)
            {
                response.statuscode = RESTRequestStatusCode.databaseerror;
                response.status     = RESTRequestStatusCode.databaseerror.ToString( );

                DataLayer.CloseConnection( );

                return(response);
            }



            bool account_exists = DataLayer.AccountExists(accountname);

            string fullpath = Request.Path;
            string op       = fullpath.Substring("/fluid/authentication/".Length, fullpath.Length - "/fluid/authentication/".Length);

            switch (op)
            {
            case Constants.signup:

                if (!account_exists)
                {
                    DataLayer.CreateAccount(response, accounttype, accountname, password, Request.HttpContext.Connection.RemoteIpAddress.ToString( ));
                }
                else
                {
                    response.response = RESTRequestStatusCode.accountexists.ToString();
                }
                break;

            case Constants.login:
                if (account_exists)
                {
                    response = DataLayer.Login(accountname, password, Request.HttpContext.Connection.RemoteIpAddress.ToString());
                }
                break;

            case Constants.forgot:
                if (account_exists)
                {
                    response = ForgotPassword(accountname);
                }
                break;

            case Constants.changepassword:
                if (account_exists)
                {
                    response = ChangePassword(accountname, password, newpassword, sessionid);
                }
                break;

            case Constants.newsession:
                if (account_exists)
                {
                    Int64 session_id = 0;

                    if ((DataLayer.CreateSession(accountname, Request.HttpContext.Connection.RemoteIpAddress.ToString( ), out session_id)))
                    {
                        response.statuscode = RESTRequestStatusCode.success;
                        response.status     = Constants.statusSuccess;
                        response.sessionid  = session_id.ToString();
                        response.response   = accountname;
                    }
                }
                break;

            default:
                response.statuscode = RESTRequestStatusCode.invalidrequest;
                response.status     = Constants.unknownRestOperation;
                break;
            }

            DataLayer.CloseConnection( );

            return(response);
        }
コード例 #16
0
ファイル: SyncController.cs プロジェクト: mtynas/FluidApi
 static public void SyncRule(RESTRequestStatus response, Int64 ruleId)
 {
 }
コード例 #17
0
ファイル: SyncController.cs プロジェクト: mtynas/FluidApi
        static public void SyncSensor(RESTRequestStatus response, Sensor sensor, string syncitems, string devicetoken)
        {
            IDictionary <string, string> baseStationSyncItemsDic = JsonConvert.DeserializeObject <Dictionary <string, string> >(syncitems);


            Notification  notification;
            List <string> devicesTokens;


            Int64 totalTimeStamps;
            Int64 totalTimeStampSync;

            Int64 nameTimeStamp        = 0;
            Int64 tempUnitTimeStamp    = 0;
            Int64 descriptionTimeStamp = 0;

            string value;

            if (baseStationSyncItemsDic.TryGetValue(Constants.keyNameTimeStamp, out value))
            {
                nameTimeStamp = Convert.ToInt64(value);
            }

            if (baseStationSyncItemsDic.TryGetValue(Constants.keyTempUnitTimeStamp, out value))
            {
                tempUnitTimeStamp = Convert.ToInt64(value);
            }

            if (baseStationSyncItemsDic.TryGetValue(Constants.keyUserDescriptionTimeStamp, out value))
            {
                descriptionTimeStamp = Convert.ToInt64(value);
            }


            totalTimeStamps = sensor.NameTimeStamp + sensor.UserDescriptionTimeStamp;

            totalTimeStampSync = nameTimeStamp + descriptionTimeStamp;

            if (totalTimeStampSync == totalTimeStamps)
            {
                response.response = Constants.synced;

                response.statuscode = RESTRequestStatusCode.success;
                response.status     = RESTRequestStatusCode.success.ToString( );

                return;
            }


            if (totalTimeStampSync != totalTimeStamps)
            {
                foreach (KeyValuePair <string, string> pair in baseStationSyncItemsDic)
                {
                    if (pair.Key.Equals(Constants.keyName))
                    {
                        if (nameTimeStamp > sensor.NameTimeStamp)
                        {
                            sensor.Name          = Convert.ToString(pair.Value);
                            sensor.NameTimeStamp = nameTimeStamp;
                        }
                    }
                    else if (pair.Key.Equals(Constants.keyUserDescription))
                    {
                        if (descriptionTimeStamp > sensor.UserDescriptionTimeStamp)
                        {
                            sensor.UserDescription          = Convert.ToString(pair.Value);
                            sensor.UserDescriptionTimeStamp = descriptionTimeStamp;
                        }
                    }
                }

                totalTimeStamps = sensor.NameTimeStamp + sensor.UserDescriptionTimeStamp;

                if (totalTimeStampSync != totalTimeStamps)
                {
                    response.info.Add(Constants.totalTimeStamps, totalTimeStamps.ToString( ));
                    response.info.Add(Constants.keyName, sensor.Name);
                    response.info.Add(Constants.keyUserDescription, sensor.UserDescription);
                    response.info.Add(Constants.keyNameTimeStamp, sensor.NameTimeStamp.ToString( ));
                    response.info.Add(Constants.keyUserDescriptionTimeStamp, sensor.UserDescriptionTimeStamp.ToString( ));

                    if (DataLayer.UpdateSensor(response, sensor))
                    {
                        response.response = Constants.needsSyncing;
                    }
                    else
                    {
                        if (DataLayer.UpdateSensor(response, sensor))
                        {
                            response.statuscode = RESTRequestStatusCode.success;
                            response.status     = RESTRequestStatusCode.success.ToString( );

                            response.response = Constants.synced;

                            notification = new SilentNotification(sensor);

                            notification.NotificationType = Constants.needsSyncing;


                            DataLayer.GetDeviceTokensForAccount(sensor.AccountNo, out devicesTokens);

                            devicesTokens.Remove(devicetoken);

                            if (devicesTokens.Count > 0)
                            {
                                //Task.Factory.StartNew(() => { PushNotification( notification , devicesTokens ); });
                            }
                        }
                    }
                }
            }
        }