Skip to content
Snippets Groups Projects
register-controller.js 2.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • angular.module('RegisterController', ['matrixService'])
    .controller('RegisterController', ['$scope', '$location', 'matrixService', 'eventStreamService',
                                        function($scope, $location, matrixService, eventStreamService) {
        'use strict';
        
        // FIXME: factor out duplication with login-controller.js
        
        // Assume that this is hosted on the home server, in which case the URL
        // contains the home server.
        var hs_url = $location.protocol() + "://" + $location.host();
    
        if ($location.port() &&
            !($location.protocol() === "http" && $location.port() === 80) &&
            !($location.protocol() === "https" && $location.port() === 443))
        {
    
            hs_url += ":" + $location.port();
        }
        
        $scope.account = {
            homeserver: hs_url,
            desired_user_name: "",
            user_id: "",
            password: "",
            identityServer: "http://matrix.org:8090",
            pwd1: "",
            pwd2: "",
            displayName : ""
        };
        
        $scope.register = function() {
    
            // Set the urls
            matrixService.setConfig({
                homeserver: $scope.account.homeserver,
                identityServer: $scope.account.identityServer
            });
            
            if ($scope.account.pwd1 !== $scope.account.pwd2) {
                $scope.feedback = "Passwords don't match.";
                return;
            }
            else if ($scope.account.pwd1.length < 6) {
                $scope.feedback = "Password must be at least 6 characters.";
                return;
            }
    
            matrixService.register($scope.account.desired_user_name, $scope.account.pwd1).then(
                function(response) {
                    $scope.feedback = "Success";
                    // Update the current config 
                    var config = matrixService.config();
                    angular.extend(config, {
                        access_token: response.data.access_token,
                        user_id: response.data.user_id
                    });
                    matrixService.setConfig(config);
    
                    // And permanently save it
                    matrixService.saveConfig();
                    eventStreamService.resume();
                    
                    if ($scope.account.displayName) {
                        // FIXME: handle errors setting displayName
                        matrixService.setDisplayName($scope.account.displayName);
                    }
                    
                     // Go to the user's rooms list page
                    $location.url("home");
                },
                function(error) {
                    if (error.data) {
                        if (error.data.errcode === "M_USER_IN_USE") {
                            $scope.feedback = "Username already taken.";
                        }
                    }
                    else if (error.status === 0) {
                        $scope.feedback = "Unable to talk to the server.";
                    }
                });
        };
    
    }]);