1
+ 'use strict' ;
2
+ ( function ( angular ) {
3
+ var devise = angular . module ( 'Devise' , [ ] ) ;
4
+ devise . config ( [
5
+ '$httpProvider' ,
6
+ function ( $httpProvider ) {
7
+ $httpProvider . interceptors . push ( function ( $location , $q ) {
8
+ return {
9
+ responseError : function ( response ) {
10
+ if ( response . status === 401 ) {
11
+ $location . path ( '/users/login' ) ;
12
+ return response ;
13
+ }
14
+ return $q . reject ( response ) ;
15
+ }
16
+ } ;
17
+ } ) ;
18
+ $httpProvider . defaults . headers . common [ 'X-CSRF-Token' ] = angular . element ( document . querySelector ( 'meta[name=csrf-token]' ) ) . attr ( 'content' ) ;
19
+ }
20
+ ] ) ;
21
+ devise . factory ( 'Auth' , [
22
+ '$q' ,
23
+ '$location' ,
24
+ '$http' ,
25
+ function ( $q , $location , $http ) {
26
+ var slice = Array . prototype . slice ;
27
+ function redirect ( url ) {
28
+ if ( url == null ) {
29
+ return ;
30
+ }
31
+ url = url || '/' ;
32
+ $location . path ( url ) ;
33
+ }
34
+ function pick ( old ) {
35
+ var obj = { } ;
36
+ var props = slice . call ( arguments , 1 ) ;
37
+ var l = props . length ;
38
+ var prop ;
39
+ while ( l -- ) {
40
+ prop = props [ l ] ;
41
+ obj [ prop ] = old [ prop ] ;
42
+ }
43
+ return obj ;
44
+ }
45
+ var service = {
46
+ currentUser : null ,
47
+ login : function ( opts ) {
48
+ if ( ! opts ) {
49
+ opts = { } ;
50
+ }
51
+ var user = pick ( opts , 'email' , 'password' ) ;
52
+ return $http . post ( '/users/sign_in.json' , { user : user } ) . then ( function ( response ) {
53
+ service . currentUser = response . data ;
54
+ redirect ( opts . redirect ) ;
55
+ return service . requestCurrentUser ( ) ;
56
+ } ) ;
57
+ } ,
58
+ logout : function ( opts ) {
59
+ if ( ! opts ) {
60
+ opts = { } ;
61
+ }
62
+ $http . delete ( '/users/sign_out.json' ) . then ( function ( ) {
63
+ service . currentUser = null ;
64
+ redirect ( opts . redirect ) ;
65
+ } ) ;
66
+ } ,
67
+ register : function ( opts ) {
68
+ if ( ! opts ) {
69
+ opts = { } ;
70
+ }
71
+ var user = pick ( opts , 'email' , 'password' , 'password_confirmation' ) ;
72
+ if ( ! user . password_confirmation ) {
73
+ user . password_confirmation = user . password ;
74
+ }
75
+ return $http . post ( '/users.json' , { user : user } ) . then ( function ( response ) {
76
+ service . currentUser = response . data ;
77
+ redirect ( opts . redirect ) ;
78
+ } ) ;
79
+ } ,
80
+ requestCurrentUser : function ( ) {
81
+ if ( service . isAuthenticated ( ) ) {
82
+ return $q . when ( service . currentUser ) ;
83
+ }
84
+ return service . login ( ) ;
85
+ } ,
86
+ isAuthenticated : function ( ) {
87
+ return ! ! service . currentUser ;
88
+ }
89
+ } ;
90
+ return service ;
91
+ }
92
+ ] ) ;
93
+ } ( angular ) ) ;
0 commit comments