[
  {
    "path": ".bowerrc",
    "content": "{\n    \"directory\": \"app/bower_components\"\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# editorconfig.org\n\nroot = true\n\n\n[*]\n\n# Change these settings to your own preference\nindent_style = space\nindent_size = 2\n\n# We recommend you to keep these unchanged\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\ndist\n.tmp\n.sass-cache\napp/bower_components\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\n  \"node\": true,\n  \"browser\": true,\n  \"esnext\": true,\n  \"bitwise\": true,\n  \"camelcase\": true,\n  \"curly\": true,\n  \"eqeqeq\": true,\n  \"immed\": true,\n  \"indent\": 2,\n  \"latedef\": true,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"quotmark\": \"single\",\n  \"regexp\": true,\n  \"undef\": true,\n  \"unused\": true,\n  \"strict\": true,\n  \"trailing\": true,\n  \"smarttabs\": true,\n  \"globals\": {\n    \"angular\": false\n  }\n}\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - '0.8'\n  - '0.10'\nbefore_script:\n  - 'npm install -g bower grunt-cli'\n  - 'bower install'\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "// Generated on 2014-04-21 using generator-angular 0.7.1\n'use strict';\n\n// # Globbing\n// for performance reasons we're only matching one level down:\n// 'test/spec/{,*/}*.js'\n// use this if you want to recursively match all subfolders:\n// 'test/spec/**/*.js'\n\nmodule.exports = function (grunt) {\n\n  // Load grunt tasks automatically\n  require('load-grunt-tasks')(grunt);\n\n  // Time how long tasks take. Can help when optimizing build times\n  require('time-grunt')(grunt);\n\n  // Define the configuration for all the tasks\n  grunt.initConfig({\n\n    // Project settings\n    yeoman: {\n      // configurable paths\n      app: require('./bower.json').appPath || 'app',\n      dist: 'dist'\n    },\n\n    // Watches files for changes and runs tasks based on the changed files\n    watch: {\n      js: {\n        files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],\n        tasks: ['newer:jshint:all'],\n        options: {\n          livereload: true\n        }\n      },\n      jsTest: {\n        files: ['test/spec/{,*/}*.js'],\n        tasks: ['newer:jshint:test', 'karma']\n      },\n      styles: {\n        files: ['<%= yeoman.app %>/styles/{,*/}*.css'],\n        tasks: ['newer:copy:styles', 'autoprefixer']\n      },\n      gruntfile: {\n        files: ['Gruntfile.js']\n      },\n      livereload: {\n        options: {\n          livereload: '<%= connect.options.livereload %>'\n        },\n        files: [\n          '<%= yeoman.app %>/{,*/}*.html',\n          '.tmp/styles/{,*/}*.css',\n          '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'\n        ]\n      }\n    },\n\n    // The actual grunt server settings\n    connect: {\n      options: {\n        port: 9000,\n        // Change this to '0.0.0.0' to access the server from outside.\n        hostname: 'localhost',\n        livereload: 35729\n      },\n      livereload: {\n        options: {\n          open: true,\n          base: [\n            '.tmp',\n            '<%= yeoman.app %>'\n          ]\n        }\n      },\n      test: {\n        options: {\n          port: 9001,\n          base: [\n            '.tmp',\n            'test',\n            '<%= yeoman.app %>'\n          ]\n        }\n      },\n      dist: {\n        options: {\n          base: '<%= yeoman.dist %>'\n        }\n      }\n    },\n\n    // Make sure code styles are up to par and there are no obvious mistakes\n    jshint: {\n      options: {\n        jshintrc: '.jshintrc',\n        reporter: require('jshint-stylish')\n      },\n      all: [\n        'Gruntfile.js',\n        '<%= yeoman.app %>/scripts/{,*/}*.js'\n      ],\n      test: {\n        options: {\n          jshintrc: 'test/.jshintrc'\n        },\n        src: ['test/spec/{,*/}*.js']\n      }\n    },\n\n    // Empties folders to start fresh\n    clean: {\n      dist: {\n        files: [{\n          dot: true,\n          src: [\n            '.tmp',\n            '<%= yeoman.dist %>/*',\n            '!<%= yeoman.dist %>/.git*'\n          ]\n        }]\n      },\n      server: '.tmp'\n    },\n\n    // Add vendor prefixed styles\n    autoprefixer: {\n      options: {\n        browsers: ['last 1 version']\n      },\n      dist: {\n        files: [{\n          expand: true,\n          cwd: '.tmp/styles/',\n          src: '{,*/}*.css',\n          dest: '.tmp/styles/'\n        }]\n      }\n    },\n\n    // Automatically inject Bower components into the app\n    'bower-install': {\n      app: {\n        html: '<%= yeoman.app %>/index.html',\n        ignorePath: '<%= yeoman.app %>/'\n      }\n    },\n\n\n\n\n\n    // Renames files for browser caching purposes\n    rev: {\n      dist: {\n        files: {\n          src: [\n            '<%= yeoman.dist %>/scripts/{,*/}*.js',\n            '<%= yeoman.dist %>/styles/{,*/}*.css',\n            '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',\n            '<%= yeoman.dist %>/styles/fonts/*'\n          ]\n        }\n      }\n    },\n\n    // Reads HTML for usemin blocks to enable smart builds that automatically\n    // concat, minify and revision files. Creates configurations in memory so\n    // additional tasks can operate on them\n    useminPrepare: {\n      html: '<%= yeoman.app %>/index.html',\n      options: {\n        dest: '<%= yeoman.dist %>'\n      }\n    },\n\n    // Performs rewrites based on rev and the useminPrepare configuration\n    usemin: {\n      html: ['<%= yeoman.dist %>/{,*/}*.html'],\n      css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],\n      options: {\n        assetsDirs: ['<%= yeoman.dist %>']\n      }\n    },\n\n    // The following *-min tasks produce minified files in the dist folder\n    imagemin: {\n      dist: {\n        files: [{\n          expand: true,\n          cwd: '<%= yeoman.app %>/images',\n          src: '{,*/}*.{png,jpg,jpeg,gif}',\n          dest: '<%= yeoman.dist %>/images'\n        }]\n      }\n    },\n    svgmin: {\n      dist: {\n        files: [{\n          expand: true,\n          cwd: '<%= yeoman.app %>/images',\n          src: '{,*/}*.svg',\n          dest: '<%= yeoman.dist %>/images'\n        }]\n      }\n    },\n    htmlmin: {\n      dist: {\n        options: {\n          collapseWhitespace: true,\n          collapseBooleanAttributes: true,\n          removeCommentsFromCDATA: true,\n          removeOptionalTags: true\n        },\n        files: [{\n          expand: true,\n          cwd: '<%= yeoman.dist %>',\n          src: ['*.html', 'views/{,*/}*.html'],\n          dest: '<%= yeoman.dist %>'\n        }]\n      }\n    },\n\n    // Allow the use of non-minsafe AngularJS files. Automatically makes it\n    // minsafe compatible so Uglify does not destroy the ng references\n    ngAnnotate: {\n      dist: {\n        files: [{\n          expand: true,\n          cwd: '.tmp/concat/scripts',\n          src: '*.js',\n          dest: '.tmp/concat/scripts'\n        }]\n      }\n    },\n\n    // Replace Google CDN references\n    cdnify: {\n      dist: {\n        html: ['<%= yeoman.dist %>/*.html']\n      }\n    },\n\n    // Copies remaining files to places other tasks can use\n    copy: {\n      dist: {\n        files: [{\n          expand: true,\n          dot: true,\n          cwd: '<%= yeoman.app %>',\n          dest: '<%= yeoman.dist %>',\n          src: [\n            '*.{ico,png,txt}',\n            '.htaccess',\n            '*.html',\n            'views/{,*/}*.html',\n            'bower_components/**/*',\n            'images/{,*/}*.{webp}',\n            'fonts/*'\n          ]\n        }, {\n          expand: true,\n          cwd: '.tmp/images',\n          dest: '<%= yeoman.dist %>/images',\n          src: ['generated/*']\n        }]\n      },\n      styles: {\n        expand: true,\n        cwd: '<%= yeoman.app %>/styles',\n        dest: '.tmp/styles/',\n        src: '{,*/}*.css'\n      }\n    },\n\n    // Run some tasks in parallel to speed up the build process\n    concurrent: {\n      server: [\n        'copy:styles'\n      ],\n      test: [\n        'copy:styles'\n      ],\n      dist: [\n        'copy:styles',\n        'imagemin',\n        'svgmin'\n      ]\n    },\n\n    // By default, your `index.html`'s <!-- Usemin block --> will take care of\n    // minification. These next options are pre-configured if you do not wish\n    // to use the Usemin blocks.\n    // cssmin: {\n    //   dist: {\n    //     files: {\n    //       '<%= yeoman.dist %>/styles/main.css': [\n    //         '.tmp/styles/{,*/}*.css',\n    //         '<%= yeoman.app %>/styles/{,*/}*.css'\n    //       ]\n    //     }\n    //   }\n    // },\n    // uglify: {\n    //   dist: {\n    //     files: {\n    //       '<%= yeoman.dist %>/scripts/scripts.js': [\n    //         '<%= yeoman.dist %>/scripts/scripts.js'\n    //       ]\n    //     }\n    //   }\n    // },\n    // concat: {\n    //   dist: {}\n    // },\n\n    // Test settings\n    karma: {\n      unit: {\n        configFile: 'karma.conf.js',\n        singleRun: true\n      }\n    }\n  });\n\n\n  grunt.registerTask('serve', function (target) {\n    if (target === 'dist') {\n      return grunt.task.run(['build', 'connect:dist:keepalive']);\n    }\n\n    grunt.task.run([\n      'clean:server',\n      'bower-install',\n      'concurrent:server',\n      'autoprefixer',\n      'connect:livereload',\n      'watch'\n    ]);\n  });\n\n  grunt.registerTask('server', function () {\n    grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');\n    grunt.task.run(['serve']);\n  });\n\n  grunt.registerTask('test', [\n    'clean:server',\n    'concurrent:test',\n    'autoprefixer',\n    'connect:test',\n    'karma'\n  ]);\n\n  grunt.registerTask('build', [\n    'clean:dist',\n    'bower-install',\n    'useminPrepare',\n    'concurrent:dist',\n    'autoprefixer',\n    'concat',\n    'ngAnnotate',\n    'copy:dist',\n    'cdnify',\n    'cssmin',\n    'uglify',\n    'rev',\n    'usemin',\n    'htmlmin'\n  ]);\n\n  grunt.registerTask('default', [\n    'newer:jshint',\n    'test',\n    'build'\n  ]);\n};\n"
  },
  {
    "path": "README.md",
    "content": "AngularJS Module for [Django REST Auth](https://github.com/Tivix/django-rest-auth)\n==================================================================================\n\nTo setup this module as a boilerplate project...\n---------------------------------------------------\n\n##### First, clone the repository:\n`git clone git@github.com:Tivix/angular-django-registration-auth.git`\n\n##### Change your directory to the cloned project:\n`cd angular-django-registration-auth`\n\n##### Then, install the project prerequisites:\n`npm install; bower install;`\n\n##### Customize API_URL and use_session to meet your project's requirements:\nGo to `app/scripts/services/djangoAuth.js`\n\n###### If using django-rest-auth demo, check out the docs for a list of endpoints: \nhttp://django-rest-auth.readthedocs.org/en/latest/api_endpoints.html\n\n##### Then, serve the Angular Django Registration Auth Demo:\n`grunt serve`\n\nTo integrate this module into an existing project...\n-------------------------------------------------------\n\n##### First, clone the repository:\n`git clone git@github.com:Tivix/angular-django-registration-auth.git`\n\nThe contents of the `app/scripts` folder can be copied to your own project.  \n  *Exclude controllers and app.js if you do not intend to use the default views/routes. (This will provide API access from the djangoAuth module only.)*\n\n##### Inject the angularDjangoRegistrationAuthApp into your own module.\n\n##### Inject the djangoAuth service into any controllers in which you need programmatic access to Django REST Auth.\n\n##### Customize API_URL and use_session to meet your project's requirements:\nGo to `app/scripts/services/djangoAuth.js`\n  *Alternatively, you can change these settings from a controller by changing the djangoAuth.API_URL and djangoAuth.use_session variables.*\n\n###### Please note: \n  you will need to include dependencies from bower.json to support the default views/controllers.  *They require bootstrap and its dependencies to function correctly.*\n  If you intend to use the default views/routes, copy the contents of app/views to your own views folder.\n  \nTodo: We encourage contributions for these aims...\n-----------------------------------------------------\n\n- [ ] Add support for JWT (JSON web tokens)\n\n- [ ] Better support for Bower and Grunt\n\n- [ ] Pick a better name for the module?\n"
  },
  {
    "path": "app/.buildignore",
    "content": "*.coffee"
  },
  {
    "path": "app/.htaccess",
    "content": "# Apache Configuration File\n\n# (!) Using `.htaccess` files slows down Apache, therefore, if you have access\n# to the main server config file (usually called `httpd.conf`), you should add\n# this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html.\n\n# ##############################################################################\n# # CROSS-ORIGIN RESOURCE SHARING (CORS)                                       #\n# ##############################################################################\n\n# ------------------------------------------------------------------------------\n# | Cross-domain AJAX requests                                                 |\n# ------------------------------------------------------------------------------\n\n# Enable cross-origin AJAX requests.\n# http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity\n# http://enable-cors.org/\n\n# <IfModule mod_headers.c>\n#    Header set Access-Control-Allow-Origin \"*\"\n# </IfModule>\n\n# ------------------------------------------------------------------------------\n# | CORS-enabled images                                                        |\n# ------------------------------------------------------------------------------\n\n# Send the CORS header for images when browsers request it.\n# https://developer.mozilla.org/en/CORS_Enabled_Image\n# http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html\n# http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/\n\n<IfModule mod_setenvif.c>\n    <IfModule mod_headers.c>\n        <FilesMatch \"\\.(gif|ico|jpe?g|png|svg|svgz|webp)$\">\n            SetEnvIf Origin \":\" IS_CORS\n            Header set Access-Control-Allow-Origin \"*\" env=IS_CORS\n        </FilesMatch>\n    </IfModule>\n</IfModule>\n\n# ------------------------------------------------------------------------------\n# | Web fonts access                                                           |\n# ------------------------------------------------------------------------------\n\n# Allow access from all domains for web fonts\n\n<IfModule mod_headers.c>\n    <FilesMatch \"\\.(eot|font.css|otf|ttc|ttf|woff)$\">\n        Header set Access-Control-Allow-Origin \"*\"\n    </FilesMatch>\n</IfModule>\n\n\n# ##############################################################################\n# # ERRORS                                                                     #\n# ##############################################################################\n\n# ------------------------------------------------------------------------------\n# | 404 error prevention for non-existing redirected folders                   |\n# ------------------------------------------------------------------------------\n\n# Prevent Apache from returning a 404 error for a rewrite if a directory\n# with the same name does not exist.\n# http://httpd.apache.org/docs/current/content-negotiation.html#multiviews\n# http://www.webmasterworld.com/apache/3808792.htm\n\nOptions -MultiViews\n\n# ------------------------------------------------------------------------------\n# | Custom error messages / pages                                              |\n# ------------------------------------------------------------------------------\n\n# You can customize what Apache returns to the client in case of an error (see\n# http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.:\n\nErrorDocument 404 /404.html\n\n\n# ##############################################################################\n# # INTERNET EXPLORER                                                          #\n# ##############################################################################\n\n# ------------------------------------------------------------------------------\n# | Better website experience                                                  |\n# ------------------------------------------------------------------------------\n\n# Force IE to render pages in the highest available mode in the various\n# cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf.\n\n<IfModule mod_headers.c>\n    Header set X-UA-Compatible \"IE=edge\"\n    # `mod_headers` can't match based on the content-type, however, we only\n    # want to send this header for HTML pages and not for the other resources\n    <FilesMatch \"\\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$\">\n        Header unset X-UA-Compatible\n    </FilesMatch>\n</IfModule>\n\n# ------------------------------------------------------------------------------\n# | Cookie setting from iframes                                                |\n# ------------------------------------------------------------------------------\n\n# Allow cookies to be set from iframes in IE.\n\n# <IfModule mod_headers.c>\n#   Header set P3P \"policyref=\\\"/w3c/p3p.xml\\\", CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"\"\n# </IfModule>\n\n# ------------------------------------------------------------------------------\n# | Screen flicker                                                             |\n# ------------------------------------------------------------------------------\n\n# Stop screen flicker in IE on CSS rollovers (this only works in\n# combination with the `ExpiresByType` directives for images from below).\n\n# BrowserMatch \"MSIE\" brokenvary=1\n# BrowserMatch \"Mozilla/4.[0-9]{2}\" brokenvary=1\n# BrowserMatch \"Opera\" !brokenvary\n# SetEnvIf brokenvary 1 force-no-vary\n\n\n# ##############################################################################\n# # MIME TYPES AND ENCODING                                                    #\n# ##############################################################################\n\n# ------------------------------------------------------------------------------\n# | Proper MIME types for all files                                            |\n# ------------------------------------------------------------------------------\n\n<IfModule mod_mime.c>\n\n  # Audio\n    AddType audio/mp4                                   m4a f4a f4b\n    AddType audio/ogg                                   oga ogg\n\n  # JavaScript\n    # Normalize to standard type (it's sniffed in IE anyways):\n    # http://tools.ietf.org/html/rfc4329#section-7.2\n    AddType application/javascript                      js jsonp\n    AddType application/json                            json\n\n  # Video\n    AddType video/mp4                                   mp4 m4v f4v f4p\n    AddType video/ogg                                   ogv\n    AddType video/webm                                  webm\n    AddType video/x-flv                                 flv\n\n  # Web fonts\n    AddType application/font-woff                       woff\n    AddType application/vnd.ms-fontobject               eot\n\n    # Browsers usually ignore the font MIME types and sniff the content,\n    # however, Chrome shows a warning if other MIME types are used for the\n    # following fonts.\n    AddType application/x-font-ttf                      ttc ttf\n    AddType font/opentype                               otf\n\n    # Make SVGZ fonts work on iPad:\n    # https://twitter.com/FontSquirrel/status/14855840545\n    AddType     image/svg+xml                           svg svgz\n    AddEncoding gzip                                    svgz\n\n  # Other\n    AddType application/octet-stream                    safariextz\n    AddType application/x-chrome-extension              crx\n    AddType application/x-opera-extension               oex\n    AddType application/x-shockwave-flash               swf\n    AddType application/x-web-app-manifest+json         webapp\n    AddType application/x-xpinstall                     xpi\n    AddType application/xml                             atom rdf rss xml\n    AddType image/webp                                  webp\n    AddType image/x-icon                                ico\n    AddType text/cache-manifest                         appcache manifest\n    AddType text/vtt                                    vtt\n    AddType text/x-component                            htc\n    AddType text/x-vcard                                vcf\n\n</IfModule>\n\n# ------------------------------------------------------------------------------\n# | UTF-8 encoding                                                             |\n# ------------------------------------------------------------------------------\n\n# Use UTF-8 encoding for anything served as `text/html` or `text/plain`.\nAddDefaultCharset utf-8\n\n# Force UTF-8 for certain file formats.\n<IfModule mod_mime.c>\n    AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml\n</IfModule>\n\n\n# ##############################################################################\n# # URL REWRITES                                                               #\n# ##############################################################################\n\n# ------------------------------------------------------------------------------\n# | Rewrite engine                                                             |\n# ------------------------------------------------------------------------------\n\n# Turning on the rewrite engine and enabling the `FollowSymLinks` option is\n# necessary for the following directives to work.\n\n# If your web host doesn't allow the `FollowSymlinks` option, you may need to\n# comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the\n# performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks\n\n# Also, some cloud hosting services require `RewriteBase` to be set:\n# http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site\n\n<IfModule mod_rewrite.c>\n    Options +FollowSymlinks\n  # Options +SymLinksIfOwnerMatch\n    RewriteEngine On\n  # RewriteBase /\n</IfModule>\n\n# ------------------------------------------------------------------------------\n# | Suppressing / Forcing the \"www.\" at the beginning of URLs                  |\n# ------------------------------------------------------------------------------\n\n# The same content should never be available under two different URLs especially\n# not with and without \"www.\" at the beginning. This can cause SEO problems\n# (duplicate content), therefore, you should choose one of the alternatives and\n# redirect the other one.\n\n# By default option 1 (no \"www.\") is activated:\n# http://no-www.org/faq.php?q=class_b\n\n# If you'd prefer to use option 2, just comment out all the lines from option 1\n# and uncomment the ones from option 2.\n\n# IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!\n\n# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n# Option 1: rewrite www.example.com → example.com\n\n<IfModule mod_rewrite.c>\n    RewriteCond %{HTTPS} !=on\n    RewriteCond %{HTTP_HOST} ^www\\.(.+)$ [NC]\n    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]\n</IfModule>\n\n# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n# Option 2: rewrite example.com → www.example.com\n\n# Be aware that the following might not be a good idea if you use \"real\"\n# subdomains for certain parts of your website.\n\n# <IfModule mod_rewrite.c>\n#    RewriteCond %{HTTPS} !=on\n#    RewriteCond %{HTTP_HOST} !^www\\..+$ [NC]\n#    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]\n# </IfModule>\n\n\n# ##############################################################################\n# # SECURITY                                                                   #\n# ##############################################################################\n\n# ------------------------------------------------------------------------------\n# | Content Security Policy (CSP)                                              |\n# ------------------------------------------------------------------------------\n\n# You can mitigate the risk of cross-site scripting and other content-injection\n# attacks by setting a Content Security Policy which whitelists trusted sources\n# of content for your site.\n\n# The example header below allows ONLY scripts that are loaded from the current\n# site's origin (no inline scripts, no CDN, etc). This almost certainly won't\n# work as-is for your site!\n\n# To get all the details you'll need to craft a reasonable policy for your site,\n# read: http://html5rocks.com/en/tutorials/security/content-security-policy (or\n# see the specification: http://w3.org/TR/CSP).\n\n# <IfModule mod_headers.c>\n#    Header set Content-Security-Policy \"script-src 'self'; object-src 'self'\"\n#    <FilesMatch \"\\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$\">\n#        Header unset Content-Security-Policy\n#    </FilesMatch>\n# </IfModule>\n\n# ------------------------------------------------------------------------------\n# | File access                                                                |\n# ------------------------------------------------------------------------------\n\n# Block access to directories without a default document.\n# Usually you should leave this uncommented because you shouldn't allow anyone\n# to surf through every directory on your server (which may includes rather\n# private places like the CMS's directories).\n\n<IfModule mod_autoindex.c>\n    Options -Indexes\n</IfModule>\n\n# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n# Block access to hidden files and directories.\n# This includes directories used by version control systems such as Git and SVN.\n\n<IfModule mod_rewrite.c>\n    RewriteCond %{SCRIPT_FILENAME} -d [OR]\n    RewriteCond %{SCRIPT_FILENAME} -f\n    RewriteRule \"(^|/)\\.\" - [F]\n</IfModule>\n\n# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n# Block access to backup and source files.\n# These files may be left by some text editors and can pose a great security\n# danger when anyone has access to them.\n\n<FilesMatch \"(^#.*#|\\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|sw[op])|~)$\">\n    Order allow,deny\n    Deny from all\n    Satisfy All\n</FilesMatch>\n\n# ------------------------------------------------------------------------------\n# | Secure Sockets Layer (SSL)                                                 |\n# ------------------------------------------------------------------------------\n\n# Rewrite secure requests properly to prevent SSL certificate warnings, e.g.:\n# prevent `https://www.example.com` when your certificate only allows\n# `https://secure.example.com`.\n\n# <IfModule mod_rewrite.c>\n#    RewriteCond %{SERVER_PORT} !^443\n#    RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]\n# </IfModule>\n\n# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n# Force client-side SSL redirection.\n\n# If a user types \"example.com\" in his browser, the above rule will redirect him\n# to the secure version of the site. That still leaves a window of opportunity\n# (the initial HTTP connection) for an attacker to downgrade or redirect the\n# request. The following header ensures that browser will ONLY connect to your\n# server via HTTPS, regardless of what the users type in the address bar.\n# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/\n\n# <IfModule mod_headers.c>\n#    Header set Strict-Transport-Security max-age=16070400;\n# </IfModule>\n\n# ------------------------------------------------------------------------------\n# | Server software information                                                |\n# ------------------------------------------------------------------------------\n\n# Avoid displaying the exact Apache version number, the description of the\n# generic OS-type and the information about Apache's compiled-in modules.\n\n# ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`!\n\n# ServerTokens Prod\n\n\n# ##############################################################################\n# # WEB PERFORMANCE                                                            #\n# ##############################################################################\n\n# ------------------------------------------------------------------------------\n# | Compression                                                                |\n# ------------------------------------------------------------------------------\n\n<IfModule mod_deflate.c>\n\n    # Force compression for mangled headers.\n    # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping\n    <IfModule mod_setenvif.c>\n        <IfModule mod_headers.c>\n            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\\s*,?\\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding\n            RequestHeader append Accept-Encoding \"gzip,deflate\" env=HAVE_Accept-Encoding\n        </IfModule>\n    </IfModule>\n\n    # Compress all output labeled with one of the following MIME-types\n    # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`\n    #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines\n    #  as `AddOutputFilterByType` is still in the core directives).\n    <IfModule mod_filter.c>\n        AddOutputFilterByType DEFLATE application/atom+xml \\\n                                      application/javascript \\\n                                      application/json \\\n                                      application/rss+xml \\\n                                      application/vnd.ms-fontobject \\\n                                      application/x-font-ttf \\\n                                      application/x-web-app-manifest+json \\\n                                      application/xhtml+xml \\\n                                      application/xml \\\n                                      font/opentype \\\n                                      image/svg+xml \\\n                                      image/x-icon \\\n                                      text/css \\\n                                      text/html \\\n                                      text/plain \\\n                                      text/x-component \\\n                                      text/xml\n    </IfModule>\n\n</IfModule>\n\n# ------------------------------------------------------------------------------\n# | Content transformations                                                    |\n# ------------------------------------------------------------------------------\n\n# Prevent some of the mobile network providers from modifying the content of\n# your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5.\n\n# <IfModule mod_headers.c>\n#    Header set Cache-Control \"no-transform\"\n# </IfModule>\n\n# ------------------------------------------------------------------------------\n# | ETag removal                                                               |\n# ------------------------------------------------------------------------------\n\n# Since we're sending far-future expires headers (see below), ETags can\n# be removed: http://developer.yahoo.com/performance/rules.html#etags.\n\n# `FileETag None` is not enough for every server.\n<IfModule mod_headers.c>\n    Header unset ETag\n</IfModule>\n\nFileETag None\n\n# ------------------------------------------------------------------------------\n# | Expires headers (for better cache control)                                 |\n# ------------------------------------------------------------------------------\n\n# The following expires headers are set pretty far in the future. If you don't\n# control versioning with filename-based cache busting, consider lowering the\n# cache time for resources like CSS and JS to something like 1 week.\n\n<IfModule mod_expires.c>\n\n    ExpiresActive on\n    ExpiresDefault                                      \"access plus 1 month\"\n\n  # CSS\n    ExpiresByType text/css                              \"access plus 1 year\"\n\n  # Data interchange\n    ExpiresByType application/json                      \"access plus 0 seconds\"\n    ExpiresByType application/xml                       \"access plus 0 seconds\"\n    ExpiresByType text/xml                              \"access plus 0 seconds\"\n\n  # Favicon (cannot be renamed!)\n    ExpiresByType image/x-icon                          \"access plus 1 week\"\n\n  # HTML components (HTCs)\n    ExpiresByType text/x-component                      \"access plus 1 month\"\n\n  # HTML\n    ExpiresByType text/html                             \"access plus 0 seconds\"\n\n  # JavaScript\n    ExpiresByType application/javascript                \"access plus 1 year\"\n\n  # Manifest files\n    ExpiresByType application/x-web-app-manifest+json   \"access plus 0 seconds\"\n    ExpiresByType text/cache-manifest                   \"access plus 0 seconds\"\n\n  # Media\n    ExpiresByType audio/ogg                             \"access plus 1 month\"\n    ExpiresByType image/gif                             \"access plus 1 month\"\n    ExpiresByType image/jpeg                            \"access plus 1 month\"\n    ExpiresByType image/png                             \"access plus 1 month\"\n    ExpiresByType video/mp4                             \"access plus 1 month\"\n    ExpiresByType video/ogg                             \"access plus 1 month\"\n    ExpiresByType video/webm                            \"access plus 1 month\"\n\n  # Web feeds\n    ExpiresByType application/atom+xml                  \"access plus 1 hour\"\n    ExpiresByType application/rss+xml                   \"access plus 1 hour\"\n\n  # Web fonts\n    ExpiresByType application/font-woff                 \"access plus 1 month\"\n    ExpiresByType application/vnd.ms-fontobject         \"access plus 1 month\"\n    ExpiresByType application/x-font-ttf                \"access plus 1 month\"\n    ExpiresByType font/opentype                         \"access plus 1 month\"\n    ExpiresByType image/svg+xml                         \"access plus 1 month\"\n\n</IfModule>\n\n# ------------------------------------------------------------------------------\n# | Filename-based cache busting                                               |\n# ------------------------------------------------------------------------------\n\n# If you're not using a build process to manage your filename version revving,\n# you might want to consider enabling the following directives to route all\n# requests such as `/css/style.12345.css` to `/css/style.css`.\n\n# To understand why this is important and a better idea than `*.css?v231`, read:\n# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring\n\n# <IfModule mod_rewrite.c>\n#    RewriteCond %{REQUEST_FILENAME} !-f\n#    RewriteCond %{REQUEST_FILENAME} !-d\n#    RewriteRule ^(.+)\\.(\\d+)\\.(js|css|png|jpg|gif)$ $1.$3 [L]\n# </IfModule>\n\n# ------------------------------------------------------------------------------\n# | File concatenation                                                         |\n# ------------------------------------------------------------------------------\n\n# Allow concatenation from within specific CSS and JS files, e.g.:\n# Inside of `script.combined.js` you could have\n#   <!--#include file=\"libs/jquery.js\" -->\n#   <!--#include file=\"plugins/jquery.idletimer.js\" -->\n# and they would be included into this single file.\n\n# <IfModule mod_include.c>\n#    <FilesMatch \"\\.combined\\.js$\">\n#        Options +Includes\n#        AddOutputFilterByType INCLUDES application/javascript application/json\n#        SetOutputFilter INCLUDES\n#    </FilesMatch>\n#    <FilesMatch \"\\.combined\\.css$\">\n#        Options +Includes\n#        AddOutputFilterByType INCLUDES text/css\n#        SetOutputFilter INCLUDES\n#    </FilesMatch>\n# </IfModule>\n\n# ------------------------------------------------------------------------------\n# | Persistent connections                                                     |\n# ------------------------------------------------------------------------------\n\n# Allow multiple requests to be sent over the same TCP connection:\n# http://httpd.apache.org/docs/current/en/mod/core.html#keepalive.\n\n# Enable if you serve a lot of static content but, be aware of the\n# possible disadvantages!\n\n# <IfModule mod_headers.c>\n#    Header set Connection Keep-Alive\n# </IfModule>\n"
  },
  {
    "path": "app/404.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Page Not Found :(</title>\n    <style>\n      ::-moz-selection {\n        background: #b3d4fc;\n        text-shadow: none;\n      }\n\n      ::selection {\n        background: #b3d4fc;\n        text-shadow: none;\n      }\n\n      html {\n        padding: 30px 10px;\n        font-size: 20px;\n        line-height: 1.4;\n        color: #737373;\n        background: #f0f0f0;\n        -webkit-text-size-adjust: 100%;\n        -ms-text-size-adjust: 100%;\n      }\n\n      html,\n      input {\n        font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n      }\n\n      body {\n        max-width: 500px;\n        _width: 500px;\n        padding: 30px 20px 50px;\n        border: 1px solid #b3b3b3;\n        border-radius: 4px;\n        margin: 0 auto;\n        box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;\n        background: #fcfcfc;\n      }\n\n      h1 {\n        margin: 0 10px;\n        font-size: 50px;\n        text-align: center;\n      }\n\n      h1 span {\n        color: #bbb;\n      }\n\n      h3 {\n        margin: 1.5em 0 0.5em;\n      }\n\n      p {\n        margin: 1em 0;\n      }\n\n      ul {\n        padding: 0 0 0 40px;\n        margin: 1em 0;\n      }\n\n      .container {\n        max-width: 380px;\n        _width: 380px;\n        margin: 0 auto;\n      }\n\n      /* google search */\n\n      #goog-fixurl ul {\n        list-style: none;\n        padding: 0;\n        margin: 0;\n      }\n\n      #goog-fixurl form {\n        margin: 0;\n      }\n\n      #goog-wm-qt,\n      #goog-wm-sb {\n        border: 1px solid #bbb;\n        font-size: 16px;\n        line-height: normal;\n        vertical-align: top;\n        color: #444;\n        border-radius: 2px;\n      }\n\n      #goog-wm-qt {\n        width: 220px;\n        height: 20px;\n        padding: 5px;\n        margin: 5px 10px 0 0;\n        box-shadow: inset 0 1px 1px #ccc;\n      }\n\n      #goog-wm-sb {\n        display: inline-block;\n        height: 32px;\n        padding: 0 10px;\n        margin: 5px 0 0;\n        white-space: nowrap;\n        cursor: pointer;\n        background-color: #f5f5f5;\n        background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);\n        background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);\n        background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);\n        background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);\n        -webkit-appearance: none;\n        -moz-appearance: none;\n        appearance: none;\n        *overflow: visible;\n        *display: inline;\n        *zoom: 1;\n      }\n\n      #goog-wm-sb:hover,\n      #goog-wm-sb:focus {\n        border-color: #aaa;\n        box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n        background-color: #f8f8f8;\n      }\n\n      #goog-wm-qt:hover,\n      #goog-wm-qt:focus {\n        border-color: #105cb6;\n        outline: 0;\n        color: #222;\n      }\n\n      input::-moz-focus-inner {\n        padding: 0;\n        border: 0;\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"container\">\n      <h1>Not found <span>:(</span></h1>\n      <p>Sorry, but the page you were trying to view does not exist.</p>\n      <p>It looks like this was the result of either:</p>\n      <ul>\n        <li>a mistyped address</li>\n        <li>an out-of-date link</li>\n      </ul>\n      <script>\n        var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;\n      </script>\n      <script src=\"//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js\"></script>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "app/index.html",
    "content": "<!doctype html>\n<!--[if lt IE 7]>      <html class=\"no-js lt-ie9 lt-ie8 lt-ie7\"> <![endif]-->\n<!--[if IE 7]>         <html class=\"no-js lt-ie9 lt-ie8\"> <![endif]-->\n<!--[if IE 8]>         <html class=\"no-js lt-ie9\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\"> <!--<![endif]-->\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title></title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width\">\n    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n    <!-- build:css styles/vendor.css -->\n    <!-- bower:css -->\n    <link rel=\"stylesheet\" href=\"bower_components/bootstrap/dist/css/bootstrap.css\" />\n    <!-- endbower -->\n    <!-- endbuild -->\n    <!-- build:css({.tmp,app}) styles/main.css -->\n    <link rel=\"stylesheet\" href=\"styles/main.css\">\n    <!-- endbuild -->\n  </head>\n  <body ng-app=\"angularDjangoRegistrationAuthApp\" ng-controller=\"MasterCtrl\">\n    <!--[if lt IE 7]>\n      <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n    <![endif]-->\n\n    <div class=\"container\">\n        <div class=\"header\">\n          <ul class=\"nav nav-pills pull-right\">\n            <li class=\"active\"><a ng-href=\"#/\">Home</a></li>\n          </ul>\n          <h3 class=\"text-muted\">Angular Django Registration Auth Demo</h3>\n        </div>\n\n        <!-- Add your site or application content here -->\n        <div ng-view=\"\"></div>\n    </div>\n\n    <!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->\n     <script>\n       (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n       (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n       m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n       })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n       ga('create', 'UA-XXXXX-X');\n       ga('send', 'pageview');\n    </script>\n\n    <!--[if lt IE 9]>\n    <script src=\"bower_components/es5-shim/es5-shim.js\"></script>\n    <script src=\"bower_components/json3/lib/json3.min.js\"></script>\n    <![endif]-->\n\n    <!-- build:js scripts/vendor.js -->\n    <!-- bower:js -->\n    <script src=\"bower_components/jquery/dist/jquery.js\"></script>\n    <script src=\"bower_components/angular/angular.js\"></script>\n    <script src=\"bower_components/bootstrap/dist/js/bootstrap.js\"></script>\n    <script src=\"bower_components/angular-resource/angular-resource.js\"></script>\n    <script src=\"bower_components/angular-cookies/angular-cookies.js\"></script>\n    <script src=\"bower_components/angular-sanitize/angular-sanitize.js\"></script>\n    <script src=\"bower_components/angular-route/angular-route.js\"></script>\n    <!-- endbower -->\n    <!-- endbuild -->\n\n        <!-- build:js({.tmp,app}) scripts/scripts.js -->\n        <script src=\"scripts/app.js\"></script>\n        <script src=\"scripts/controllers/main.js\"></script>\n        <script src=\"scripts/controllers/register.js\"></script>\n        <script src=\"scripts/controllers/passwordreset.js\"></script>\n        <script src=\"scripts/controllers/passwordresetconfirm.js\"></script>\n        <script src=\"scripts/controllers/login.js\"></script>\n        <script src=\"scripts/controllers/verifyemail.js\"></script>\n        <script src=\"scripts/controllers/logout.js\"></script>\n        <script src=\"scripts/controllers/userprofile.js\"></script>\n        <script src=\"scripts/controllers/passwordchange.js\"></script>\n        <script src=\"scripts/services/djangoAuth.js\"></script>\n        <script src=\"scripts/services/validate.js\"></script>\n        <script src=\"scripts/controllers/master.js\"></script>\n        <script src=\"scripts/controllers/restricted.js\"></script>\n        <script src=\"scripts/controllers/authrequired.js\"></script>\n        <!-- endbuild -->\n\n</body>\n</html>\n"
  },
  {
    "path": "app/robots.txt",
    "content": "# robotstxt.org\n\nUser-agent: *\n"
  },
  {
    "path": "app/scripts/app.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp', [\n  'ngCookies',\n  'ngResource',\n  'ngSanitize',\n  'ngRoute',\n])\n  .config(function ($routeProvider) {\n    $routeProvider\n      .when('/', {\n        templateUrl: 'views/main.html',\n        controller: 'MainCtrl',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/register', {\n        templateUrl: 'views/register.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/passwordReset', {\n        templateUrl: 'views/passwordreset.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/passwordResetConfirm/:firstToken/:passwordResetToken', {\n        templateUrl: 'views/passwordresetconfirm.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/login', {\n        templateUrl: 'views/login.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/verifyEmail/:emailVerificationToken', {\n        templateUrl: 'views/verifyemail.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/logout', {\n        templateUrl: 'views/logout.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/userProfile', {\n        templateUrl: 'views/userprofile.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/passwordChange', {\n        templateUrl: 'views/passwordchange.html',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/restricted', {\n        templateUrl: 'views/restricted.html',\n        controller: 'RestrictedCtrl',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus();\n          }],\n        }\n      })\n      .when('/authRequired', {\n        templateUrl: 'views/authrequired.html',\n        controller: 'AuthrequiredCtrl',\n        resolve: {\n          authenticated: ['djangoAuth', function(djangoAuth){\n            return djangoAuth.authenticationStatus(true);\n          }],\n        }\n      })\n      .otherwise({\n        redirectTo: '/'\n      });\n  })\n  .run(function(djangoAuth){\n    djangoAuth.initialize('//127.0.0.1:8000/rest-auth', false);\n  });\n"
  },
  {
    "path": "app/scripts/controllers/authrequired.js",
    "content": "'use strict';\n\n/**\n * @ngdoc function\n * @name angularDjangoRegistrationAuthApp.controller:AuthrequiredCtrl\n * @description\n * # AuthrequiredCtrl\n * Controller of the angularDjangoRegistrationAuthApp\n */\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('AuthrequiredCtrl', function ($scope) {\n    $scope.awesomeThings = [\n      'HTML5 Boilerplate',\n      'AngularJS',\n      'Karma'\n    ];\n  });\n"
  },
  {
    "path": "app/scripts/controllers/login.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('LoginCtrl', function ($scope, $location, djangoAuth, Validate) {\n    $scope.model = {'username':'','password':''};\n  \t$scope.complete = false;\n    $scope.login = function(formData){\n      $scope.errors = [];\n      Validate.form_validation(formData,$scope.errors);\n      if(!formData.$invalid){\n        djangoAuth.login($scope.model.username, $scope.model.password)\n        .then(function(data){\n        \t// success case\n        \t$location.path(\"/\");\n        },function(data){\n        \t// error case\n        \t$scope.errors = data;\n        });\n      }\n    }\n  });\n"
  },
  {
    "path": "app/scripts/controllers/logout.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('LogoutCtrl', function ($scope, $location, djangoAuth) {\n    djangoAuth.logout();\n  });\n"
  },
  {
    "path": "app/scripts/controllers/main.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('MainCtrl', function ($scope, $cookies, $location, djangoAuth) {\n    \n    $scope.login = function(){\n      djangoAuth.login(prompt('Username'),prompt('password'))\n      .then(function(data){\n        handleSuccess(data);\n      },handleError);\n    }\n    \n    $scope.logout = function(){\n      djangoAuth.logout()\n      .then(handleSuccess,handleError);\n    }\n    \n    $scope.resetPassword = function(){\n      djangoAuth.resetPassword(prompt('Email'))\n      .then(handleSuccess,handleError);\n    }\n    \n    $scope.register = function(){\n      djangoAuth.register(prompt('Username'),prompt('Password'),prompt('Email'))\n      .then(handleSuccess,handleError);\n    }\n    \n    $scope.verify = function(){\n      djangoAuth.verify(prompt(\"Please enter verification code\"))\n      .then(handleSuccess,handleError);\n    }\n    \n    $scope.goVerify = function(){\n      $location.path(\"/verifyEmail/\"+prompt(\"Please enter verification code\"));\n    }\n    \n    $scope.changePassword = function(){\n      djangoAuth.changePassword(prompt(\"Password\"), prompt(\"Repeat Password\"))\n      .then(handleSuccess,handleError);\n    }\n    \n    $scope.profile = function(){\n      djangoAuth.profile()\n      .then(handleSuccess,handleError);\n    }\n    \n    $scope.updateProfile = function(){\n      djangoAuth.updateProfile({'first_name': prompt(\"First Name\"), 'last_name': prompt(\"Last Name\"), 'email': prompt(\"Email\")})\n      .then(handleSuccess,handleError);\n    }\n    \n    $scope.confirmReset = function(){\n      djangoAuth.confirmReset(prompt(\"Code 1\"), prompt(\"Code 2\"), prompt(\"Password\"), prompt(\"Repeat Password\"))\n      .then(handleSuccess,handleError);\n    }\n\n    $scope.goConfirmReset = function(){\n      $location.path(\"/passwordResetConfirm/\"+prompt(\"Code 1\")+\"/\"+prompt(\"Code 2\"))\n    }\n    \n    var handleSuccess = function(data){\n      $scope.response = data;\n    }\n    \n    var handleError = function(data){\n      $scope.response = data;\n    }\n\n    $scope.show_login = true;\n    $scope.$on(\"djangoAuth.logged_in\", function(data){\n      $scope.show_login = false;\n    });\n    $scope.$on(\"djangoAuth.logged_out\", function(data){\n      $scope.show_login = true;\n    });\n\n  });\n"
  },
  {
    "path": "app/scripts/controllers/master.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('MasterCtrl', function ($scope, $location, djangoAuth) {\n    // Assume user is not logged in until we hear otherwise\n    $scope.authenticated = false;\n    // Wait for the status of authentication, set scope var to true if it resolves\n    djangoAuth.authenticationStatus(true).then(function(){\n        $scope.authenticated = true;\n    });\n    // Wait and respond to the logout event.\n    $scope.$on('djangoAuth.logged_out', function() {\n      $scope.authenticated = false;\n    });\n    // Wait and respond to the log in event.\n    $scope.$on('djangoAuth.logged_in', function() {\n      $scope.authenticated = true;\n    });\n    // If the user attempts to access a restricted page, redirect them back to the main page.\n    $scope.$on('$routeChangeError', function(ev, current, previous, rejection){\n      console.error(\"Unable to change routes.  Error: \", rejection)\n      $location.path('/restricted').replace();\n    });\n  });\n"
  },
  {
    "path": "app/scripts/controllers/passwordchange.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('PasswordchangeCtrl', function ($scope, djangoAuth, Validate) {\n    $scope.model = {'new_password1':'','new_password2':''};\n  \t$scope.complete = false;\n    $scope.changePassword = function(formData){\n      $scope.errors = [];\n      Validate.form_validation(formData,$scope.errors);\n      if(!formData.$invalid){\n        djangoAuth.changePassword($scope.model.new_password1, $scope.model.new_password2)\n        .then(function(data){\n        \t// success case\n        \t$scope.complete = true;\n        },function(data){\n        \t// error case\n        \t$scope.errors = data;\n        });\n      }\n    }\n  });\n"
  },
  {
    "path": "app/scripts/controllers/passwordreset.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('PasswordresetCtrl', function ($scope, djangoAuth, Validate) {\n    $scope.model = {'email':''};\n  \t$scope.complete = false;\n    $scope.resetPassword = function(formData){\n      $scope.errors = [];\n      Validate.form_validation(formData,$scope.errors);\n      if(!formData.$invalid){\n        djangoAuth.resetPassword($scope.model.email)\n        .then(function(data){\n        \t// success case\n        \t$scope.complete = true;\n        },function(data){\n        \t// error case\n        \t$scope.errors = data;\n        });\n      }\n    }\n  });\n"
  },
  {
    "path": "app/scripts/controllers/passwordresetconfirm.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('PasswordresetconfirmCtrl', function ($scope, $routeParams, djangoAuth, Validate) {\n    $scope.model = {'new_password1':'','new_password2':''};\n  \t$scope.complete = false;\n    $scope.confirmReset = function(formData){\n      $scope.errors = [];\n      Validate.form_validation(formData,$scope.errors);\n      if(!formData.$invalid){\n        djangoAuth.confirmReset($routeParams['firstToken'], $routeParams['passwordResetToken'], $scope.model.new_password1, $scope.model.new_password2)\n        .then(function(data){\n        \t// success case\n        \t$scope.complete = true;\n        },function(data){\n        \t// error case\n        \t$scope.errors = data;\n        });\n      }\n    }\n  });\n"
  },
  {
    "path": "app/scripts/controllers/register.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('RegisterCtrl', function ($scope, djangoAuth, Validate) {\n  \t$scope.model = {'username':'','password':'','email':''};\n  \t$scope.complete = false;\n    $scope.register = function(formData){\n      $scope.errors = [];\n      Validate.form_validation(formData,$scope.errors);\n      if(!formData.$invalid){\n        djangoAuth.register($scope.model.username,$scope.model.password1,$scope.model.password2,$scope.model.email)\n        .then(function(data){\n        \t// success case\n        \t$scope.complete = true;\n        },function(data){\n        \t// error case\n        \t$scope.errors = data;\n        });\n      }\n    }\n  });\n"
  },
  {
    "path": "app/scripts/controllers/restricted.js",
    "content": "'use strict';\n\n/**\n * @ngdoc function\n * @name angularDjangoRegistrationAuthApp.controller:RestrictedCtrl\n * @description\n * # RestrictedCtrl\n * Controller of the angularDjangoRegistrationAuthApp\n */\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('RestrictedCtrl', function ($scope, $location) {\n    $scope.$on('djangoAuth.logged_in', function() {\n      $location.path('/');\n    });\n  });\n"
  },
  {
    "path": "app/scripts/controllers/userprofile.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('UserprofileCtrl', function ($scope, djangoAuth, Validate) {\n    $scope.model = {'first_name':'','last_name':'','email':''};\n  \t$scope.complete = false;\n  \tdjangoAuth.profile().then(function(data){\n  \t\t$scope.model = data;\n  \t});\n    $scope.updateProfile = function(formData, model){\n      $scope.errors = [];\n      Validate.form_validation(formData,$scope.errors);\n      if(!formData.$invalid){\n        djangoAuth.updateProfile(model)\n        .then(function(data){\n        \t// success case\n        \t$scope.complete = true;\n        },function(data){\n        \t// error case\n        \t$scope.error = data;\n        });\n      }\n    }\n  });\n"
  },
  {
    "path": "app/scripts/controllers/verifyemail.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .controller('VerifyemailCtrl', function ($scope, $routeParams, djangoAuth) {\n    djangoAuth.verify($routeParams[\"emailVerificationToken\"]).then(function(data){\n    \t$scope.success = true;\n    },function(data){\n    \t$scope.failure = false;\n    });\n  });\n"
  },
  {
    "path": "app/scripts/services/djangoAuth.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .service('djangoAuth', function djangoAuth($q, $http, $cookies, $rootScope) {\n    // AngularJS will instantiate a singleton by calling \"new\" on this function\n    var service = {\n        /* START CUSTOMIZATION HERE */\n        // Change this to point to your Django REST Auth API\n        // e.g. /api/rest-auth  (DO NOT INCLUDE ENDING SLASH)\n        'API_URL': '',\n        // Set use_session to true to use Django sessions to store security token.\n        // Set use_session to false to store the security token locally and transmit it as a custom header.\n        'use_session': true,\n        /* END OF CUSTOMIZATION */\n        'authenticated': null,\n        'authPromise': null,\n        'request': function(args) {\n            // Let's retrieve the token from the cookie, if available\n            if($cookies.token){\n                $http.defaults.headers.common.Authorization = 'Token ' + $cookies.token;\n            }\n            // Continue\n            params = args.params || {}\n            args = args || {};\n            var deferred = $q.defer(),\n                url = this.API_URL + args.url,\n                method = args.method || \"GET\",\n                params = params,\n                data = args.data || {};\n            // Fire the request, as configured.\n            $http({\n                url: url,\n                withCredentials: this.use_session,\n                method: method.toUpperCase(),\n                headers: {'X-CSRFToken': $cookies['csrftoken']},\n                params: params,\n                data: data\n            })\n            .success(angular.bind(this,function(data, status, headers, config) {\n                deferred.resolve(data, status);\n            }))\n            .error(angular.bind(this,function(data, status, headers, config) {\n                console.log(\"error syncing with: \" + url);\n                // Set request status\n                if(data){\n                    data.status = status;\n                }\n                if(status == 0){\n                    if(data == \"\"){\n                        data = {};\n                        data['status'] = 0;\n                        data['non_field_errors'] = [\"Could not connect. Please try again.\"];\n                    }\n                    // or if the data is null, then there was a timeout.\n                    if(data == null){\n                        // Inject a non field error alerting the user\n                        // that there's been a timeout error.\n                        data = {};\n                        data['status'] = 0;\n                        data['non_field_errors'] = [\"Server timed out. Please try again.\"];\n                    }\n                }\n                deferred.reject(data, status, headers, config);\n            }));\n            return deferred.promise;\n        },\n        'register': function(username,password1,password2,email,more){\n            var data = {\n                'username':username,\n                'password1':password1,\n                'password2':password2,\n                'email':email\n            }\n            data = angular.extend(data,more);\n            return this.request({\n                'method': \"POST\",\n                'url': \"/registration/\",\n                'data' :data\n            });\n        },\n        'login': function(username,password){\n            var djangoAuth = this;\n            return this.request({\n                'method': \"POST\",\n                'url': \"/login/\",\n                'data':{\n                    'username':username,\n                    'password':password\n                }\n            }).then(function(data){\n                if(!djangoAuth.use_session){\n                    $http.defaults.headers.common.Authorization = 'Token ' + data.key;\n                    $cookies.token = data.key;\n                }\n                djangoAuth.authenticated = true;\n                $rootScope.$broadcast(\"djangoAuth.logged_in\", data);\n            });\n        },\n        'logout': function(){\n            var djangoAuth = this;\n            return this.request({\n                'method': \"POST\",\n                'url': \"/logout/\"\n            }).then(function(data){\n                delete $http.defaults.headers.common.Authorization;\n                delete $cookies.token;\n                djangoAuth.authenticated = false;\n                $rootScope.$broadcast(\"djangoAuth.logged_out\");\n            });\n        },\n        'changePassword': function(password1,password2){\n            return this.request({\n                'method': \"POST\",\n                'url': \"/password/change/\",\n                'data':{\n                    'new_password1':password1,\n                    'new_password2':password2\n                }\n            });\n        },\n        'resetPassword': function(email){\n            return this.request({\n                'method': \"POST\",\n                'url': \"/password/reset/\",\n                'data':{\n                    'email':email\n                }\n            });\n        },\n        'profile': function(){\n            return this.request({\n                'method': \"GET\",\n                'url': \"/user/\"\n            }); \n        },\n        'updateProfile': function(data){\n            return this.request({\n                'method': \"PATCH\",\n                'url': \"/user/\",\n                'data':data\n            }); \n        },\n        'verify': function(key){\n            return this.request({\n                'method': \"POST\",\n                'url': \"/registration/verify-email/\",\n                'data': {'key': key} \n            });            \n        },\n        'confirmReset': function(uid,token,password1,password2){\n            return this.request({\n                'method': \"POST\",\n                'url': \"/password/reset/confirm/\",\n                'data':{\n                    'uid': uid,\n                    'token': token,\n                    'new_password1':password1,\n                    'new_password2':password2\n                }\n            });\n        },\n        'authenticationStatus': function(restrict, force){\n            // Set restrict to true to reject the promise if not logged in\n            // Set to false or omit to resolve when status is known\n            // Set force to true to ignore stored value and query API\n            restrict = restrict || false;\n            force = force || false;\n            if(this.authPromise == null || force){\n                this.authPromise = this.request({\n                    'method': \"GET\",\n                    'url': \"/user/\"\n                })\n            }\n            var da = this;\n            var getAuthStatus = $q.defer();\n            if(this.authenticated != null && !force){\n                // We have a stored value which means we can pass it back right away.\n                if(this.authenticated == false && restrict){\n                    getAuthStatus.reject(\"User is not logged in.\");\n                }else{\n                    getAuthStatus.resolve();\n                }\n            }else{\n                // There isn't a stored value, or we're forcing a request back to\n                // the API to get the authentication status.\n                this.authPromise.then(function(){\n                    da.authenticated = true;\n                    getAuthStatus.resolve();\n                },function(){\n                    da.authenticated = false;\n                    if(restrict){\n                        getAuthStatus.reject(\"User is not logged in.\");\n                    }else{\n                        getAuthStatus.resolve();\n                    }\n                });\n            }\n            return getAuthStatus.promise;\n        },\n        'initialize': function(url, sessions){\n            this.API_URL = url;\n            this.use_session = sessions;\n            return this.authenticationStatus();\n        }\n\n    }\n    return service;\n  });\n"
  },
  {
    "path": "app/scripts/services/validate.js",
    "content": "'use strict';\n\nangular.module('angularDjangoRegistrationAuthApp')\n  .service('Validate', function Validate() {\n    return {\n        'message': {\n            'minlength': 'This value is not long enough.',\n            'maxlength': 'This value is too long.',\n            'email': 'A properly formatted email address is required.',\n            'required': 'This field is required.'\n        },\n        'more_messages': {\n            'demo': {\n                'required': 'Here is a sample alternative required message.'\n            }\n        },\n        'check_more_messages': function(name,error){\n            return (this.more_messages[name] || [])[error] || null;\n        },\n        validation_messages: function(field,form,error_bin){\n            var messages = [];\n            for(var e in form[field].$error){\n                if(form[field].$error[e]){\n                    var special_message = this.check_more_messages(field,e);\n                    if(special_message){\n                        messages.push(special_message);\n                    }else if(this.message[e]){\n                        messages.push(this.message[e]);\n                    }else{\n                        messages.push(\"Error: \" + e)\n                    }\n                }\n            }\n            var deduped_messages = [];\n            angular.forEach(messages, function(el, i){\n                if(deduped_messages.indexOf(el) === -1) deduped_messages.push(el);\n            });\n            if(error_bin){\n                error_bin[field] = deduped_messages;\n            }\n        },\n        'form_validation': function(form,error_bin){\n            for(var field in form){\n                if(field.substr(0,1) != \"$\"){\n                    this.validation_messages(field,form,error_bin);\n                }\n            }\n        }\n    }\n});"
  },
  {
    "path": "app/styles/main.css",
    "content": "/* Space out content a bit */\nbody {\n  padding-top: 20px;\n  padding-bottom: 20px;\n}\n\n/* Everything but the jumbotron gets side spacing for mobile first views */\n.header,\n.marketing,\n.footer {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\n/* Custom page header */\n.header {\n  border-bottom: 1px solid #e5e5e5;\n}\n/* Make the masthead heading the same height as the navigation */\n.header h3 {\n  margin-top: 0;\n  margin-bottom: 0;\n  line-height: 40px;\n  padding-bottom: 19px;\n}\n\n/* Custom page footer */\n.footer {\n  padding-top: 19px;\n  color: #777;\n  border-top: 1px solid #e5e5e5;\n}\n\n/* Customize container */\n@media (min-width: 768px) {\n  .container {\n    max-width: 730px;\n  }\n}\n.container-narrow > hr {\n  margin: 30px 0;\n}\n\n/* Main marketing message and sign up button */\n.jumbotron {\n  text-align: center;\n  border-bottom: 1px solid #e5e5e5;\n}\n.jumbotron .btn {\n  font-size: 21px;\n  padding: 14px 24px;\n}\n\n/* Supporting marketing content */\n.marketing {\n  margin: 40px 0;\n}\n.marketing p + h4 {\n  margin-top: 28px;\n}\n\n/* Responsive: Portrait tablets and up */\n@media screen and (min-width: 768px) {\n  /* Remove the padding we set earlier */\n  .header,\n  .marketing,\n  .footer {\n    padding-left: 0;\n    padding-right: 0;\n  }\n  /* Space out the masthead */\n  .header {\n    margin-bottom: 30px;\n  }\n  /* Remove the bottom border on the jumbotron for visual effect */\n  .jumbotron {\n    border-bottom: 0;\n  }\n}\n"
  },
  {
    "path": "app/views/authrequired.html",
    "content": "<p>This is a restricted view.  You must be authenticated to view it.</p>\n"
  },
  {
    "path": "app/views/login.html",
    "content": "<div id=\"login_view\" ng-controller=\"LoginCtrl\">\n  <form role=\"form\" ng-submit=\"login(loginForm)\" name=\"loginForm\" novalidate>\n    <div class=\"form-group\">\n      <label for=\"id_username\">Username</label>\n      <input name=\"username\" id=\"id_username\" type=\"text\" ng-model=\"model.username\" placeholder=\"Username\" class=\"form-control\" required />\n    </div>\n    <div class=\"alert alert-danger\" ng-repeat=\"error in errors.username\">{{error}}</div>\n    <div class=\"form-group\">\n      <label for=\"id_password\">Password</label>\n      <input name=\"password\" id=\"id_password\" type=\"password\" ng-model=\"model.password\" placeholder=\"Password\" class=\"form-control\" required />\n    </div>\n    <div class=\"alert alert-danger\" ng-repeat=\"error in errors.password\">{{error}}</div>\n    <div class=\"alert alert-danger\" ng-repeat=\"error in errors.non_field_errors\">{{error}}</div>\n    <div class=\"alert alert-danger\" ng-if=\"error\">{{error}}</div>\n    <button type=\"submit\" class=\"btn btn-primary\">Login</button>\n  </form>\n</div>\n"
  },
  {
    "path": "app/views/logout.html",
    "content": "<div id=\"logout_view\" ng-controller=\"LogoutCtrl\">\n\t<div class=\"alert alert-info\">You have logged out.</div>\n</div>"
  },
  {
    "path": "app/views/main.html",
    "content": "<h4>Routes</h4>\n    <p>\n        <a ng-hide=\"authenticated\" href=\"#/login\" class=\"btn btn-primary\">Login</a>\n        <a ng-hide=\"authenticated\" href=\"#/passwordReset\" class=\"btn btn-primary\">Send Password Reset</a>\n        <a ng-hide=\"authenticated\" ng-click=\"goConfirmReset()\" class=\"btn btn-primary\">Confirm Password Reset</a>\n    </p>\n    <p>\n        <a ng-show=\"authenticated\" href=\"#/logout\" class=\"btn btn-primary\">Logout</a>\n        <a ng-hide=\"authenticated\" ng-href=\"#/register\" class=\"btn btn-primary\">Register</a>\n        <a ng-click=\"goVerify()\" class=\"btn btn-primary\">Verify Email</a>\n        <a ng-show=\"authenticated\" href=\"#/passwordChange\" class=\"btn btn-primary\">Change Password</a>\n        <a ng-show=\"authenticated\" href=\"#/userProfile\" class=\"btn btn-primary\">Profile</a>\n        <a href=\"#/authRequired\" class=\"btn btn-primary\">Restricted Page</a>\n    </p>\n<hr/>\n<h4>Kitchen Sink Demo</h4>\n<div style=\"margin-bottom:25px;\">\n  <div style=\"margin-bottom:15px;\">\n    <button ng-hide=\"authenticated\" ng-click=\"login()\" class=\"btn btn-primary\">Login</button>\n    <button ng-show=\"authenticated\" ng-click=\"logout()\" class=\"btn btn-primary\">Logout</button>\n    <button ng-hide=\"authenticated\" ng-click=\"resetPassword()\" class=\"btn btn-primary\">Send Password Reset</button>\n    <button ng-hide=\"authenticated\" ng-click=\"confirmReset()\" class=\"btn btn-primary\">Confirm Password Reset</button>\n    <button ng-hide=\"authenticated\" ng-click=\"register()\" class=\"btn btn-primary\">Register</button>\n    <button ng-click=\"verify()\" class=\"btn btn-primary\">Verify Email</button>\n    <button ng-show=\"authenticated\" ng-click=\"changePassword()\" class=\"btn btn-primary\">Change Password</button>\n    <button ng-show=\"authenticated\" ng-click=\"profile()\" class=\"btn btn-primary\">Get Profile</button>\n    <button ng-show=\"authenticated\" ng-click=\"updateProfile()\" class=\"btn btn-primary\">Update Profile</button>\n  </div>\n\n  <p><textarea style=\"width:90%;height:200px;\">{{response}}</textarea></p>\n\n</div>\n\n<hr/>\n<h4>ngInclude Demo - Login</h4>\n<div ng-if=\"show_login\" ng-include=\"'views/login.html'\"></div>\n<div ng-if=\"!show_login\" class=\"alert alert-info\">You have logged in.</div>\n\n\n<div class=\"footer\">\n  <p>Tivix</p>\n</div>\n\n"
  },
  {
    "path": "app/views/passwordchange.html",
    "content": "<div id=\"passwordChange_view\" ng-controller=\"PasswordchangeCtrl\">\n    <div ng-if=\"complete == false\">\n        <form role=\"form\" ng-submit=\"changePassword(changePasswordForm)\" name=\"changePasswordForm\" ng-if=\"authenticated\" novalidate>\n            <div class=\"form-group\">\n                <label for=\"id_password1\">New Password</label>\n                <input name=\"new_password1\" id=\"id_password1\" type=\"password\" ng-model=\"model.new_password1\" placeholder=\"New Password\" class=\"form-control\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.new_password1\">{{error}}</div>\n            <div class=\"form-group\">\n                <label for=\"id_password2\">Repeat Password</label>\n                <input name=\"new_password2\" id=\"id_password2\" type=\"password\" ng-model=\"model.new_password2\" placeholder=\"Repeat Password\" class=\"form-control\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.new_password2\">{{error}}</div>\n            <button ng-show=\"authenticated\" type=\"submit\" class=\"btn btn-primary\">Change Password</button>\n        </form>\n        <div class=\"alert alert-warning\" ng-if=\"authenticated != true\">You need to be logged in to do this!</div>\n    </div>\n    <div ng-if=\"complete == true\">\n        <div class=\"alert alert-success\">You have changed your password.</div>\n    </div>\n</div>\n"
  },
  {
    "path": "app/views/passwordreset.html",
    "content": "<div id=\"passwordReset_view\" ng-controller=\"PasswordresetCtrl\">\n    <div ng-if=\"complete == false\">\n        <form role=\"form\" ng-if=\"authenticated != true\" name=\"passwordResetForm\" ng-submit=\"resetPassword(passwordResetForm)\" novalidate>\n            <div class=\"form-group\">\n                <label for=\"id_email\">Email</label>\n                <input name=\"email\" id=\"id_email\" type=\"text\" ng-model=\"model.email\" placeholder=\"Email\" class=\"form-control\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.email\">{{error}}</div>\n            <button ng-hide=\"authenticated\" type=\"submit\" class=\"btn btn-primary\">Reset Password</button>\n        </form>\n        <p ng-if=\"authenticated\">You are already logged in!  You don't need to reset your password.</p>\n    </div>\n    <div ng-if=\"complete == true\">\n        <div class=\"alert alert-success\">You should receive an email shortly with instructions on how to reset your account password.</div>\n    </div>\n</div>\n"
  },
  {
    "path": "app/views/passwordresetconfirm.html",
    "content": "<div id=\"passwordResetConfirm_view\" ng-controller=\"PasswordresetconfirmCtrl\">\n    <div ng-if=\"complete == false\">\n        <form role=\"form\" ng-if=\"authenticated != true\" ng-submit=\"confirmReset(confirmResetForm)\" name=\"confirmResetForm\" novalidate>\n            <div class=\"form-group\">\n                <label for=\"id_password1\">New Password</label>\n                <input name=\"password1\" id=\"id_password1\" type=\"password\" ng-model=\"model.new_password1\" placeholder=\"New Password\" class=\"form-control\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.password1\">{{error}}</div>\n            <div class=\"form-group\">\n                <label for=\"id_password2\">Repeat Password</label>\n                <input name=\"password2\" id=\"id_password2\" type=\"password\" ng-model=\"model.new_password2\" placeholder=\"Repeat Password\" class=\"form-control\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.password2\">{{error}}</div>\n            <button type=\"submit\" ng-hide=\"authenticated\" class=\"btn btn-primary\">Reset Password</button>\n        </form>\n        <p ng-if=\"authenticated\">You are already logged in!  You don't need to reset your password.</p>\n    </div>\n    <div ng-if=\"complete == true\">\n        <div class=\"alert alert-success\">You have changed your password.</div>\n    </div>\n</div>\n"
  },
  {
    "path": "app/views/register.html",
    "content": "<div id=\"register_view\" ng-controller=\"RegisterCtrl\">\n    <div ng-if=\"complete == false\">\n        <form role=\"form\" ng-if=\"authenticated != true\" name=\"registerForm\" ng-submit=\"register(registerForm)\" novalidate>\n            <div class=\"form-group\">\n                <label for=\"id_username\">Username</label>\n                <input name=\"username\" id=\"id_username\" class=\"form-control\" type=\"text\" ng-model=\"model.username\" placeholder=\"Username\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.username\">{{error}}</div>\n            <div class=\"form-group\">\n                <label for=\"id_password\">Password</label>\n                <input name=\"password1\" id=\"id_password1\" class=\"form-control\" type=\"password\" ng-model=\"model.password1\" placeholder=\"Password\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.password1\">{{error}}</div>\n            <div class=\"form-group\">\n                <label for=\"id_password\">Repeat Password</label>\n                <input name=\"password\" id=\"id_password2\" class=\"form-control\" type=\"password\" ng-model=\"model.password2\" placeholder=\"Repeat Password\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.password2\">{{error}}</div>\n            <div class=\"form-group\">\n                <label for=\"id_email\">Email</label>\n                <input name=\"email\" id=\"id_email\" class=\"form-control\" type=\"email\" ng-model=\"model.email\" placeholder=\"Email\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.email\">{{error}}</div>\n            <button ng-hide=\"authenticated\" type=\"submit\" class=\"btn btn-primary\">Register</button>\n        </form>\n        <p ng-if=\"authenticated\">You are already logged in!  You don't need to register.</p>\n    </div>\n    <div ng-if=\"complete == true\">\n        <div class=\"alert alert-success\">Great!  You've just registered.  You should receive an email shortly with instructions on how to activate your account.</div>\n    </div>\n</div>"
  },
  {
    "path": "app/views/restricted.html",
    "content": "<p>You have attempted to access a restricted page.  Please login to continue.</p>\n<div ng-include=\"'views/login.html'\"></div>"
  },
  {
    "path": "app/views/userprofile.html",
    "content": "<div id=\"userProfile_view\" ng-controller=\"UserprofileCtrl\">\n    <div ng-if=\"complete == false\">\n        <form role=\"form\" ng-if=\"authenticated\" name=\"userProfileForm\" ng-submit=\"updateProfile(userProfileForm, model)\" novalidate>\n            <div class=\"form-group\">\n                <label for=\"id_first_name\">First Name</label>\n                <input name=\"first_name\" id=\"id_first_name\" class=\"form-control\" type=\"text\" ng-model=\"model.first_name\" placeholder=\"First Name\" />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.first_name\">{{error}}</div>\n            <div class=\"form-group\">\n                <label for=\"id_last_name\">Last Name</label>\n                <input name=\"last_name\" id=\"id_last_name\" class=\"form-control\" type=\"text\" ng-model=\"model.last_name\" placeholder=\"Last Name\" />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.last_name\">{{error}}</div>\n            <div class=\"form-group\">\n                <label for=\"id_email\">Email</label>\n                <input name=\"email\" id=\"id_email\" class=\"form-control\" type=\"email\" ng-model=\"model.email\" placeholder=\"Email\" required />\n            </div>\n            <div class=\"alert alert-danger\" ng-repeat=\"error in errors.email\">{{error}}</div>\n            <button type=\"submit\" ng-show=\"authenticated\" class=\"btn btn-primary\">Update Profile</button>\n        </form>\n        <div class=\"alert alert-warning\" ng-if=\"authenticated == false\">You need to be logged in to do this.</div>\n    </div>\n    <div ng-if=\"complete == true\">\n        <div class=\"alert alert-success\">You have updated your profile.</div>\n    </div>\n</div>\n"
  },
  {
    "path": "app/views/verifyemail.html",
    "content": "<div id=\"verifyEmail_view\" ng-controller=\"VerifyemailCtrl\">\n\t<div ng-if=\"success\" class=\"alert alert-success\">You have successfully verified your email address.</div>\n\t<div ng-if=\"failure\" class=\"alert alert-warning\">Sorry, there's been an error.</div>\n</div>\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"angular-django-registration-auth\",\n  \"version\": \"0.0.0\",\n  \"dependencies\": {\n    \"angular\": \"1.2.16\",\n    \"json3\": \"~3.2.6\",\n    \"es5-shim\": \"~2.1.0\",\n    \"jquery\": \"~1.10.2\",\n    \"bootstrap\": \"~3.1.1\",\n    \"angular-resource\": \"1.2.16\",\n    \"angular-cookies\": \"1.2.16\",\n    \"angular-sanitize\": \"1.2.16\",\n    \"angular-route\": \"1.2.16\"\n  },\n  \"devDependencies\": {\n    \"angular-mocks\": \"1.2.16\",\n    \"angular-scenario\": \"1.2.16\"\n  }\n}\n"
  },
  {
    "path": "karma-e2e.conf.js",
    "content": "// Karma configuration\n// http://karma-runner.github.io/0.10/config/configuration-file.html\n\nmodule.exports = function(config) {\n  config.set({\n    // base path, that will be used to resolve files and exclude\n    basePath: '',\n\n    // testing framework to use (jasmine/mocha/qunit/...)\n    frameworks: ['ng-scenario'],\n\n    // list of files / patterns to load in the browser\n    files: [\n      'test/e2e/**/*.js'\n    ],\n\n    // list of files / patterns to exclude\n    exclude: [],\n\n    // web server port\n    port: 8080,\n\n    // level of logging\n    // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG\n    logLevel: config.LOG_INFO,\n\n\n    // enable / disable watching file and executing tests whenever any file changes\n    autoWatch: false,\n\n\n    // Start these browsers, currently available:\n    // - Chrome\n    // - ChromeCanary\n    // - Firefox\n    // - Opera\n    // - Safari (only Mac)\n    // - PhantomJS\n    // - IE (only Windows)\n    browsers: ['Chrome'],\n\n\n    // Continuous Integration mode\n    // if true, it capture browsers, run tests and exit\n    singleRun: false\n\n    // Uncomment the following lines if you are using grunt's server to run the tests\n    // proxies: {\n    //   '/': 'http://localhost:9000/'\n    // },\n    // URL root prevent conflicts with the site root\n    // urlRoot: '_karma_'\n  });\n};\n"
  },
  {
    "path": "karma.conf.js",
    "content": "// Karma configuration\n// http://karma-runner.github.io/0.10/config/configuration-file.html\n\nmodule.exports = function(config) {\n  config.set({\n    // base path, that will be used to resolve files and exclude\n    basePath: '',\n\n    // testing framework to use (jasmine/mocha/qunit/...)\n    frameworks: ['jasmine'],\n\n    // list of files / patterns to load in the browser\n    files: [\n      'app/bower_components/angular/angular.js',\n      'app/bower_components/angular-mocks/angular-mocks.js',\n      'app/bower_components/angular-resource/angular-resource.js',\n      'app/bower_components/angular-cookies/angular-cookies.js',\n      'app/bower_components/angular-sanitize/angular-sanitize.js',\n      'app/bower_components/angular-route/angular-route.js',\n      'app/scripts/*.js',\n      'app/scripts/**/*.js',\n      'test/mock/**/*.js',\n      'test/spec/**/*.js'\n    ],\n\n    // list of files / patterns to exclude\n    exclude: [],\n\n    // web server port\n    port: 8080,\n\n    // level of logging\n    // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG\n    logLevel: config.LOG_INFO,\n\n\n    // enable / disable watching file and executing tests whenever any file changes\n    autoWatch: false,\n\n\n    // Start these browsers, currently available:\n    // - Chrome\n    // - ChromeCanary\n    // - Firefox\n    // - Opera\n    // - Safari (only Mac)\n    // - PhantomJS\n    // - IE (only Windows)\n    browsers: ['Chrome'],\n\n\n    // Continuous Integration mode\n    // if true, it capture browsers, run tests and exit\n    singleRun: false\n  });\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"angulardjangoregistrationauth\",\n  \"version\": \"0.0.0\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"grunt\": \"~0.4.4\",\n    \"grunt-autoprefixer\": \"~0.4.0\",\n    \"grunt-bower-install\": \"~0.7.0\",\n    \"grunt-concurrent\": \"~0.4.1\",\n    \"grunt-contrib-clean\": \"~0.5.0\",\n    \"grunt-contrib-coffee\": \"~0.7.0\",\n    \"grunt-contrib-compass\": \"~0.6.0\",\n    \"grunt-contrib-concat\": \"~0.3.0\",\n    \"grunt-contrib-connect\": \"~0.5.0\",\n    \"grunt-contrib-copy\": \"~0.4.1\",\n    \"grunt-contrib-cssmin\": \"~0.7.0\",\n    \"grunt-contrib-htmlmin\": \"~0.1.3\",\n    \"grunt-contrib-imagemin\": \"~0.3.0\",\n    \"grunt-contrib-jshint\": \"~0.7.1\",\n    \"grunt-contrib-uglify\": \"~0.2.0\",\n    \"grunt-contrib-watch\": \"~0.5.2\",\n    \"grunt-google-cdn\": \"~0.2.0\",\n    \"grunt-newer\": \"~0.5.4\",\n    \"grunt-ng-annotate\": \"~0.10.0\",\n    \"grunt-rev\": \"~0.1.0\",\n    \"grunt-svgmin\": \"~0.2.0\",\n    \"grunt-usemin\": \"~2.0.0\",\n    \"jshint-stylish\": \"~0.1.3\",\n    \"load-grunt-tasks\": \"~0.2.0\",\n    \"time-grunt\": \"~0.2.1\"\n  },\n  \"engines\": {\n    \"node\": \">=0.8.0\"\n  },\n  \"scripts\": {\n    \"test\": \"grunt test\"\n  }\n}\n"
  },
  {
    "path": "test/.jshintrc",
    "content": "{\n  \"node\": true,\n  \"browser\": true,\n  \"esnext\": true,\n  \"bitwise\": true,\n  \"camelcase\": true,\n  \"curly\": true,\n  \"eqeqeq\": true,\n  \"immed\": true,\n  \"indent\": 2,\n  \"latedef\": true,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"quotmark\": \"single\",\n  \"regexp\": true,\n  \"undef\": true,\n  \"unused\": true,\n  \"strict\": true,\n  \"trailing\": true,\n  \"smarttabs\": true,\n  \"globals\": {\n    \"after\": false,\n    \"afterEach\": false,\n    \"angular\": false,\n    \"before\": false,\n    \"beforeEach\": false,\n    \"browser\": false,\n    \"describe\": false,\n    \"expect\": false,\n    \"inject\": false,\n    \"it\": false,\n    \"jasmine\": false,\n    \"spyOn\": false\n  }\n}\n\n"
  },
  {
    "path": "test/runner.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <title>End2end Test Runner</title>\n    <script src=\"vendor/angular-scenario.js\" ng-autotest></script>\n    <script src=\"scenarios.js\"></script>\n  </head>\n  <body>\n  </body>\n</html>"
  },
  {
    "path": "test/spec/controllers/authrequired.js",
    "content": "'use strict';\n\ndescribe('Controller: AuthrequiredCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var AuthrequiredCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    AuthrequiredCtrl = $controller('AuthrequiredCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/login.js",
    "content": "'use strict';\n\ndescribe('Controller: LoginCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var LoginCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    LoginCtrl = $controller('LoginCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/logout.js",
    "content": "'use strict';\n\ndescribe('Controller: LogoutCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var LogoutCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    LogoutCtrl = $controller('LogoutCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/main.js",
    "content": "'use strict';\n\ndescribe('Controller: MainCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var MainCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    MainCtrl = $controller('MainCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/master.js",
    "content": "'use strict';\n\ndescribe('Controller: MasterCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var MasterCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    MasterCtrl = $controller('MasterCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/passwordchange.js",
    "content": "'use strict';\n\ndescribe('Controller: PasswordchangeCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var PasswordchangeCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    PasswordchangeCtrl = $controller('PasswordchangeCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/passwordreset.js",
    "content": "'use strict';\n\ndescribe('Controller: PasswordresetCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var PasswordresetCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    PasswordresetCtrl = $controller('PasswordresetCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/passwordresetconfirm.js",
    "content": "'use strict';\n\ndescribe('Controller: PasswordresetconfirmCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var PasswordresetconfirmCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    PasswordresetconfirmCtrl = $controller('PasswordresetconfirmCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/register.js",
    "content": "'use strict';\n\ndescribe('Controller: RegisterCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var RegisterCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    RegisterCtrl = $controller('RegisterCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/restricted.js",
    "content": "'use strict';\n\ndescribe('Controller: RestrictedCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var RestrictedCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    RestrictedCtrl = $controller('RestrictedCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/userprofile.js",
    "content": "'use strict';\n\ndescribe('Controller: UserprofileCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var UserprofileCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    UserprofileCtrl = $controller('UserprofileCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/controllers/verifyemail.js",
    "content": "'use strict';\n\ndescribe('Controller: VerifyemailCtrl', function () {\n\n  // load the controller's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  var VerifyemailCtrl,\n    scope;\n\n  // Initialize the controller and a mock scope\n  beforeEach(inject(function ($controller, $rootScope) {\n    scope = $rootScope.$new();\n    VerifyemailCtrl = $controller('VerifyemailCtrl', {\n      $scope: scope\n    });\n  }));\n\n  it('should attach a list of awesomeThings to the scope', function () {\n    expect(scope.awesomeThings.length).toBe(3);\n  });\n});\n"
  },
  {
    "path": "test/spec/services/djangoAuth.js",
    "content": "'use strict';\n\ndescribe('Service: Djangoauth', function () {\n\n  // load the service's module\n  beforeEach(module('angularDjangoRegistrationAuthApp'));\n\n  // instantiate service\n  var Djangoauth;\n  beforeEach(inject(function (_Djangoauth_) {\n    Djangoauth = _Djangoauth_;\n  }));\n\n  it('should do something', function () {\n    expect(!!Djangoauth).toBe(true);\n  });\n\n});\n"
  }
]