auth.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { UPDATE_AVATAR, UPDATE_USERNAME } from 'misago/reducers/users';
  2. export var initialState = {
  3. signedIn: false,
  4. signedOut: false
  5. };
  6. export const PATCH_USER = 'PATCH_USER';
  7. export const SIGN_IN = 'SIGN_IN';
  8. export const SIGN_OUT = 'SIGN_OUT';
  9. export function patch(patch) {
  10. return {
  11. type: PATCH_USER,
  12. patch
  13. };
  14. }
  15. export function signIn(user) {
  16. return {
  17. type: SIGN_IN,
  18. user
  19. };
  20. }
  21. export function signOut(soft=false) {
  22. return {
  23. type: SIGN_OUT,
  24. soft
  25. };
  26. }
  27. export default function auth(state=initialState, action=null) {
  28. switch (action.type) {
  29. case PATCH_USER:
  30. let newState = Object.assign({}, state);
  31. newState.user = Object.assign({}, state.user, action.patch);
  32. return newState;
  33. case SIGN_IN:
  34. return Object.assign({}, state, {
  35. signedIn: action.user
  36. });
  37. case SIGN_OUT:
  38. return Object.assign({}, state, {
  39. isAuthenticated: false,
  40. isAnonymous: true,
  41. signedOut: !action.soft
  42. });
  43. case UPDATE_AVATAR:
  44. if (state.isAuthenticated && state.user.id === action.userId) {
  45. let newState = Object.assign({}, state);
  46. newState.user = Object.assign({}, state.user, {
  47. 'avatar_hash': action.avatarHash
  48. });
  49. return newState;
  50. }
  51. return state;
  52. case UPDATE_USERNAME:
  53. if (state.isAuthenticated && state.user.id === action.userId) {
  54. let newState = Object.assign({}, state);
  55. newState.user = Object.assign({}, state.user, {
  56. username: action.username,
  57. slug: action.slug
  58. });
  59. return newState;
  60. }
  61. return state;
  62. default:
  63. return state;
  64. }
  65. }