Advertisement
Guest User

Untitled

a guest
Oct 18th, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. import Ember from 'ember';
  2.  
  3. export
  4. default Ember.Service.extend({
  5. session: Ember.inject.service(),
  6. store: Ember.inject.service(),
  7. firebase: Ember.inject.service(),
  8. firebaseApp: Ember.inject.service(),
  9.  
  10.  
  11. currentUser:function(){
  12. var providerData = this.get('session.currentUser.providerData.firstObject');
  13. if(!providerData) {
  14. return {
  15. email: this.get('session.currentUser.email'),
  16. user: this.get('session.currentUser.user'),
  17. };
  18. }
  19. var currentUser = {
  20. email: providerData.email,
  21. photoURL: providerData.photoURL,
  22. displayName: providerData.displayName || providerData.email,
  23. user: this.get('session.currentUser.user'),
  24. };
  25.  
  26. return currentUser;
  27. }.property('session.currentUser.providerData[]','session.currentUser','session.currentUser.user'),
  28.  
  29.  
  30. createUserIfDoesNotExist(provider,uid,email,providerData){
  31. return new Ember.RSVP.Promise((resolve, reject) => {
  32. this.get('store').find('user', uid).then((user)=>{
  33. //update user if needed
  34. if(providerData && providerData.currentUser){
  35. let userData = providerData.currentUser;
  36. if(providerData.currentUser.providerData && providerData.currentUser.providerData[0])
  37. userData = providerData.currentUser.providerData[0];
  38.  
  39. if(user.get('email') !== userData.email && userData.email) {
  40. user.set('email', userData.email);
  41. }
  42. if(user.get('displayName') !== userData.displayName) {
  43. user.set('displayName', userData.displayName);
  44. }
  45. if(user.get('photoURL') !== userData.photoURL) {
  46. user.set('photoURL', userData.photoURL);
  47. }
  48.  
  49. user.save().finally(()=>{
  50. resolve(user);
  51. });
  52. }
  53. else{
  54. resolve(user);
  55. }
  56. }).catch(()=>{
  57. //create user record
  58. let user = this.get('store').createRecord('user', {
  59. id: uid,
  60. email: email,
  61. provider: provider,
  62. createdOn: new Date().getTime()
  63. });
  64. if(providerData && providerData.currentUser){
  65. user.set('email', providerData.currentUser.email);
  66. user.set('displayName', providerData.currentUser.displayName);
  67. user.set('photoURL', providerData.currentUser.photoURL);
  68. }
  69. let notebook = this.get('store').createRecord('notebook', {user:user, title: "My first notebook"});
  70. user.save().then(() => {
  71. notebook.save();
  72. resolve(user);
  73. }).catch(error => {
  74. console.error(error);
  75. reject("Failed to create account.");
  76. });
  77. });
  78. return;
  79. });
  80. },
  81.  
  82. setUser: function() {
  83. let uid = this.get('session.uid');
  84. return this.get('store').find('user', uid).then(user => {
  85. return this.set('session.currentUser.user', user);
  86. }).catch((e) => {
  87. console.log(e);
  88. throw e;
  89. });
  90. },
  91. signUp: function(provider, email, password) {
  92. return new Ember.RSVP.Promise((resolve, reject) => {
  93. this.get('firebaseApp').auth().createUserWithEmailAndPassword(email, password).
  94. then((data) => {
  95. this.createUserIfDoesNotExist(provider, data.uid, email).then(resolve).catch(reject);
  96. }).catch(reject);
  97. }).catch(error => {
  98. if (error.message) {
  99. throw error.message;
  100. }
  101. throw 'Enter a valid email and password and try again.';
  102. });
  103. },
  104.  
  105. signIn: function(provider, email, password) {
  106. return new Ember.RSVP.Promise((resolve, reject) => {
  107. this.get("session").open("firebase", {
  108. provider: provider,
  109. email: email,
  110. password: password
  111. }).then(data => {
  112. let providerData;
  113. if(provider === 'google'){
  114. email = data.currentUser.email;
  115. providerData = data;
  116. }
  117. return this.createUserIfDoesNotExist(provider,data.uid, email, providerData).then(()=>{
  118. return this.setUser().then(resolve).catch(reject);
  119. }).catch(reject);
  120. }).catch(reject);
  121. }).catch(error => {
  122. if (error.message) {
  123. throw error.message;
  124. }
  125. throw 'Enter a valid email and password and try again.';
  126. });
  127. },
  128.  
  129. signOut: function() {
  130. let store = this.get('store');
  131. store.unloadAll();
  132. //let user = this.get('currentUser.user');
  133. //store.unloadRecord(user);
  134. this.get("session").close();
  135. },
  136.  
  137. forgotPassword: function(email) {
  138. return new Ember.RSVP.Promise((resolve, reject) => {
  139. this.get('firebase').resetPassword({
  140. email
  141. }, response => {
  142. if (response) {
  143. return reject(response);
  144. }
  145. resolve();
  146. });
  147. }).catch(error => {
  148. if (error.message) {
  149. throw error.message;
  150. }
  151. throw 'Error: Enter a valid email and try again';
  152. });
  153. },
  154.  
  155. resetPassword: function(email, oldPassword, newPassword) {
  156.  
  157. return new Ember.RSVP.Promise((resolve, reject) => {
  158. this.get('firebase').changePassword({
  159. email, oldPassword, newPassword
  160. }, response => {
  161. if (response) {
  162. return reject(response);
  163. }
  164. resolve();
  165. });
  166. }).catch(error => {
  167. if (error.message) {
  168. throw error.message;
  169. }
  170. throw 'Error: Enter a valid email and password and try again';
  171. });
  172.  
  173. }
  174. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement