Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Ember from 'ember';
- export
- default Ember.Service.extend({
- session: Ember.inject.service(),
- store: Ember.inject.service(),
- firebase: Ember.inject.service(),
- firebaseApp: Ember.inject.service(),
- currentUser:function(){
- var providerData = this.get('session.currentUser.providerData.firstObject');
- if(!providerData) {
- return {
- email: this.get('session.currentUser.email'),
- user: this.get('session.currentUser.user'),
- };
- }
- var currentUser = {
- email: providerData.email,
- photoURL: providerData.photoURL,
- displayName: providerData.displayName || providerData.email,
- user: this.get('session.currentUser.user'),
- };
- return currentUser;
- }.property('session.currentUser.providerData[]','session.currentUser','session.currentUser.user'),
- createUserIfDoesNotExist(provider,uid,email,providerData){
- return new Ember.RSVP.Promise((resolve, reject) => {
- this.get('store').find('user', uid).then((user)=>{
- //update user if needed
- if(providerData && providerData.currentUser){
- let userData = providerData.currentUser;
- if(providerData.currentUser.providerData && providerData.currentUser.providerData[0])
- userData = providerData.currentUser.providerData[0];
- if(user.get('email') !== userData.email && userData.email) {
- user.set('email', userData.email);
- }
- if(user.get('displayName') !== userData.displayName) {
- user.set('displayName', userData.displayName);
- }
- if(user.get('photoURL') !== userData.photoURL) {
- user.set('photoURL', userData.photoURL);
- }
- user.save().finally(()=>{
- resolve(user);
- });
- }
- else{
- resolve(user);
- }
- }).catch(()=>{
- //create user record
- let user = this.get('store').createRecord('user', {
- id: uid,
- email: email,
- provider: provider,
- createdOn: new Date().getTime()
- });
- if(providerData && providerData.currentUser){
- user.set('email', providerData.currentUser.email);
- user.set('displayName', providerData.currentUser.displayName);
- user.set('photoURL', providerData.currentUser.photoURL);
- }
- let notebook = this.get('store').createRecord('notebook', {user:user, title: "My first notebook"});
- user.save().then(() => {
- notebook.save();
- resolve(user);
- }).catch(error => {
- console.error(error);
- reject("Failed to create account.");
- });
- });
- return;
- });
- },
- setUser: function() {
- let uid = this.get('session.uid');
- return this.get('store').find('user', uid).then(user => {
- return this.set('session.currentUser.user', user);
- }).catch((e) => {
- console.log(e);
- throw e;
- });
- },
- signUp: function(provider, email, password) {
- return new Ember.RSVP.Promise((resolve, reject) => {
- this.get('firebaseApp').auth().createUserWithEmailAndPassword(email, password).
- then((data) => {
- this.createUserIfDoesNotExist(provider, data.uid, email).then(resolve).catch(reject);
- }).catch(reject);
- }).catch(error => {
- if (error.message) {
- throw error.message;
- }
- throw 'Enter a valid email and password and try again.';
- });
- },
- signIn: function(provider, email, password) {
- return new Ember.RSVP.Promise((resolve, reject) => {
- this.get("session").open("firebase", {
- provider: provider,
- email: email,
- password: password
- }).then(data => {
- let providerData;
- if(provider === 'google'){
- email = data.currentUser.email;
- providerData = data;
- }
- return this.createUserIfDoesNotExist(provider,data.uid, email, providerData).then(()=>{
- return this.setUser().then(resolve).catch(reject);
- }).catch(reject);
- }).catch(reject);
- }).catch(error => {
- if (error.message) {
- throw error.message;
- }
- throw 'Enter a valid email and password and try again.';
- });
- },
- signOut: function() {
- let store = this.get('store');
- store.unloadAll();
- //let user = this.get('currentUser.user');
- //store.unloadRecord(user);
- this.get("session").close();
- },
- forgotPassword: function(email) {
- return new Ember.RSVP.Promise((resolve, reject) => {
- this.get('firebase').resetPassword({
- email
- }, response => {
- if (response) {
- return reject(response);
- }
- resolve();
- });
- }).catch(error => {
- if (error.message) {
- throw error.message;
- }
- throw 'Error: Enter a valid email and try again';
- });
- },
- resetPassword: function(email, oldPassword, newPassword) {
- return new Ember.RSVP.Promise((resolve, reject) => {
- this.get('firebase').changePassword({
- email, oldPassword, newPassword
- }, response => {
- if (response) {
- return reject(response);
- }
- resolve();
- });
- }).catch(error => {
- if (error.message) {
- throw error.message;
- }
- throw 'Error: Enter a valid email and password and try again';
- });
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement